2014-08-28 9 views
8

È una domanda piuttosto semplice. Firebird ha uno strumento di backup chiamato nbackup mentre è possibile eseguire backup incrementali.È possibile conoscere il livello dall'ultimo backup incrementale, realizzato con nbackup da Firebird?

Lo strumento si lamenta se non si esegue il backup nell'ordine corretto (ad esempio, si esegue un backup di livello 0, quindi un livello 2). Quindi, presumo che lo strumento inserisca un flag nel database che indica il livello dell'ultimo backup effettuato.

La documentazione è fornita here

Come posso recuperare queste informazioni?

risposta

9

Per quanto ne so l'unico modo è di interrogare la tabella RDB$BACKUP_HISTORY (non c'è alcuna richiesta di gestore del servizio per questo). Per ottenere l'ultimo backup è possibile utilizzare:

SELECT RDB$BACKUP_ID, RDB$TIMESTAMP, RDB$BACKUP_LEVEL, RDB$GUID, RDB$SCN, RDB$FILE_NAME 
FROM RDB$BACKUP_HISTORY 
ORDER BY RDB$TIMESTAMP DESC 
ROWS 1 

La tabella RDB$BACKUP_HISTORY ha le seguenti colonne:

  • RDB$BACKUP_ID chiave primaria
  • RDB$TIMESTAMP timestamp di backup
  • RDB$BACKUP_LEVEL backup livello
  • RDB$GUID guid del backup (utilizzato anche nei file di backup per controllare e c Heck dipendenze)
  • RDB$SCN più alto marcatore pagina in backup (vedi sotto)
  • RDB$FILE_NAME nome del backup creato

nbackup fa un backup fisico delle pagine di database. L'SCN (abbreviazione di scansione della pagina ...) è un numero utilizzato per contrassegnare le pagine del database. Questo numero viene incrementato a ogni modifica dello stato del backup, per ogni backup con nbackup sono presenti 3 modifiche allo stato: nbak_state_normal (nessun backup) -> nbak_state_stalled (il database scrive nel file delta) -> nbak_state_merge (che unisce il file delta al database) -> nbak_state_normal (nessun backup).

Il primo backup ottiene SCN 0, il secondo SCN 3, ecc. (Non importa quale livello).

  • SCN 0: Pagine prima di qualsiasi backup
  • SCN 1: pagine scritte/aggiornato nel file delta durante il backup
  • SCN 2: Pagine scritte/aggiornato durante l'unione dei file delta in backup principale (anche se io sono sicuro se le pagine dal file delta scritto indietro nel file principale ottengono SCN 1 o 2)
  • SCN 3: pagine scritte/aggiornati dopo la fine del primo backup + unire
  • ...
  • SCN 6 : Pagine scritte/aggiornate dopo la fine del secondo b ackup + merge

Quando si esegue un backup di livello 1, si cerca l'ultimo livello di backup 0 e si esegue il backup di tutte le pagine con una SCN superiore a SCN del backup di quel livello 0 (e così via). Questo anche descritto nelle note di rilascio di Firebird 2.1: New On-line Incremental Backup.

Si noti che una copia di backup e ripristino con gbak cancellerà la tavola RDB$BACKUP_HISTORY e ripristinare lo SCN di tutte le pagine a 0. La ragione di questo è che gbak crea un backup logica invece di un backup fisico. Pertanto, un ripristino mediante gbak riscrive l'intero database (e può persino modificare le dimensioni della pagina). Questo rende i backup precedenti nbackup privi di significato come punto di partenza per i backup successivi: è necessario iniziare con un nuovo livello 0.

Poiché questa informazione non è presente nel manuale di nbackup, ho creato un ticket sul tracker Firebird: http://tracker.firebirdsql.org/browse/DOC-94

+1

Esattamente quello che stavo cercando e altro ancora. Grazie! Spero che questo aiuti molte persone. – Epiplon

Problemi correlati