Uživatelské nástroje

Nástroje pro tento web


firebird:zalohovani_databazi_-_gbak

Toto je starší verze dokumentu!


Zálohování databází

GBAK

Vlastnosti

  • upgrade databáze na novou verzi, přenos mezi platformami
  • údržba a optimalizace, kontrola konzistence
  • distribuce dat, záchrana dat
  • změna vlastníka a velikosti databázové stránky

Zálohování a obnova

Firebird přináší možnost provádět zálohování za plného provozu. Přestože lze zálohovat i prostým kopírováním souboru FDB, je vhodnější použít GBAK.

Záloha

 gbak -B -V -user sysdba -password heslo server:c:\adresar\dat\data.fdb c:\zaloha\data.fbk

Server a cestu k databázi lze zjistit v souboru obis4/etc/obisrc.xml. V následující ukázce jsou například data2007 uložena na eposux:/home/firebird/epos/data.fdb.

  <Data Name="data">
    <Caption>data2007</Caption>
    <Type>sql</Type>
    <Database>eposux:/home/firebird/epos/data.fdb</Database>
  </Data>

Obnova

Firebird 1.5
 gbak -R -V -user sysdba -password heslo c:\zaloha\data.fbk server:c:\adresar\dat\data.fdb
Firebird 2.0
 gbak -REP -V -user sysdba -password heslo c:\zaloha\data.fbk server:c:\adresar\dat\data.fdb

Přepínač {-service} způsobí, že se záloha místo na počítači odkud se GBAK spouští provede na serveru, kde se databáze nachází.

 gbak -B -service server:service_mgr -user sysdba -pass heslo c:\adresar\dat\data.fdb c:\zaloha\data.fbk

Pozor chybne je pouziti: gbak -B -service server:service_mgr -user sysdba -pass heslo server:c:\adresar\dat\data.fdb c:\zaloha\data.fbk - na nekterych instalacich toto konci chybou connection rejected

Obnova databáze v Embed verzi

Pokud je nutné obnovit databázi v lokální EMBED verzi je nutné nastavit proměnnou FIREBIRD do OBIS4/FIREBIRD. Pokud toto není GBAK skončí chybou gbak: ERROR: CHARACTER SET WIN1250 is not installed.

Přidání obnovené databáze do OBISRC.XML

Je třeba editovat soubor etc/obisrc.xml kam se přidá nová databáze např. takto:

  <Data Name="data-obnova">
    <Caption>Obnovena databaze</Caption>
    <Type>sql</Type>
    <Database>server:/home/firebird/data-obnova.fdb</Database>
  </Data>

Backup/restore databází pro aktualizaci ODS

Použití:

  1. skript se spouští se přímo v adresáři s FDB
  2. kontrola verze ODS: upgrade_ods.sh *.fdb
  3. backup/restore - verzi ODS zadat dle aktuálně nainstalovaného firebird: upgrade_ods.sh -upgrade 11.2 *.fdb
  4. backup/restore se provede jen pro FDB kde se lisi ODS databáze od zadaneho ODS v parametru skriptu: -upgrade ods_ver

Skript obis5/user/scripts/upgrade_ods.sh

#!/bin/sh
# upgrade_ods.sh [-upgrade 11.2]  *.fdb
 
FIREBIRD=/opt/firebird
 
if [ "$1" = "-upgrade" ]; then
  UPGRADE="true"
  DESTODS=$2
  shift
  shift
fi
 
for i in $*; do
  ODS=`echo 'show database;' | $FIREBIRD/bin/isql $i | grep ODS | cut -d " " -f 3`
  echo "$i : ODS $ODS"
  if [ "$UPGRADE" = "true" ]; then
    if [  "$ODS" != "$DESTODS"  ]; then
      echo backup /tmp/$i
      $FIREBIRD/bin/gbak $i /tmp/$i
      echo restore /tmp/$i
      mv $i $i.bk
      $FIREBIRD/bin/gbak -R /tmp/$i $i
      chown firebird:firebird $i
    fi
  fi
done

Kopírování DB na nový server

Použití:

  1. skript se spouští se přímo v adresáři s FDB
  2. nastavit heslo ve skriptu
  3. otestovat co se bude kopírovat: copy_to_server.sh ~/obis5/etc/obisrc.xml *.fdb
  4. soubory databáze NESMÍ na cílovém serveru existovat
  5. apt-get install pv
  6. kopírovani: copy_to_server.sh server:/mnt/obis-data ~/obis5/etc/obisrc.xml *.fdb

Skript obis5/user/scripts/copy_to_server.sh:

#!/bin/sh
#kopiruje vsechny FDB na novy server, pokud je databaze v obisrc.xml
#databaze NESMI v cilovem server:/path/to/fdb existovat, pokud exituje, tak se neprepise
#pouziti: copy_to_server.sh [-server server:/path/to/fdb] /path/to/obis/etc/obisrc.xml *.fdb
 
FIREBIRD=/opt/firebird
ISC_USER=sysdba
#ISC_PASSWORD=heslo #nastavit a odmarkovat pokud neni v nastaveno v prostredi
 
if [ "$1" = "-server" ]; then
  SERVER=$2
  shift
  shift
fi
 
OBISRC=$1
shift
 
echo OBISRC=$OBISRC
 
for i in $*; do   
  grep "$i" $OBISRC > /dev/null
  if [ $? -eq 1 ]; then
    echo "$i not in obisrc.xml"
  else
    ls -lh $i
    if [ -n "$SERVER" ]; then
     echo "$FIREBIRD/bin/gbak $i stdout | pv | $FIREBIRD/bin/gbak -R stdin $SERVER/$i"
     $FIREBIRD/bin/gbak $i stdout | pv | $FIREBIRD/bin/gbak -R stdin $SERVER/$i
    fi
  fi
done

NBACKUP

Zálohování

Nový zálohovací program Firebird 2.0. Umožňuje inkrementální zálohy.

Ukázky skriptů:

Tento skript se spouští z cronu:

/etc/cron.d/obis nastavit práva: chmod 644 /etc/cron.d/obis

MAILTO=fixme@epos.cz
SCRIPTSDIR=/home/obis/obis5/user/scripts
#nastavit pro firebird passwd: /home/firebird + /home/firebird/.obis_profile
45 5-20 * * * firebird $SCRIPTSDIR/backup-firebird.sh 3
30 5  * * * firebird $SCRIPTSDIR/backup-firebird.sh 2
15 5  * * 7 firebird $SCRIPTSDIR/backup-firebird.sh 1
0 5  1 * * firebird $SCRIPTSDIR/backup-firebird.sh 0

scripts/setenv.sh

backup-firebird.sh

#!/bin/sh
LEVEL=$1
 
. `dirname $0`/setenv.sh
 
if [ ! -d $BACKUPPATH ]; then
  echo "neexistuje adresar $BACKUPPATH, neni namountovan?"
  exit
fi
 
/usr/bin/find $BACKUPPATH -iname '*.nbk' -mtime +66  -exec /bin/rm -f {} \;
/usr/bin/find $BACKUPPATH -iname 'fileoptions*.tgz' -mtime +66  -exec /bin/rm -f {} \;
for FILE in $DATAFILES; do
  #zaloha se vytvori v aktualnim adresari 
  cd $BACKUPPATH
  $FIREBIRD/bin/nbackup -U $ISC_USER -P $ISC_PASSWORD -B $LEVEL $DATABASEPATH/$FILE > /dev/null
  #sweep kazdy tyden
  if [ $LEVEL -eq 1 ]; then
    $FIREBIRD/bin/gfix -user $ISC_USER -pass $ISC_PASSWORD -sweep $DATABASEPATH/$FILE
  fi
  #gbak + pokusny restore do /dev/null kazdy den - pripadne chyby posle cron
  if [ $LEVEL -eq 2 ]; then
    tar -czf $BACKUPPATH/fileoptions-`date +%F`.tgz $UZIVATELEDIR 2>/dev/null
    rm $BACKUPPATH/$FILE.fbk.2
    mv $BACKUPPATH/$FILE.fbk.1 $BACKUPPATH/$FILE.fbk.2
    mv $BACKUPPATH/$FILE.fbk $BACKUPPATH/$FILE.fbk.1
    $FIREBIRD/bin/gbak -B -user $ISC_USER -pass $ISC_PASSWORD $DATABASEPATH/$FILE $BACKUPPATH/$FILE.fbk
    $FIREBIRD/bin/gbak -REP -user $ISC_USER -pass $ISC_PASSWORD $BACKUPPATH/$FILE.fbk $BACKUPPATH/$FILE
  fi
done

Skript pro Windows:

set LEVEL=%1
set BACKUPPATH="c:\backup"
set DATABASEPATH="c:/firebird/fdbs"
set FBPATH="c:\firebird"
set ISC_PASSWORD=Heslo
 
cd /D %BACKUPPATH%
forfiles -p %BACKUPPATH% -s -m *.nbk -d -60 -c "cmd /c del @path"
 
for %%F IN (data.fdb) DO %FBPATH%\bin\nbackup -U sysdba -P %ISC_PASSWORD% -B %LEVEL% %DATABASEPATH%\%%F

Obnova

Obnovuje se pomocí parametru -R do jiného souboru databáze:

nbackup -R /root/datazal.fdb data.fdb-0-20080701-0252.nbk data.fdb-1-20080720-0147.nbk

Zobrazení posledních záloh: for i in $(seq 0 3); do ls -lt /opt/backup/archiv-data/data.fdb-$i-* | head -n 3; done ==== Jak zrušit delta file ==== Při chybě při nbackup dojde k trvalému vytvoření data.fdb.delta souboru, kam se ukládají změny. (Hláška database is already in the physical backup mode). Lze také ručně zapnout pomocí: <code sql> alter database begin backup </code> V tomto stavu lze také soubor data.fdb běžně kopírovat. Delta file se zpět spojí pomocí: <code sql> alter database end backup </code> ==== Skript pro kontrolu OIT ==== scripts/setenv.sh scripts/checkoit.sh <code bash> #!/bin/sh . `dirname $0`/setenv.sh #export DEBUG=true $ROOTDIR/bin/checkoit.sh -kill_server -sweep </code> ===== Zálohování poškozené databáze ===== Databáze při běžné záloze hlásila chybu (firebird verze 2.0): <code> gbak: writing data for table COMMON_POCIT gbak: ERROR:internal gds software consistency check (cannot find record back version (291), file: vio.cpp line: 3568) gbak: ERROR: gds_$receive failed gbak:Exiting before completion due to errors gbak: ERROR:internal gds software consistency check (can't continue after bugcheck) </code> Zkopírovat soubor databáze a zkoušet na kopii Nejprve zkusit validaci: <code> gfix -validate -full jméno_databáze </code> Opravu: <code> gfix -mend -full -ignore jméno_databáze </code> Pak zkusit znovu validaci, pokud nepomuze tak gbak: <code> gbak -B -V -IG -O -G localhost:/home/firebird/epos/data.fdb data.fbk </code> Dále lze zálohu běžným způsobem obnovit. V případě že obnova selže, zkuste: <code> gbak -C -INACTIVE -NO_VALIDITY localhost:/home/firebird/epos/data.fdb data.fbk </code> Takto obnovená databáze není určena k běžnému použití, ale pouze k záchraně dat. Někdy může pomoct přepnutí databáze na readonly před zálohou: gfix -mode read_only ===== Drop a Create tabule common_log/syslog ===== Někdy je možné u poškozené databáze, kde gbak vypadává na log/syslog pomocí isql dropnout tyto tabulky (delete nejde - skončí stejnou chybou jako gbak). <code bash> isql data.fdb -i ddl.sql </code> ddl.sql: <code SQL> SET SQL DIALECT 3; DROP TABLE COMMON_LOG; DROP TABLE COMMON_SYSLOG; COMMIT; /* Table: COMMON_LOG, Owner: SYSDBA */ CREATE TABLE COMMON_LOG (TABLENAME VARCHAR(35), ID VARCHAR(60), DATUM TIMESTAMP, OP VARCHAR(1), IDUZIVATELE VARCHAR(8), ROWID NUMERIC(18, 0), CHANGED NUMERIC(18, 0)); /* Table: COMMON_SYSLOG, Owner: SYSDBA */ CREATE TABLE COMMON_SYSLOG (DATUM TIMESTAMP, IDUZIVATELE VARCHAR(8), DRUH VARCHAR(8), AKCE VARCHAR(8), POZNAMKA BLOB SUB_TYPE TEXT SEGMENT SIZE 80); /* Index definitions for user tables */ CREATE INDEX COMMON_LOG_1 ON COMMON_LOG (DATUM); CREATE UNIQUE INDEX COMMON_LOG_P ON COMMON_LOG (ROWID); /* Grant permissions for database */ GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COMMON_LOG TO USER OBIS; GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COMMON_SYSLOG TO USER OBIS; COMMIT; </code> Kompletní metadata v DDL SQL formatu lze vyexportovat: <code bash> isql data.fdb -o ddl.sql -x </code> ===== Obnova tabulek pomoci fbexport bez common_log/syslog ===== Touto metodou se podarilo obnovit databazi, ktera mela poskozenou tabulku common_syslog (page wrong type) a nebylo mozne pomoci gfix a gbak vytvorit zalohu. Pomoci isql nebylo mozno s databazi cokoli provest (internal gds software consistency check), ale fbexport pro ostatni tabulky fungoval. fbcopy na kopirovani cele DB pouzit neslo, ani s parametry SK. <code bash> #export metadata, create empty database gbak -m /home/firebird/fdbs/data-poskozena.fdb /home/firebird/fdbs/data-metadata.fbk gbak -REP /home/firebird/fdbs/data-metadata.fbk /home/firebird/fdbs/data-new.fdb </code> <code bash> #!/bin/sh for table in COMMON_BANKUCTY COMMON_CISMEMO COMMON_DOPRAVA COMMON_DPH COMMON_GOPTIONS COMMON_JAZYKY COMMON_KALENDAR COMMON_KURZY COMMON_LOGCTRL COMMON_MENY COMMON_NAST COMMON_NAVIGATORS COMMON_OPERACE COMMON_POCIT COMMON_SIMJ COMMON_SKUPINY COMMON_STATY COMMON_STRED COMMON_TRIGGERS COMMON_UOPTIONS COMMON_UZIVATELE FAKTURY_CISMEMO FAKTURY_FADPH FAKTURY_FAKTURY FAKTURY_FDRUH FAKTURY_FPOLOZKY FAKTURY_KONSTS FAKTURY_PRIKAZY FAKTURY_PRIKDRUH FAKTURY_PRIKPOL FAKTURY_TEXTY FAKTURY_TYPUHR FAKTURY_UHRDRUH FAKTURY_UHRHL FAKTURY_UHRPOL MAJETEK_CISMEMO MAJETEK_CPOLOZKY MAJETEK_DRUHY MAJETEK_MAJETEK MAJETEK_OSKUPINY MAJETEK_POLOZKY PARTNERI_ADRUH PARTNERI_AKCE PARTNERI_ASTAV PARTNERI_CISMEMO PARTNERI_FAKTADR PARTNERI_FZATRID PARTNERI_PARTNERI PARTNERI_SAKCE PARTNERI_ZASTUPCI PARTNERI_ZFUNKCE PROST_CISMEMO PROST_CNAKL PROST_NAKLADY PROST_PROSDRUH PROST_PROST PROST_VAZBY PROST_VPDRUH PROST_VYKONY PROST_VYKPLAN PROST_VYKPROT PROST_VYKTEXT ROZPOCTY_CDRUH ROZPOCTY_CENIK ROZPOCTY_CISMEMO ROZPOCTY_CREKAP ROZPOCTY_CRNAKL ROZPOCTY_HLAVY ROZPOCTY_KDRUH ROZPOCTY_RDRUH ROZPOCTY_REKAP ROZPOCTY_RKAP ROZPOCTY_RNAKL ROZPOCTY_ROZPOCTY ROZPOCTY_RPOLOZKY ROZPOCTY_SDRUH ROZPOCTY_TYPRKAP ROZPOCTY_VAZBY SKLAD_CDODNAKL SKLAD_CISMEMO SKLAD_DRUHSKL SKLAD_KARTY SKLAD_MATDRUH SKLAD_OBJED SKLAD_OBJPOL SKLAD_PDODNAKL SKLAD_PPOLOZKY SKLAD_PRIJEMKY SKLAD_RECSK SKLAD_REZERV SKLAD_REZERVHL SKLAD_REZOBJDR SKLAD_REZOBJVA SKLAD_SKLADPOL SKLAD_SKLADY SKLAD_VC SKLAD_ZN UCTO_CISMEMO UCTO_CTYP UCTO_DENIK UCTO_OSNOVA UCTO_PDENIK UCTO_ROZVAHA UCTO_SLDRUH UCTO_SLOUPCE UCTO_UAKCE UCTO_UDRUH UCTO_UODRUH UCTO_VYSLEDOVKA V_FAKTURY_UROKY ZAKAZKY_CISMEMO ZAKAZKY_CZAKPOL ZAKAZKY_ZAKAZKY ZAKAZKY_ZAKPOL ZAKAZKY_ZAKPRIJEM ZAKAZKY_ZAKVYK ZAKAZKY_ZDRUH; do echo $table fbexport -S -D /home/firebird/fdbs/data-poskozena.fdb -U sysdba -P Heslo -F $table.fbx -V $table fbexport -I -D /home/firebird/fdbs/data-new.fdb -U sysdba -P Heslo -F $table.fbx -V $table done </code> ===== Převedení databáze z ODS 10.1 (FB 1.5) ===== * gbak: ERROR:file … is not a valid database * na eposux backup pres FB 1.5 a restore pres 2.5 * gbak localhost/3051:/path/licence.fdb.old licence.fbk * gbak -R licence.fbk localhost:/path/licence.fdb

firebird/zalohovani_databazi_-_gbak.1638360888.txt.gz · Poslední úprava: 2021/12/01 12:14 autor: Karel Petrů