Firebird-docset → Firebird-databasedocs → Firebirds nbackup-tool → Vergrendelen en ontgrendelen |
Wil je liever met je eigen backupgereedschap een veiligheidskopie maken, of gewoon een bestandskopie maken, dan komt modus 2, de ver/ontgrendeltaak, in beeld. “Vergrendelen” houdt hier in dat het hoofdbestand van de database tijdelijk wordt bevroren, niet dat er geen wijzigingen in de database mogen plaatsvinden. Net als bij modus 1 worden wijzigingen naar een tijdelijk bestand geschreven en na ontgrendelen alsnog opgenomen in het hoofdbestand.
Ter herinnering: 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). Er is geen grafische interface; je start het vanaf de opdrachtregel (of vanuit een batchbestand of programma).
Een typische sessie waarbij je zelf de backup maakt, verloopt als volgt.
Vergrendel de database met de optie -L (lock):
nbackup [-U <gebruiker> -P <wachtwoord>] -L <database>
Kopieer/backup/zip het databasebestand nu naar hartelust met gereedschap van je eigen keuze. Een simpele bestandskopie is ook mogelijk.
Ontgrendel de database met -N (uNlock):
nbackup [-U <gebruiker> -P <wachtwoord>] -N <database>
Door de laatste opdracht worden ook eventuele wijzigingen – die naar een tijdelijk bestand zijn weggeschreven – weer in het hoofdbestand verwerkt.
De gemaakte backup/kopie bevat de gegevens zoals die op het moment van vergrendelen in de database aanwezig waren, ongeacht hoe lang de vergrendeling heeft geduurd en ongeacht hoelang je hebt gewacht met het maken van de feitelijke backup.
Ook voor de ver- en ontgrendelfuncties van nbackup geldt dat ze niet gebruikt moeten worden op databases die uit meerdere bestanden bestaan. Zolang er op dit punt niets veranderd is, moet nbackup op geen enkele wijze op dit soort databases worden losgelaten!
Een kopie van een vergrendelde database is natuurlijk zelf ook een vergrendelde database, en daarom niet meteen klaar voor normaal gebruik. Mocht je oorspronkelijke database verloren gaan of beschadigd raken, en de zelfgemaakte kopie moet worden teruggezet (of mocht je de kopie op een andere computer willen installeren), ga dan als volgt te werk:
Kopieer/herstel/ontzip zelf de databasebackup met het daarvoor benodigde gereedschap.
Ontgrendel vervolgens de teruggezette database niet met de -N-optie, maar met -F (fixup):
nbackup -F <database>
Waarom zijn er twee ontgrendelopties, -N en -F?
-N zorgt er eerst voor dat eventuele wijzigingen, gemaakt sinds het vergrendelen door -L, worden verwerkt in het hoofdbestand van de database. Vervolgens wordt de database weer volledig vrijgegeven voor lezen en schrijven, en het tijdelijke bestand wordt gewist.
-F zet alleen maar de statusvlag van de zelf teruggezette database weer op “normaal”.
Je gebruikt dus:
-N na het zelf maken van een kopie/backup (om de eerder gegeven -L weer ongedaan te maken);
-F na het zelf terugzetten van een dergelijke backup.
Het is een beetje ongelukkig dat de laatste optie -F (van Fixup) is genoemd. Er wordt immers niets gerepareerd; de database wordt alleen ontgrendeld. De optie -N (uNlock, ontgrendel) daarentegen voert niet alleen een ontgrendeling uit, maar maakt ook de database weer in orde (fikst de database) door de tussentijdse mutaties te integreren. Maar hier zullen we mee moeten leven.
NB: Deze paragraaf bevat geen noodzakelijke kennis, maar biedt wat extra informatie die je inzicht in de verschillende schakelopties kan verdiepen.
nbackup -L doet het volgende:
Verbinden met de database;
Transactie starten;
ALTER DATABASE BEGIN BACKUP aanroepen (de werking hiervan is besproken in de extra informatie bij nbackup -B);
Transactie bekrachtigen met COMMIT;
Verbinding met database verbreken.
nbackup -N doorloopt dezelfde stappen, maar uiteraard met “...END BACKUP” in stap 3.
nbackup -F werkt als volgt:
Het teruggezette databasebestand wordt geopend;
In het bestand wordt de toestandsvlag gewijzigd van vergrendeld (nbak_state_stalled) naar normaal (nbak_state_normal);
Het bestand wordt weer gesloten.
nbackup -F werkt puur op bestandsniveau en kan dus zelfs worden uitgevoerd zonder dat er een Firebirdserver draait. Eventuele bij de aanroep meegegeven -U- of -P-parameters worden dan ook compleet genegeerd.
Firebird-docset → Firebird-databasedocs → Firebirds nbackup-tool → Vergrendelen en ontgrendelen |