Firebird-docset → Firebird-databasedocs → Firebirds nbackup-tool → Backups maken en terugzetten |
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 vanuit een batchbestand of programma).
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
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 je als superuser (root, Administrator...) bent ingelogd, of
als de omgevingsvariabelen ISC_USER en ISC_PASSWORD zijn ingesteld.
Voor de overzichtelijkheid laten we deze twee parameters in de voorbeelden telkens weg.
De verschillende parameters (-B, -U en -P) 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.
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.
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:
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.
Daarna wordt de feitelijke backup gemaakt. Dit is geen rechttoe-rechtane bestandskopie; terugzetten moet dus ook weer met nbackup gebeuren.
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 wordt als volgt teruggezet:
nbackup [-U <gebr> -P <wachtw>] -R <database> [<backupbestand>]
Voorbeeld:
C:\Data> nbackup -R inventaris.fdb inventaris_1-mrt-2006.nbk
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.
Als de opgegeven database al bestaat en er is niemand mee verbonden, dan zal zij zonder enige waarschuwing worden overschreven! Zijn er wel gebruikers verbonden, dan 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. Deze voorziening is momenteel echter defect (in elk geval onder Windows). Als je de backupbestandsnaam op deze manier doorgeeft, krijg je een foutmelding en mislukt het terugzetten.
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.
Alle opmerkingen die gemaakt zijn bij het maken van volledige backups, gelden ook voor aanvullende backups.
Nogmaals: gebruik nbackup niet voor databases die uit meerdere bestanden bestaan.
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 [-U <gebruiker> -P <wachtwoord>] -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 (-U of -P) 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.
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.
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.
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!
Firebird-docset → Firebird-databasedocs → Firebirds nbackup-tool → Backups maken en terugzetten |