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
fonte
2014-08-28 18:40:14
Esattamente quello che stavo cercando e altro ancora. Grazie! Spero che questo aiuti molte persone. – Epiplon