Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Кратко упутство за Гбак бекап-ресторе

Šta je gbak?

1. Savladavanje rezervnih kopija pomoću Gbak-a

1.0 Priprema

1.1 Najjednostavnija Firebird rezervna kopija pomoću gbak komande

1.2. Lokalna rezervna kopija pomoću gbak-a koja se može izvršiti online na Windows-u

1.3. Rezervna kopija pomoću gbak-a sa TCP/IP konekcionim nizom

1.4. Brža rezervna kopija pomoću gbak-a sa Service Manager-om

1.5. Najbrža rezervna kopija pomoću gbak-a sa Service Manager-om i inhibiranim sakupljanjem otpada

1.6. Rezervna kopija na mrežnu deljenu fasciklu ili mrežnu lokaciju

1.7. Jednostavna rezervna kopija sa udaljenog servera na lokalnu mašinu

1.8. Brža rezervna kopija sa udaljenog servera na lokalnu mašinu pomoću Service Manager-a

1.9. Rezervna kopija Firebird baze podataka na udaljenom serveru na isti udaljeni server pomoću Service Manager-a

1.10. Rezervna kopija Firebird baze podataka 6x brže sa Firebird 5 (ili HQbird u 2.5/3.0/4.0/5.0)

2. Restauracija pomoću Gbak alata

2.1. Najjednostavnija komanda za restauraciju

2.2. Restauracija sa localhost konekcionim nizom

2.3. Restauracija sa XNET-om na Windows-u

2.4. Brža restauracija sa Service Manager-om

2.5. Prekidač koji se ne preporučuje

2.6. Restauracija baze podataka pomoću aliasa

2.7. Restauracija lokalne rezervne kopije na udaljeni server

2.8. Restauracija lokalne rezervne kopije na udaljeni server pomoću Service Manager-a

2.9. Restauracija izuzetno dugačkih tabela

3. Podešavanje i evidentiranje procesa rezervne kopije i restauracije

3.1. Gbak sa verbose izlazom

3.2. Dodavanje statistike performansi u verbose izlaz

3.3. Isključivanje tabela iz rezervne kopije i/ili iz restauracije

3.4. Preuzimanje lozinke za rezervnu kopiju ili restauraciju iz datoteke

4. Jednokorak rezervna kopija-restauracija

5. Sažetak performansi

Veoma često postavljano pitanje o VM i Firebird rezervnim kopijama

Dodatak A. Greške tokom rezervne kopije/restauracije

Kontakt

Šta je gbak?

Gbak je standardni Firebird alat za komandnu liniju (pogledajte njegovu zvaničnu dokumentaciju ovde), dizajniran da izvrši 1) potpunu rezervnu kopiju baze podataka: čita svaki zapis u bazi podataka i čuva ih u datoteku rezervne kopije, 2) restauraciju rezervne kopije u novu bazu podataka.

Za programere i administratore sa iskustvom u drugim RDBMS sistemima, termin „rezervna kopija” može biti pomalo zbunjujući, jer gbak ne pravi tačnu kopiju baze podataka, već datoteku u formatu koji nije baza podataka, samo sa podacima (indeksi se čuvaju kao deklaracije).

Da bi se kreirala baza podataka iz gbak datoteke rezervne kopije, potrebno je izvršiti proces restauracije pomoću gbak-a.

1. Savladavanje rezervnih kopija pomoću Gbak-a

1.0. Priprema

Hajde da kreiramo fasciklu C:\data i tamo postavimo neku bazu podataka. Koristićemo bazu od 5Gb sa Firebird OLTP-EMUL test-a, ali možete koristiti i sopstvenu bazu podataka, naravno.

Za Linux korisnike - hajde da kreiramo fasciklu /db i promenimo njenog vlasnika u „firebird”, i kopiramo bazu podataka tamo (pobrinite se da je njen vlasnik takođe firebird).

Code
mkdir /db
chown firebird -R /db

1.1 Najjednostavnija Firebird rezervna kopija pomoću gbak komande

Windows

Code
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey

U ovom primeru, gbak alat pristupa datoteci baze podataka koristeći lokalni ili ugrađeni pristup.

Firebird 3.0: Ugrađeni pristup u podrazumevanoj konfiguraciji za Firebird 3.0 (sa parametrom u firebird.conf ServerMode = SuperServer) će pokušati da stavi ekskluzivnu bravu na bazu podataka, tako da druge konekcije neće moći da pristupe bazi podataka (ili će pokušaj gbak-a propasti zbog aktivnih konekcija).

Firebird 2.5: Sa Firebird 2.5 na Windows-u komanda će raditi ispravno kroz XNET protokol (ako imate samo jednu Firebird instancu koja radi, naravno). Na Linux-u, Firebird će pokušati da koristi ugrađeni pristup, ako nije dostupan, automatski (i implicitno) će pokušati da se poveže preko TCP/IP-a. (Ako ne znate šta znače XNET, INET, itd, pogledajte Firebird Connection Strings Cheat Sheet).

Napomena 1: Ova komanda se izvršava pod nalogom OS korisnika (tj. vašim), i koristi njegove dozvole za pristup datotekama rezervne kopije i baze podataka.

Normalno, Firebird servis na Windows-u radi sa LocalSystem nalogom, a na Linux-u pod korisnikom „firebird”, ali se konzola obično pokreće pod vašim sopstvenim korisničkim nalogom.

Ako ovaj korisnički nalog nema pristup putanji baze podataka ili putanji rezervne kopije, gbak će propasti sa greškom „Cannot open backup file” (pogledajte primer u Dodatku A. Greške, #5).

Napomena 2: gbak -b tiho prepisuje datoteku rezervne kopije. Dakle, ako već imate backup1.fbk, biće prepisana.

Napomena 3: Na Linux-u, ova gbak komanda će kreirati datoteku rezervne kopije sa vlasnikom jednakim korisniku konzole.

Vreme za rezervnu kopiju za ovu komandu: 120 sekundi

1.2. Lokalna rezervna kopija pomoću gbak-a koja se može izvršiti online na Windows-u

Ovaj odeljak je samo za Windows korisnike! Obično moramo da izvršimo rezervnu kopiju dok imamo aktivne konekcije na bazu podataka, pa je umesto ugrađene konekcije bolje eksplicitno navesti lokalni protokol da bi se izbeglo stavljanje ekskluzivne brave na datoteku baze podataka od strane samog gbak-a u Firebird 3, tj. XNET.

Za Firebird 3.0:

Code
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Za Firebird 2.5, možemo koristiti lokalni konekcioni niz, i on će takođe koristiti XNET:

Code
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Na Linux-u, Firebird ne podržava specifičan lokalni protokol kao što je XNET na Windows-u, pa je neophodno koristiti TCP/IP konekcioni niz (pogledajte odeljak 1.3).

Takođe, XNET radi samo za jednu instancu Firebird-a, pa ako pokrećete više instanci Firebird-a na Windows-u, možda će biti lakše koristiti INET stil konekcionog niza da biste odredili ciljnu instancu servera

Vreme za rezervnu kopiju: 139 sekundi

1.3. Rezervna kopija pomoću gbak-a sa TCP/IP konekcionim nizom

Ovo je najuniverzalnija gbak komanda za izvršavanje rezervne kopije online.

Windows

Code
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey

U ovom slučaju, navođenjem localhost: na početku putanje baze podataka, konekcija se vrši kroz mrežni podsistem Firebird-a.

To je nešto sporije od lokalnog pristupa, ali radi u svim slučajevima kada imamo pokrenut server koji prihvata konekcije.

Nestandardni port za Firebird

Ako imate Firebird koji radi na nestandardnom portu (npr. 3051 umesto 3050), možete izvršiti rezervnu kopiju na ovaj način:

Windows

Code
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey

Vreme za rezervnu kopiju: 182 sekunde

1.4. Бржа резервна копија са gbak-ом помоћу Service Manager-а

Како можемо постићи универзалност TCP/IP конекције, са подршком за нестандардни порт, и брзу локалну резервну копију? Хајде да користимо Service Manager! Service Manager је, једноставно речено, начин да покренемо стандардне алате кроз Firebird engine. Имајте на уму да у случају Service Manager-а нема потребе да наведете име сервера у путањи до базе података, само у параметру -se.

Windows

Code
gbak -b -se localhost:service_mgr c:\Data\test1.fdb  c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey

Ова команда користи прекидач -service да наведе да желимо да користимо Service Manager Firebird инстанце на порту 3050 за обављање резервне копије.

У овом случају, резервна копија ће бити обављена директно унутар Firebird процеса (има копију gbak кода), а пошто је комуникација унутар процеса много бржа, резервна копија ће у овом случају бити значајно бржа.

Ако Firebird ради на нестандардном порту (нпр. 3051), команда може изгледати овако:

Code
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb  c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Напомена: Постоји значајно ограничење у Firebird 2.5 и Firebird 3.0.0-3.0.5 (уклоњено тек у 3.0.6): командна линија (сви параметри и путање за базу података и за резервну копију) мора бити краћа од 256 знакова.

Ако наиђете на ово ограничење, на пример због дугих путања базе података и резервне копије, можете декларисати алијас за базу података у databases.conf (3.0 и новији) или aliases.conf (2.5):

Code
mydb1=c:\Data\test1.fdb #Windows

или

Code
mydb1=/db/test1.fdb  #linux

и затим га користити у нашој команди:

Windows

Code
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey

Време за резервну копију: 115 секунди

1.5. Најбржа резервна копија са gbak-ом са инхибираним сакупљањем смећа

Да би резервна копија била још бржа, додајмо прекидач -g

Code
 -G(ARBAGE_COLLECT)    inhibit garbage collection

Дакле, команда за резервну копију ће бити следећа

Windows

Code
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Linux

Code
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey

Прекидач -g приморава Firebird engine да онемогући сакупљање смећа за процес резервне копије у датотеци базе података.

То не значи да ће верзије записа смећа бити сачуване у датотеци резервне копије, већ значи да сервер неће покушавати да очисти постојеће смеће у бази података током резервне копије, и резервна копија ће бити бржа.

Снажно препоручујемо коришћење овог прекидача, јер верујемо да сакупљање смећа и повезано чишћење треба да обавља sweep (gfix -sweep или autosweep), па је боље да не сматрате gbak било каквом алтернативом за sweep.

Време за резервну копију: 105 секунди

1.6. Резервна копија на мрежну дељену фасциклу или мрежну локацију

Шта ако треба да ставимо датотеку резервне копије на мрежну дељену фасциклу?

На Windows-у

Честа забуна нових Firebird корисника: ручна резервна копија (када покренете команду из командне линије), са једноставним gbak -b, на мрежну дељену фасциклу ради сасвим добро, али брза верзија gbak-а са -se localhost:service_mgr не ради.

Разлог је што Firebird на Windows-у ради под LocalSystem налогом, који нема приступ мрежним локацијама (осим ако те мрежне дељене фасцикле немају конфигурисан приступ за групу „Everyone“, али то је веома, веома опасно у нашој ери ransomware-а).

Решење је да покренете Firebird сервис на Windows-у под налогом који има довољно права за приступ мрежној дељеној фасцикли, и истовремено довољно права за приступ локалним датотекама базе података и системским датотекама у C:\ProgramData\Firebird. Такође, добра идеја је да конфигуришете параметар RestrictAccess у firebird.conf.

На Linux-у

Пошто Firebird на Linux-у ради под налогом „firebird“, монтирајте мрежну дељену фасциклу са мапирањем на корисника „firebird“, тако да ће Firebird сервис моћи да приступи мрежној локацији на исти начин као локалном диску.

1.7. Једноставна резервна копија са удаљеног сервера на локалну машину

Могуће је направити резервну копију базе података са удаљеног сервера на локалну машину.

Пример команде испод покреће се на Windows рачунару, приступа бази података на Linux серверу (са IP адресом 192.168.0.108, али наравно може се користити и hostname сервера), а датотека резервне копије се чува у фасциклу C:\Data на Windows-у:

Code
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk

Време за резервну копију: 568 секунди

Ова команда ће обично бити много спорија од локалне резервне копије, јер gbak чита податке са удаљеног сервера и преноси записе кроз мрежу.

1.8. Бржа резервна копија са удаљеног сервера на локалну машину са Service Manager-ом

Команда испод је бржа од традиционалне резервне копије са удаљеног сервера на локалну машину, описане у #1.7

Code
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk

Користи Service Manager да обави резервну копију на удаљеном серверу, али се излаз шаље у stdout цев, а затим преусмерава у локалну датотеку.

Ова команда је обично 15%-20% бржа него у #1.7 (Једноставна резервна копија са удаљеног сервера на локалну машину), због следећег:

  1. обавља резервну копију кроз Service Manager на удаљеном серверу, тако да се све операције читања и компресије обављају на најбржи начин,
  2. кроз мрежу преноси само резултујућу датотеку резервне копије, чија је величина мања од података у бази података

Међутим, са овом командом није могуће омогућити verbose режим и сачувати детаљан излаз у датотеку дневника.

Време за резервну копију: 473 секунде

1.9. Резервна копија Firebird базе података на удаљеном серверу на исти удаљени сервер користећи Service Manager

Са Service Manager-ом, могуће је позвати gbak резервну копију базе података на удаљеном серверу и сачувати је такође на истом удаљеном серверу.

Code
gbak -b -se  192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk

Ова команда кроз Service Manager позива резервну копију на удаљеном серверу, са инструкцијом да се датотека резервне копије такође сачува на истом мрежном серверу.

Наравно, локација резервне копије треба да буде доступна Firebird сервису (на Linux-у ради као корисник „firebird“, на Windows-у као LocalSystem налог).

1.10. Резервна копија Firebird базе података 6x бржа са мулти-нитном резервном копијом у Firebird 5 (или HQbird 2.5/3.0/4.0/5.0)

Ако још увек нисте задовољни перформансама резервне копије Firebird gbak-а, размотрите миграцију на Firebird 5 (или користите enterprise Firebird дистрибуцију: HQbird за друге верзије).

Подржава мулти-нитну резервну копију, што омогућава до 6x брже операције резервне копије са gbak-ом.

Code
gbak -b -par 8  -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Као што видите, постоји нови параметар -par 8, који чини да gbak користи 8 нити за креирање резервне копије.

HQbird обавља задатке одржавања (sweep, резервна копија, враћање) много брже (резултати на слици испод су наравно са различите базе података):

2. Враћање са Gbak алатом

Имамо датотеку резервне копије backup1.fbk, креирану једном од команди изнад, и треба да је вратимо, на брз и ефикасан начин.

Претпоставимо да је датотека у C:\Data\backup1.fbk у случају Windows-а, или /db/backup1.fbk у случају Linux-а.

2.1. Најједноставнија команда за враћање

На Windows-у

Code
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

На Linux-у

Code
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey

Пре свега, имајте на уму да gbak -c не преписује датотеку базе података, и ако постоји датотека C:\data\new1.fdb или /db/new1.fdb, gbak ће вратити грешку да база података већ постоји.

Затим, ова команда заправо ради веома различито на 2.5/3.0+ и Windows/Linux.

На Linux-у, ова команда ће користити уграђени приступ креираној бази података (ако, наравно, нисте променили редослед Firebird провајдера у firebird.conf) и за 3.0 и за 2.5.

На Windows-у, на Firebird 3.0 са подразумеваним редоследом провајдера, биће уграђени приступ, на 2.5 - XNET.

Затим, ова команда креира датотеку са правима корисника који је покренуо gbak, што је посебно важно на Linux-у - ако покренете такав gbak под root-ом, власник датотеке базе података биће root, а Firebird процес, који ради под корисником „firebird“, неће моћи да приступи обновљеној датотеци.

Напомена за Linux кориснике

Многи људи, како би „поправили“ власништво, примењују дозволе за све да приступе обновљеној бази података, тј. нешто попут „chmod 777 database“, али то је веома несигурно, прави начин је да промените власника базе података на firebird, следећом командом

Code
chown firebird /db/new1.fdb

Уопштено, ова команда је довољно добра за једноставно обнављање непродукцијских база података (коришћених за тестирање или у развоју).

Време обнављања: 275 секунди

2.2. Обнављање са localhost везним стрингом

Најuniversalнија, али не и најбржа опција обнављања је следећа:

Windows

Code
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey

Нестандардни порт

Ако Firebird ради на нестандардном порту, на пример, 3051, може се навести у команди за обнављање:

Windows

Code
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey

Време обнављања: 1225 секунди

2.3. Обнављање са XNET-ом на Windows-у

Да бисте убрзали обнављање, на Windows-у можемо користити XNET (за Firebird 3.0 и новије):

Code
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey

На Firebird 2.5 на Windows-у, XNET приступ ће се користити са једноставном командном линијом (ако ради само једна Firebird инстанца):

Code
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

Време обнављања: 585 секунди

2.4. Брже обнављање са Service Manager-ом

А најбржи начин за обнављање је коришћење Service Manager-а

Windows

Code
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

Code
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey

Са прекидачем -se, позивамо Service Manager на localhost адреси и налажемо му да изврши код за обнављање унутар Firebird мотора.

Када обнављање обави Service Manager, креирана датотека базе података ће бити у власништву налога покренуте Firebird инстанце (процеса) - то је „firebird“ на Linux-у, и LocalSystem на Windows-у.

Време обнављања: 244 секунде

2.5. Непрепоручени прекидач

У неком тренутку могли бисте имати искушење да користите следећи прекидач:

Code
   -R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used)                               database from backup file (restore)
Code
како бисте присилили замену постојеће базе података новом.

По нашем искуству, овај прекидач значајно повећава шансе за случајно преписивање продукцијске базе података.

Снажно препоручујемо да сваки пут обнављате базу података са новим именом и преименујете је, као и да експлицитно обришете стару базу података.

Чак нећемо ни навести пример команде са овим прекидачем.

2.6. Обнављање базе података коришћењем алијаса

Могуће је обновити базу података коришћењем алијаса, декларисаног у databases.conf (или aliases.conf у Firebird 2.5)

На пример, имамо следећу декларацију

Code
restdb=c:\Data\newrest1.fdb  #Windows

restdb=/db/newrest1.fdb  #Linux

Дакле, можемо покренути следећу команду за обнављање резервне копије на путању коју специфицира алијас

Windows

Code
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey

Linux

Code
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey

2.7. Обнављање локалне резервне копије на удаљени сервер

Могуће је обновити локалну резервну копију на удаљени Firebird сервер.

У овом примеру, обнављамо резервну копију сачувану на Windows-у, на Linux сервер (његова IP адреса је 102.168.0.108):

Code
gbak  -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey

Време обнављања: 7009 секунди

Као што можете приметити, процес удаљеног обнављања ради веома споро, можемо ли га убрзати помоћу Service Manager-а?

2.8. Обнављање локалне резервне копије на удаљени сервер са Service Manager-ом

Да бисте обновили локалну резервну копију на удаљеном серверу са Service Manager-ом, неопходно је извести трик са stdin улазним током:

Code
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb <  C:\Data\backup1.fbk

Ова команда покреће обнављање на удаљеном серверу са стандардним улазом stdin као извором резервне копије - и прослеђује улаз користећи део команде < C:\Data\backup1.fbk.

Изгледа помало замршено? Али то је лак начин за 10x повећање gbak перформанси за обнављање на удаљени сервер!

Време обнављања: 450 секунди

2.9. Обнављање изузетно дугих таблица

Ако имате заиста велику базу података са укупним бројем редова већим од 2 милијарде, неопходно је навести прекидач -o[ne_at_a_time], да бисте обновили сваку таблицу у засебној трансакцији, како бисте избегли неки интерни прекорачење.

Code
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey

3. Подешавање и евидентирање процеса резервне копије и обнављања

3.1. Gbak са verbose излазом

По подразумеваним подешавањима, gbak је веома тих алат, не враћа ништа у случају успешног извршења. Да бисте га учинили verbose, можемо додати прекидач -v[erify]

Code
gbak -b -se localhost/3050:service_mgr -g mydb1  c:\Data\backup1.fbk -v -user SYSDBA -pass masterkey

Као резултат, биће више детаља. Мањи, али досадан проблем је што штампање излаза на конзолу може учинити verbose резервну копију значајно споријом од тихе варијанте, па је добра идеја сачувати евиденцију у датотеку са прекидачем - y logfile:

Code
gbak -b -se localhost/3050:service_mgr -g -v mydb1  c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt

Напомена: gbak неће преписивати постојећу датотеку евиденције! Ако већ имате C:\data\backuplog1.txt у овом примеру, резервна копија ће пријавити грешку (види #3 у Додатку А).

Напомена 2: постоји опција -verbint за контролу интервала извештавања о броју обрађених записа током резервне копије или обнављања.

3.2. Додавање статистике перформанси у verbose излаз

У gbak verbose излазу за резервну копију и за обнављање, можемо видети поруке попут ових:

Code
gbak:    writing data for table COUNTRY
gbak:16 records written

за сваку таблицу и друге објекте базе података.

Занимљиво је открити које таблице/објекти одузимају највише времена, зар не?

За ово је неопходно користити прекидач -st(atistics):

Code
 -ST(ATISTICS) TDRW    show statistics:
     T                 time from start
     D                 delta time
     R                 page reads
     W                 page writes
Code
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt

Када се примени, додаће у евиденцију следеће колоне:

Code
gbak: time   delta  reads  writes

тако да ћемо моћи да видимо време и IO потрошене на свакој линији.

3.3. Изузимање таблица из резервне копије и/или из обнављања

Ако мислите да неке таблице могу бити изузете из резервне копије (добар пример је веома дуга таблица евиденције), можете их навести у параметру SK[IP_DATA], са регуларним изразом као параметром.

У примеру испод, искључујемо податке из табела COUNTRY и JOB из резервне копије:

Code
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt

А, у примеру испод, искључујемо табелу CLIENT из рестаурације:

Code
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"

Имајте на уму да параметар за SKIP_DATA мора бити прослеђен као један параметар, па мора бити под наводницима!

На Линуксу, наводници треба да буду једноставни, на Виндоусу - двоструки.


Мере предострожности приликом искључивања табела из резервне копије и/или рестаурације

Снажно препоручујемо да проверите услов регуларног израза пре употребе, следећим упитом - он ће вратити листу табела које одговарају услову филтера (у упиту су наводници увек једноставни)

Code
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';

RDB$RELATION_NAME
===============================
COUNTRY
JOB

Имајте на уму да ће табеле из резервне копије или рестаурације бити искључене без обзира на постојећа ограничења (страни кључеви), па ако нисте пажљиво планирали такво искључивање, врло је лако добити грешку „Cannot commit foreign key index” током процеса рестаурације.

3.4. Преузимање лозинке за резервну копију или рестаурацију из датотеке

Ако нисте љубитељ идеје да изложите лозинку свима који виде ваше команде, допашће вам се следећи прекидач: -fetch passwordfile

Направимо датотеку са лозинком у C:\Data\passfile.txt и користимо је (овде користимо врло једноставну уграђену варијанту, наравно, прекидач ће радити и са Service Manager-ом):

Code
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt

Постоје 2 практичне предности:

  1. Ако чувамо лозинку у једној датотеци, можемо осигурати да ће све наше командне датотеке увек користити стварну лозинку.
  2. Не излажемо лозинку у свакој командној датотеци.

4. Једнокорачна резервна копија-рестаурација

Често је циљ резервне копије извршење тренутне рестаурације, како бисмо добили нову свежу базу података, на пример, да применимо нову величину странице за базу, или да мигрирамо постојећу базу са 2.5 на 3.0.

У овом случају, могуће је извршити резервну копију-рестаурацију једном командом, користећи стандардни улаз и излаз као изворе за одговарајуће команде, да бисте избегли креирање међуфајла резервне копије, смањили захтеве за слободни простор и убрзали процес.

Команда је следећа:

Code
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb

У суштини, овде радимо 2 команде, обједињене симболом |,

прва за резервну копију на stdout:

Code
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout

и друга, за рестаурацију са stdin-а

Code
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb

Ова команда је најбржи начин да се уради резервна копија-рестаурација на истој Firebird инстанци.

Имајте на уму: за конвертовање база података јеdnokoračnom резервном копијом-рестаурацијом са 2.5 на 3.0 потребно је користити 2 Firebird инстанце, погледајте детаље овде.

5. Резиме перформанси

Следећа слика садржи информације о брзини различитих команди резервне копије локалне резервне копије тест базе података:

Као што можете видети, најбржи начин за локалну резервну копију је коришћење Service Manager-а (прекидач -se[rvice]) и инхибиција сакупљања смећа (прекидач -ig).

За резервну копију са удаљеног сервера на локалну машину, Service Manager је такође најбоља опција:

Ситуација са перформансама рестаурације је слична: Service Manager је најбржи начин за рестаурацију.

Што се тиче прилично ретког случаја, када се рестаурација врши са локалне резервне копије на удаљени сервер, коришћење Service Manager-а са stdin триком је једина одржива опција:

Врло често постављано питање о VM и Firebird резервним копијама

Зашто бих требао да користим Firebird алате за резервну копију, када постоје популарни алати за резервну копију који обећавају да ће направити резервну копију свега?

Или, правим резервну копију комплетне слике виртуелне машине, зашто бих се бринуо о резервној копији Firebird базе података?

Одговор је овде.

Додатак А. Грешке током резервне копије/рестаурације

  1. Покушај покретања gbak-а без параметара, или са корисником који није власник базе података/није SYSDBA, довешће до следеће грешке:
Code
gbak: ERROR:Unable to perform operation.  You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
  1. Ако наведете погрешну лозинку, појавиће се следећа грешка:
Code
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
  1. Грешка се јавља када се постојећа датотека наведе као одредиште за вербозни дневник
Code
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt
gbak: ERROR:    Exiting before completion due to errors
gbak:Exiting before completion due to errors
  1. Грешка се јавља ако се постојећа база података наведе у gbak команди за рестаурацију као одредиште
Code
gbak: ERROR:database C:\data\new1.fdb already exists.  To replace it, use the -REP switch
gbak:Exiting before completion due to errors
  1. Грешка се јавља када gbak покуша да запише резервну копију на локацију где нема довољно права за писање.
Code
gbak: ERROR:cannot open file  /db/test1.fbk
gbak:Exiting before completion due to errors
  1. Када gbak покуша да приступи датотеци без дозволе за то - на пример, датотека има другог власника од корисника „firebird” на Линуксу
Code
gbak: ERROR:no permission for read-write access to database /db/test1.fdb
gbak: ERROR:    IProvider::attachDatabase failed when loading mapping cache
gbak:Exiting before completion due to errors
  1. Покушај коришћења вербозног излаза
Code
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout  >
 c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode
gbak: ERROR:    Exiting before completion due to errors
gbak:Exiting before completion due to errors
  1. Покушај резервне копије са Service Manager-ом на удаљеном серверу са омогућеним вербозним режимом и чувањем у датотеку дневника.
Code
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt  -user SYSDBA -pass masterkey /db/test1.f
db stdout  > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet
gbak:Exiting before completion due to errors
  1. Грешка у јеdnokoračnoj резервној копији-рестаурацији када резервна копија не успе из неког разлога:
Code
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
  1. Ако покушавате да проследите не-резервну копију gbak-у
Code
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
  1. Резервна копија оштећене датотеке базе података са погрешном страницом пријавиће следећу грешку (број и датотека базе ће се, наравно, разликовати)
Code
gbak: ERROR:database file appears corrupt (E:\DATABASE1.FDB)
gbak: ERROR:    wrong page type
gbak: ERROR:    page 9294588 is of wrong type (expected 8, found 0)
gbak: ERROR:gds_$get_segment failed
gbak:Exiting before completion due to errors
gbak: ERROR:Unexpected I/O error while reading from backup file

gbak:Exiting before completion due to errors

Code

## Контакти

Слободно нас контактирајте ако имате питања, или пријавите било какве грешке или грешке у куцању: [email protected]