Firebird Documentation IndexFirebirds nbackup-tool → Backups maken en terugzetten
Firebird Home Firebird Home Terug: Functies en parametersFirebird Documentation IndexOmhoog: Firebirds nbackup-toolVolgende: Vergrendelen en ontgrendelen

Backups maken en terugzetten

Volledige backups
Aanvullende backups
Databases op kale apparaten backuppen
Databasetriggers onderdrukken (Firebird 2.1+)
Rechtstreekse I/O (Firebird 2.1.4+)
Informatieve opties (Firebird 2.5+)
Backups op verre machines (Firebird 2.5+)
Toepassing in de praktijk
Verder lezen?

Vooraf: nbackup.exe bevindt zich in de bin-subdirectory van je Firebird-map. Typische locaties zijn bijvoorbeeld C:\Program Files\Firebird\Firebird_2_0\bin (Windows) of /opt/firebird/bin (Linux). Net als de meeste meegeleverde tools heeft nbackup geen grafische interface; je start het vanaf de opdrachtregel of roept het aan vanuit een batchbestand of programma.

Waarschuwing

Bij zware belasting kunnen nbackup 2.0.3 en lager soms problemen veroorzaken die leiden tot vastlopers of zelfs beschadigde databases. Hoewel deze problemen niet vaak voorkomen, zijn ze toch ernstig genoeg om upgraden naar Firebird 2.0.4 of hoger te rechtvaardigen als je nbackup met een gerust hart wilt gebruiken. Bij grote databases op Posix-systemen kan ook het al dan niet toepassen van rechtstreekse invoer/uitvoer een rol spelen. Zie hiervoor de paragraaf Rechtstreekse I/O.

Volledige backups

Een volledige backup maken

Om een volledige backup te maken luidt de opdracht:

nbackup [-U <gebr> -P <wachtw>] -B 0 <database> [<backupbestand>]

Voorbeeld:

C:\Data> nbackup -B 0 inventaris.fdb inventaris_1-mrt-2006.nbk

Opmerkingen:

  • De parameter -B staat voor backup (goh!). Het backupniveau 0 betekent dat er een volledige backup wordt gemaakt. Backupniveaus hoger dan 0 worden gebruikt voor aanvullende backups; deze worden verderop besproken.

  • In plaats van een databasebestandsnaam mag ook een alias worden opgegeven.

  • In plaats van een backupbestandsnaam mag ook stdout worden opgegeven. De backup wordt dan naar de standaarduitvoer gestuurd en kan vandaar worden doorgeleid naar bijvoorbeeld een bandarchief of een compressieprogramma.

  • De parameters -U (user) en -P (password) kunnen worden weggelaten als aan minstens één van de volgende voorwaarden is voldaan:

    • De omgevingsvariabelen ISC_USER en ISC_PASSWORD zijn ingesteld, ofwel op SYSDBA, ofwel op de eigenaar van de database.

    • Je bent als root ingelogd op een Posixsysteem. Dit maakt je automatisch SYSDBA.

    • Onder Windows: trusted authentication (vertrouwde inlog) is aangezet in firebird.conf, en het Windows-account waaronder je bent aangemeld is eigenaar van de database. Dit is mogelijk vanaf Firebird 2.1.

    • Onder Windows: je bent lid van de Administrators-groep èn trusted authentication staat aan in firebird.conf. In Firebird 2.1 heb je dan automatisch SYSDBA-rechten. Vanaf Firebird 2.5 geldt als aanvullende eis dat AUTO ADMIN MAPPING aangezet moet zijn in de database.

    Voor de overzichtelijkheid laten we de parameters -U en -P in de voorbeelden telkens weg.

  • Met ingang van Firebird 2.5 kan in plaats van -P <wachtwoord> ook -FE <bestandsnaam> worden opgegeven. In dat geval wordt het wachtwoord uit het opgegeven bestand gelezen. Voordeel is dat het wachtwoord zo beter afgeschermd kan worden; het komt niet op de opdrachtregel terecht of in een script/batchbestand waar mogelijk allerlei mensen bij kunnen. (-FE staat voor fetch, haal op.)

  • In Firebird 2.1 en hoger kan met de parameter -T worden voorkomen dat databasetriggers worden afgevuurd bij het maken van de backup. Voor meer info zie Databasetriggers onderdrukken.

  • Met ingang van Firebird 2.1.4 kan de gebruiker zelf bepalen of nbackup rechtstreekse I/O toepast bij het maken van de backup. Dit gebeurt met de opties -D on en -D off. Meer details en achtergronden in de paragraaf Rechtstreekse I/O, elders in deze handleiding.

  • De verschillende parameters (-B, -U enz.) mogen in elke gewenste volgorde voorkomen. Wel moet elke parameter direct worden gevolgd door zijn eigen bijbehorende argument(en). Voor -B zijn dat er drie: niveaugetal, database en backupbestand — in die volgorde!

  • Als de -B-parameter als laatste komt, mag de naam van het backupbestand worden weggelaten. nbackup stelt dan zelf een naam samen, gebaseerd op de naam van de database, het backupniveau, de datum en de tijd. Dit kan overigens tot een botsing leiden (en tot een mislukte backup) als twee backupopdrachten van hetzelfde niveau in dezelfde minuut worden gegeven.

Waarschuwing

Gebruik nbackup niet voor databases die uit meerdere bestanden bestaan. Dit kan leiden tot corruptie en gegevensverlies, ondanks het feit dat nbackup niet zal protesteren tegen een dergelijke opdracht.

Iets over de werking

NB: Wat onder dit kopje volgt is géén noodzakelijke kennis voor het gebruik van nbackup. Het geeft alleen een globaal (en onvolledig) beeld van wat er onder de motorkap gebeurt tijdens de uitvoering van nbackup -B:

  1. Om te beginnen wordt het databasebestand vergrendeld door het wijzigen van een interne toestandsvlag. Vanaf dit moment worden alle wijzigingen in de database weggeschreven naar een tijdelijk bestand — het verschilbestand oftewel deltabestand.

  2. Daarna wordt de feitelijke backup gemaakt. Dit is geen rechttoe-rechtane bestandskopie; terugzetten moet dus ook weer met nbackup gebeuren.

  3. Nadat de backup gemaakt is, wordt de inhoud van het deltabestand geïntegreerd met het hoofdbestand. Vervolgens wordt het hoofdbestand ontgrendeld (vlag gaat weer op “normaal”) en de delta verwijderd.

De functionaliteit van de stappen 1 en 3 wordt verzorgd door twee nieuwe SQL-opdrachten: ALTER DATABASE BEGIN BACKUP en ALTER DATABASE END BACKUP. In tegenstelling tot hetgeen de namen suggereren, zorgen deze opdrachten niet voor het maken van de backup zelf; ze scheppen alleen de noodzakelijke voorwaarden waaronder het hoofdbestand veilig kan worden gebackupt. En voor alle duidelijkheid: je hoeft deze SQL-opdrachten niet zelf te geven; nbackup zorgt hiervoor, op de juiste momenten.

Een volledige backup terugzetten

Een volledige backup wordt als volgt teruggezet:

nbackup -R <database> [<backupbestand>]

Voorbeeld:

C:\Data> nbackup -R inventaris.fdb inventaris_1-mrt-2006.nbk

Opmerkingen:

  • Bij het terugzetten wordt geen niveau aangegeven.

  • Bij het terugzetten moet de parameter -R (restore) de laatste zijn; dit om redenen die later duidelijk zullen worden.

  • In plaats van een databasebestandsnaam mag ook een alias worden opgegeven.

  • Als de opgegeven database al bestaat, mislukt het terugzetten en krijg je een foutmelding.

  • Ook bij het terugzetten mag de naam van het backupbestand worden weggelaten. Nbackup vraagt je dan om de naam alsnog op te geven. (Let op: In Firebird 2.0 is deze interactieve terugzetvoorziening defect; je krijgt dan een foutmelding en het terugzetten mislukt. Hersteld in 2.0.1.)

  • Het terugzetten werkt puur op bestandsniveau en kan dus ook worden uitgevoerd zonder dat er een Firebirdserver draait. Eventuele met -U en -P meegegeven inloggegevens worden genegeerd. Ook als de -FE-optie is gegeven, wordt het uit het bestand gelezen wachtwoord niet gebruikt. Het wordt echter in eerste instantie wel ingelezen; treedt daarbij een probleem op, dan mislukt het terugzetten.

Aanvullende backups

Waarschuwing

De aanvullende-backupsvoorziening was compleet defect in Firebird 2.1, en weer hersteld in 2.1.1.

Aanvullende backups maken

Om een aanvullende backup te maken geven we een niveau hoger dan 0 aan. Een aanvullende backup van niveau N bevat telkens de wijzigingen in de database sinds de meest recente backup van niveau N-1.

Voorbeelden:

Een dag na het maken van de volledige backup (met niveau 0) maak je er een met niveau 1:

C:\Data> nbackup -B 1 inventaris.fdb inventaris_2-mrt-2006.nbk

Deze backup bevat dus alleen de wijzigingen van de laatste dag.

Weer een dag later maak je er nog eentje van niveau 1:

C:\Data> nbackup -B 1 inventaris.fdb inventaris_3-mrt-2006.nbk

Deze backup bevat de wijzigingen van de laatste twee dagen, sinds de volledige backup, dus niet alleen die sinds de vorige niveau-1-backup.

Een paar uur later maken we een backup van niveau 2:

C:\Data> nbackup -B 2 inventaris.fdb inventaris_3-mrt-2006_2.nbk

Deze jongste backup bevat alleen de wijzigingen sinds de meest recente niveau-1-backup, dus die van de laatste paar uren.

Opmerking

Alle opmerkingen die gemaakt zijn bij het maken van volledige backups, gelden ook voor aanvullende backups.

Waarschuwing

Nogmaals: gebruik nbackup niet voor databases die uit meerdere bestanden bestaan.

Aanvullende backups terugzetten

Bij het terugzetten van aanvullende backups moet de hele reeks backupbestanden worden gespecificeerd vanaf niveau 0 tot en met het gewenste niveau. De database wordt daarbij altijd vanaf de grond opnieuw opgebouwd, in stappen (dit stapsgewijs aanvullen tot een volledig herstelde database verklaart de Engelse term incremental backup).

De formele syntaxis luidt:

nbackup -R <database> [<backup0> [<backup1> [...] ] ]

Het terugzetten van de niveau-2-backup uit het voorgaande voorbeeld gaat dus als volgt:

C:\Data> nbackup -R inventaris.fdb inventaris_1-mrt-2006.nbk
           inventaris_3-mrt-2006.nbk inventaris_3-mrt-2006_2.nbk

Uiteraard is de regel hier alleen gesplitst voor de overzichtelijkheid — in de praktijk typ je alles achter elkaar en drukt dan pas op Enter.

Opmerkingen (in aanvulling op de opmerkingen bij het terugzetten van een volledige backup):

  • Omdat bij de -R-optie niet van tevoren bekend is hoeveel bestandsnamen er zullen volgen (bij terugzetten geven we immers geen niveaugetal op), gaat nbackup ervan uit dat alle argumenten na de -R namen van backupbestanden zijn. Het is hierom dat er na de lijst met bestandsnamen geen andere parameter meer mag volgen.

  • Er is geen formele limiet aan het aantal backupniveaus, maar verder gaan dan niveau 3 of 4 zal in de praktijk zelden nut hebben.

Niet-passende schakels

Wat gebeurt er als je per ongeluk een bestand weglaat, of een reeks bestanden opgeeft die niet allemaal bij elkaar passen? Je zou je voor kunnen stellen dat je in het bovenstaande voorbeeld bij vergissing inventaris_2-mrt-2006.nbk opgeeft in plaats van inventaris_3-mrt-2006.nbk. Beide zijn backupbestanden van niveau 1; in beide gevallen krijgen we dus een keurige niveaureeks 0, 1, 2. Maar het niveau-2-bestand is aanvullend ten opzichte van de niveau-1-backup van 3 maart, niet t.o.v. die van 2 maart.

Gelukkig kan een dergelijke vergissing nooit tot een foutief teruggezette database leiden. Elk backupbestand bevat namelijk een unieke ID. Voorts is in elke backup van niveau 1 of hoger de ID opgeslagen van de backup waarop hij gebaseerd is. Bij het terugzetten controleert nbackup deze gegevens; als er ergens in de keten iets niet klopt, wordt de operatie geannuleerd en krijg je een foutmelding.

Databases op kale apparaten backuppen

Een Firebird-database hoeft geen bestand te zijn, maar kan zich ook op een zogeheten kaal apparaat, bijvoorbeeld een schijfpartitie zonder bestandssysteem, bevinden. De vraag waar de delta dan geplaatst moet worden, is bij het ontwikkelen van nbackup in eerste instantie over het hoofd gezien. Op Posix-systemen kon het zo gebeuren dat als de database zich op /dev/hdb5 bevond, een deltabestand /dev/hdb5.delta werd aangemaakt. Dat is onwenselijk gezien aard en doel van de /dev-map en de meestal geringe beschikbare ruimte.

Vanaf Firebird 2.1 weigert nbackup dan ook te werken met databases op kale apparaten als niet expliciet een locatie voor het deltabestand is ingesteld. Hoe dit moet, wordt besproken in Het deltabestand instellen, verderop in deze handleiding.

Databasetriggers onderdrukken (Firebird 2.1+)

Sinds versie 2.1 ondersteunt Firebird het gebruik van databasetriggers. Deze kunnen o.a. worden afgevuurd bij het maken en verbreken van een verbinding. Rond het uitvoeren van een backup maakt nbackup via de server verbinding met de database (in sommige versies zelfs meermalen). Om nu te voorkomen dat hierbij onbedoeld databasetriggers afgevuurd worden, kan de optie -T worden meegegeven. NB: de overeenkomstige optie in gbak en isql heet -nodbtriggers (we zijn dol op variatie, hier bij Firebird).

Rechtstreekse I/O (Firebird 2.1.4+)

Oorspronkelijk gebruikte nbackup bij het maken van de backup onder Windows NT (en afgeleiden zoals 2000, 2003 enz.) rechtstreekse invoer/uitvoer, en in alle andere gevallen niet. Omdat dit op sommige Linuxsystemen voor problemen zorgde, werd in Firebird 2.0.6 en 2.1.3 ook onder Linux voor rechtstreekse I/O gekozen. Maar dit leidde weer tot problemen op andere Linuxsystemen. Daarom is in 2.1.4 en 2.5 het standaardgedrag weer zoals voorheen, en is een parameter -D toegevoegd waarmee de gebruiker zelf de rechtstreekse I/O aan of uit kan zetten. Het gebruik is als volgt:

nbackup -B 0 glazen.fdb glazen.nbk -D on    -- rechtstreekse I/O aan
nbackup -B 0 bekers.fdb bekers.nbk -D off   -- rechtstreekse I/O uit

De argumenten ON en OFF zijn niet hoofdlettergevoelig, evenmin als de parameterletters zelf.

Rechtstreekse I/O wordt alléén toegepast bij het maken van een backup, niet bij het terugzetten. Onder Windows wordt hiertoe FILE_FLAG_NO_BUFFERING aangezet. Op andere systemen worden O_DIRECT en POSIX_FADV_NOREUSE gebruikt. Deze laatste twee vlaggen zijn soms niet beschikbaar; in zo'n geval worden ze (of wordt er één) stilzwijgend weggelaten. Ook als de gebruiker expliciet -D on heeft meegegeven, leidt dit niet tot een waarschuwing of foutmelding.

Informatieve opties (Firebird 2.5+)

Behalve de al genoemde parameters -FE en -D zijn in Firebird 2.5 ook nog de volgende twee toegevoegd:

-Z

Toont éénregelige versie-informatie. Deze optie kan los worden gebruikt, maar ook in combinatie met andere parameters zoals -B, -R, -L enz.

-?

Geeft een beknopt overzicht van het gebruik van nbackup en de diverse parameters. NB: als deze optie aanwezig is, worden alle andere parameters genegeerd!

Backups op verre machines (Firebird 2.5+)

Nbackup zelf werkt alleen op lokale databases. Maar vanaf Firebird 2.5 kunnen via de Service Manager ook op verre machines backups en restores van het nbackup-type worden uitgevoerd. Hiervoor gebruik je op de lokale machine het programma fbsvcmgr.exe, dat in dezelfde map staat als nbackup.exe en de overige Firebird-hulpprogramma's. Als eerste argument geef je “hostnaam:service_mgr” op, waarbij je hostnaam natuurlijk vervangt door de naam van de verre server. Overige parameters zijn:

-user gebrnaam
-password wachtwoord
-action_nbak
-action_nrest
-nbk_level n
-dbname database
-nbk_file bestnaam
-nbk_no_triggers
-nbk_direct on|off

Het maken van een volledige backup op de verre machine frodo gaat dan bijvoorbeeld zo:

fbsvcmgr frodo:service_mgr -user sysdba -password masterke
  -action_nbak -nbk_level 0
  -dbname C:\databases\landen.fdb -nbk_file C:\databases\landen.nbk

En van een latere aanvullende backup:

fbsvcmgr frodo:service_mgr -user sysdba -password masterke
  -action_nbak -nbk_level 1
  -dbname C:\databases\landen.fdb -nbk_file C:\databases\landen_1.nbk

Terugzetten van de hele zwikzwak gaat als volgt:

fbsvcmgr frodo:service_mgr -user sysdba -password masterke
  -action_nrest -dbname C:\databases\landen_hersteld.fdb
  -nbk_file C:\databases\landen.nbk -nbk_file C:\databases\landen_1.nbk

Let op: in werkelijkheid moet elk van de bovenstaande opdrachten als één zin worden getypt, zonder regeleinden. Verder mogen de streepjes voor de parameternamen worden weggelaten, maar juist bij dit soort lange opdrachten is het meestal prettiger om ze wel te gebruiken: je ziet dan duidelijk de afzonderlijke parameters (de argumenten krijgen geen streepje).

Opmerkingen:

  • De Services Manager verlangt altijd authenticatie, hetzij automatisch (root onder Posix, “trusted” onder Windows), hetzij expliciet via de parameters -user en -password. De omgevingsvariabelen ISC_USER en ISC_PASSWORD worden echter niet ingelezen. AUTO ADMIN MAPPING in de database heeft geen effect als je vanaf een andere machine verbinding maakt (maar misschien is dit afhankelijk van de configuratie van het netwerk).

    NB: Bij Windows trusted krijgt de Services Manager op de verre machine de gebruikersnaam doorgegeven van de aanroeper op de lokale machine. Is de eigenaar van de database een Windows-account (bijv. FRODO\PAUL) i.p.v. een Firebirdaccount, en komt de Windows-accountnaam van de aanroeper op de lokale machine overeen met het eigenaar-account op de verre machine, dan wordt de aanroeper als eigenaar erkend en kan de backup gemaakt worden. Dit kan een veiligheidsrisico opleveren, want ook binnen een lokaal netwerk hoeft gebruiker PAUL op de ene machine niet dezelfde persoon te zijn als PAUL op de andere.

  • Ook bij terugzetten (-action_nrest) is authenticatie vereist, maar de inloggegevens worden dan verder niet gebruikt. De gebruiker hoeft dus geen eigenaar, SYSDBA of superuser te zijn. In geval van Windows trusted authentication hoeft de gebruiker op de verre machine (waar de database zich bevindt) zelfs helemaal niet te bestaan.

    Deze zwakke authenticatie levert ook weer een potentieel veiligheidsrisico op. Stel dat er van een gevoelige database nbackups worden gemaakt, en dat deze op bestandsniveau goed worden beveiligd. Een willekeurige gebruiker kan dan niet met nbackup de database herstellen, want nbackup draait in de procesruimte van de gebruiker. Maar diezelfde gebruiker kan – als hij locatie en bestandsnaam weet, of deze op grond van analogie kan raden – wellicht met fbsvcmgr de database naar een publieke map terugzetten en hem aldus te pakken krijgen. Immers, fbsvcmgr roept de Firebirdserver aan en die heeft mogelijk wèl bestandstoegang tot de backup. Natuurlijk zijn hier oplossingen voor te bedenken, maar het is wel zaak om je van dit risico bewust te zijn.

  • De Services Manager kan ook lokaal worden gebruikt; het eerste argument wordt dan service_mgr, zonder hostnaam. Bij lokaal gebruik heeft AUTO ADMIN MAPPING wel het normale effect; dit geldt ook als je bijvoorbeeld localhost: of de naam van de lokale machine voorvoegt. Lokaal gebruik van de Services Manager kan van nut zijn als je zelf geen bestandstoegang hebt tot database en/of backup, en het Firebirdproces wel. Heb je wel voldoende bestandsrechten, dan kun je beter nbackup zelf gebruiken, met zijn veel kortere opdrachtregels.

  • Gebruik van -nbk_no_triggers of -nbk_direct bij -action_nrest leidt tot een foutmelding. Nbackup zelf is hier soepeler in: die negeert de parameters -T en -D gewoon als je ze gebruikt waar ze niet van toepassing zijn.

  • In plaats van een databasenaam mag ook een alias worden gebruikt.

Toepassing in de praktijk

Een backupschema met gebruik van nbackup zou er als volgt uit kunnen zien:

  • Elke maand een volledige backup (niveau 0);

  • Elke week een niveau 1;

  • Dagelijks een niveau 2;

  • Elk uur een niveau 3.

Zolang alle backups bewaard worden, kun je met dit schema de database herstellen tot de toestand van elk gewenst uur in het verleden. Hierbij worden voor elke herstelactie maximaal vier backupbestanden gebruikt. Natuurlijk regel je e.e.a. zo dat de grotere, tijdrovende backups op rustige uren gepland worden. In dit geval zouden de backups van de niveaus 0 en 1 in de weekeinden gemaakt kunnen worden, en die van niveau 2 's nachts.

Wil je niet alles voor de eeuwigheid bewaren, dan kun je er een wisschema aan koppelen:

  • Niveau-3-backups worden gewist als ze ouder zijn dan acht dagen;

  • Backups van niveau 2 na een maand;

  • Niveau 1 na zes maanden;

  • Niveau 0 na twee jaar, behalve bijvoorbeeld de eerste van elk jaar.

Dit is uiteraard maar een voorbeeld. Wat in een bepaald geval nuttig is, hangt af van de toepassing, de databasegrootte, de activiteit, enzovoort.

Verder lezen?

Je weet nu alles wat nodig is om met nbackup volledige en/of aanvullende backups te maken en terug te zetten. Je hoeft alleen verder te lezen als je backuptools naar keuze wilt gebruiken voor je Firebird-databases (zie Vergrendelen en ontgrendelen), of als je de standaardnaam of -locatie van het deltabestand wilt aanpassen (zie Het deltabestand instellen).

Heb je daar allemaal geen behoefte aan, dan wensen we je veel succes toe bij het werken met nbackup!

Terug: Functies en parametersFirebird Documentation IndexOmhoog: Firebirds nbackup-toolVolgende: Vergrendelen en ontgrendelen
Firebird Documentation IndexFirebirds nbackup-tool → Backups maken en terugzetten