Firebird Documentation Index → 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 roept het aan 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.
Opmerkingen:
In plaats van een databasebestandsnaam mag ook een alias worden opgegeven.
De parameters -U
en -P
kunnen worden
weggelaten als ISC_USER
en ISC_PASSWORD
zijn ingesteld, als
je root bent op een Posixsysteem, of als “trusted authentication” onder
Windows dit mogelijk maakt. Zie voor een uitgebreidere beschrijving de opmerkingen onder Een volledige
backup maken.
Met ingang van Firebird 2.5 kan in plaats van -P
<wachtwoord>
ook -FE
<bestandsnaam>
worden opgegeven.
Zowel -L
als -N
maken verbinding met
de database, dus in Firebird 2.1 en hoger kan het verstandig zijn om de optie
-T
toe te voegen (zie Databasetriggers
onderdrukken).
Bij het vergrendelen van een database op een kaal apparaat kan de
-S
-optie van groot nut zijn; zie Databases op kale apparaten
vergrendelen.
Eventueel kun je -Z
toevoegen om éénregelige
versie-informatie te laten tonen.
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>
Ook hier weer kun je eventueel een alias gebruiken in plaats van een bestandsnaam,
en kan -Z
toegevoegd worden voor versie-info. Andere opties hebben
geen zin.
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. Overigens: je zou
-F
op kunnen vatten als Flag-only (alleen
vlag).
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 ook worden
uitgevoerd zonder dat er een Firebirdserver draait. Eventuele via -U
,
-P
en/of -FE
aangeleverde inloggegevens worden
dan ook genegeerd, net als bij nbackup -R
.
Zoals al besproken in Databases op kale apparaten backuppen kunnen er problemen ontstaan als een deltabestand moet worden gemaakt voor een database op een kaal apparaat. Ook bij het vergrendelen geldt daarom vanaf Firebird 2.1 dat nbackup weigert te werken met databases op kale apparaten, tenzij vooraf een expliciete locatie voor het deltabestand is ingesteld. Zie hiervoor Het deltabestand instellen, even verderop.
Bij het vergrendelen en zelf kopiëren van een kaal apparaat doet zich ook nog het
volgende probleem voor: je weet niet hoe groot de database is! Misschien is het kale apparaat
10 GB, maar neemt de database daarop nog maar 200 MB in. Om te voorkomen dat je voor de
zekerheid het hele apparaat zou moeten kopiëren, met alle tijd- en ruimteverspilling van dien,
is in Firebird 2.1 een nieuwe schakeloptie toegevoegd: -S
. Deze optie
is alleen geldig in combinatie met -L
en zorgt ervoor dat nbackup na
het vergrendelen de omvang van de database naar de standaarduitvoer schrijft. De omvang wordt
opgegeven in databasepagina's en moet dus met de paginagrootte van de database worden
vermenigvuldigd om de te kopiëren hoeveelheid bytes te verkrijgen. Bij gebruik van het
kopieerprogramma dd
kun je ook als (i)bs
de
paginagrootte opgeven en als count
de uitvoer van
nbackup
-L
-S
.
Firebird Documentation Index → Firebirds nbackup-tool → Vergrendelen en ontgrendelen |