Firebird Documentation IndexFirebirds nbackup-tool → Vergrendelen en ontgrendelen
Firebird Home Firebird Home Terug: Backups maken en terugzettenFirebird Documentation IndexOmhoog: Firebirds nbackup-toolVolgende: Het deltabestand instellen

Vergrendelen en ontgrendelen

Database vergrendelen en zelf backuppen
Terugzetten van een na “nbackup -L” gemaakte backup
Onder de motorkap
Databases op kale apparaten vergrendelen

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.

Database vergrendelen en zelf backuppen

Een typische sessie waarbij je zelf de backup maakt, verloopt als volgt.

  1. Vergrendel de database met de optie -L (lock):

    nbackup [-U <gebruiker> -P <wachtwoord>] -L <database>
  2. Kopieer/backup/zip het databasebestand nu naar hartelust met gereedschap van je eigen keuze. Een simpele bestandskopie is ook mogelijk.

  3. 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.

Waarschuwing

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!

Terugzetten van een na “nbackup -L” gemaakte backup

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:

  1. Kopieer/herstel/ontzip zelf de databasebackup met het daarvoor benodigde gereedschap.

  2. 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.

Opmerking

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).

Onder de motorkap

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:

  1. Verbinden met de database;

  2. Transactie starten;

  3. ALTER DATABASE BEGIN BACKUP aanroepen (de werking hiervan is besproken in de extra informatie bij nbackup -B);

  4. Transactie bekrachtigen met COMMIT;

  5. Verbinding met database verbreken.

nbackup -N doorloopt dezelfde stappen, maar uiteraard met “...END BACKUP” in stap 3.

nbackup -F werkt als volgt:

  1. Het teruggezette databasebestand wordt geopend;

  2. In het bestand wordt de toestandsvlag gewijzigd van vergrendeld (nbak_state_stalled) naar normaal (nbak_state_normal);

  3. Het bestand wordt weer gesloten.

Opmerking

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.

Databases op kale apparaten vergrendelen

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.

Terug: Backups maken en terugzettenFirebird Documentation IndexOmhoog: Firebirds nbackup-toolVolgende: Het deltabestand instellen
Firebird Documentation IndexFirebirds nbackup-tool → Vergrendelen en ontgrendelen