Guida rapida per backup-ripristino con Gbak
1. Padroneggiare i backup con Gbak
1.1 Il backup Firebird più semplice con il comando gbak
1.2. Backup locale con gbak eseguibile online su Windows
1.3. Backup con gbak con stringa di connessione TCP/IP
1.4. Backup più veloce con gbak con Service Manager
1.5. Il backup più veloce con gbak con Service Manager e garbage collection inibita
1.6. Backup su condivisione di rete o percorso di rete
1.7. Backup semplice dal server remoto alla macchina locale
1.8. Backup più veloce da un server remoto alla macchina locale con Service Manager
1.9. Backup del database Firebird sul server remoto allo stesso server remoto usando Service Manager
1.10. Backup del database Firebird 6 volte più veloce con Firebird 5 (o HQbird in 2.5/3.0/4.0/5.0)
2. Ripristino con lo strumento Gbak
2.1. Il comando di ripristino più semplice
2.2. Ripristino con stringa di connessione localhost
2.3. Ripristino con XNET su Windows
2.4. Ripristino più veloce con Service Manager
2.6. Ripristino del database usando un alias
2.7. Ripristino del backup locale sul server remoto
2.8. Ripristino del backup locale sul server remoto con Service Manager
2.9. Ripristino di tabelle estremamente lunghe
3. Ottimizzazione e registrazione dei processi di backup e ripristino
3.2. Aggiungere statistiche sulle prestazioni all’output verbose
3.3. Escludere tabelle dal backup e/o dal ripristino
3.4. Recuperare la password per il backup o il ripristino dal file
4. Backup-ripristino in un unico passaggio
5. Riepilogo delle prestazioni
Domanda molto frequente su VM e backup Firebird
Appendice A. Errori durante backup/ripristino
Che cos’è gbak?
Gbak è uno strumento standard da riga di comando di Firebird (vedi la sua documentazione ufficiale qui), progettato per eseguire 1) il backup completo del database: legge ogni record nel database e li memorizza nel file di backup, 2) il ripristino del backup in un nuovo database.
Per sviluppatori e amministratori con esperienza con altri RDBMS, il termine “backup” potrebbe essere un po’ confuso, poiché gbak non produce una copia esatta del database, ma un file in formato non-database, contenente solo i dati (gli indici sono memorizzati come dichiarazioni).
Per creare un database dal file di backup gbak, è necessario eseguire il processo di ripristino con gbak.
1. Padroneggiare i backup con Gbak
1.0. Preparazione
Creiamo la cartella C:\data e inseriamo lì un database. Useremo un database da 5Gb dal test Firebird OLTP-EMUL, ma puoi usare il tuo database, ovviamente.
Per gli utenti Linux - creiamo la cartella /db e cambiamo il suo proprietario in “firebird”, e copiamo lì il database (assicurati che anche il suo proprietario sia firebird).
mkdir /db
chown firebird -R /db
1.1 Il backup Firebird più semplice con il comando gbak
Windows
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
In questo esempio, lo strumento gbak accede al file del database utilizzando accesso locale o embedded.
Firebird 3.0: L’accesso embedded nella configurazione predefinita per Firebird 3.0 (con il parametro in firebird.conf ServerMode = SuperServer) tenterà di mettere un blocco esclusivo sul database, quindi altre connessioni non saranno in grado di accedere al database (o il tentativo di gbak fallirà a causa delle connessioni attive).
Firebird 2.5: Con Firebird 2.5 su Windows il comando funzionerà correttamente tramite il protocollo XNET (se hai una sola istanza di Firebird in esecuzione, ovviamente). Su Linux, Firebird tenterà di utilizzare l’accesso embedded; se non è accessibile, proverà automaticamente (e implicitamente) a connettersi tramite TCP/IP. (Se non sai cosa significano XNET, INET, ecc., consulta il Cheat Sheet sulle stringhe di connessione Firebird).
Nota 1: Questo comando viene eseguito sotto l’account dell’utente del sistema operativo (cioè il tuo) e utilizza i suoi permessi per accedere ai file di backup e del database.
Normalmente, il servizio Firebird su Windows viene eseguito con l’account LocalSystem, e su Linux sotto l’utente “firebird”, ma la console viene solitamente eseguita sotto il tuo account utente.
Se questo account utente non ha accesso al percorso del database o al percorso di backup, gbak fallirà con l’errore “Cannot open backup file” (vedi esempio in Appendice A. Errori, #5).
Nota 2: gbak -b sovrascrive silenziosamente il file di backup. Quindi, se hai già backup1.fbk, verrà sovrascritto.
Nota 3: Su Linux, questo comando gbak creerà un file di backup con proprietario uguale all’utente della console.
Tempo di backup per questo comando: 120 secondi
1.2. Backup locale con gbak eseguibile online su Windows
Questa sezione è solo per utenti Windows! Di solito, dobbiamo eseguire il backup mentre abbiamo connessioni attive al database, quindi invece della connessione embedded, è meglio specificare esplicitamente il protocollo locale per evitare di mettere un blocco esclusivo sul file del database da parte di gbak stesso in Firebird 3, cioè XNET.
Per Firebird 3.0:
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Per Firebird 2.5, possiamo usare una stringa di connessione locale, e userà anche XNET:
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Su Linux, Firebird non supporta un protocollo locale specifico come XNET su Windows, quindi è necessario usare una stringa di connessione TCP/IP (vedi sezione 1.3).
Inoltre, XNET funziona solo per una singola istanza di Firebird, quindi se esegui più istanze di Firebird su Windows, potrebbe essere più facile usare una stringa di connessione in stile INET per specificare l’istanza del server di destinazione.
Tempo di backup: 139 secondi
1.3. Backup con gbak con stringa di connessione TCP/IP
Questo è il comando gbak più universale, per eseguire il backup online.
Windows
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
In questo caso, specificando localhost: all’inizio del percorso del database, la connessione viene effettuata tramite il sottosistema di rete di Firebird.
È leggermente più lento dell’accesso locale ma funziona in tutti i casi in cui abbiamo un server in esecuzione che accetta connessioni.
Porta non standard per Firebird
Se hai Firebird in esecuzione su una porta non standard (ad esempio, 3051 invece di 3050), puoi eseguire il backup in questo modo:
Windows
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Tempo di backup: 182 secondi
1.4. Backup più veloce con gbak con Service Manager
Come possiamo ottenere l’universalità della connessione TCP/IP, con supporto della porta non standard, e un backup locale veloce? Usiamo Service Manager! Service Manager, in parole semplici, è il modo per eseguire strumenti standard tramite il motore Firebird. Nota che, nel caso di Service Manager, non è necessario specificare il nome del server nel percorso del database, solo nel parametro -se.
Windows
gbak -b -se localhost:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Questo comando usa l’opzione -service per specificare che vogliamo usare Service Manager dell’istanza Firebird sulla porta 3050 per eseguire il backup.
In questo caso, il backup verrà eseguito direttamente all’interno del processo Firebird (ha una copia del codice gbak), e poiché la comunicazione in-process è molto più veloce, il backup sarà significativamente più veloce in questo caso.
Se Firebird è in esecuzione su una porta non standard (ad esempio, 3051), il comando può apparire così:
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Nota: C’è una limitazione significativa in Firebird 2.5 e Firebird 3.0.0-3.0.5 (rimossa solo in 3.0.6): la riga di comando (tutti i parametri e i percorsi per il database e per il backup) deve essere inferiore a 256 simboli.
Se raggiungi questo limite, ad esempio, a causa di percorsi lunghi del database e del backup, puoi dichiarare un alias per il database in databases.conf (3.0 e successivi) o aliases.conf (2.5):
mydb1=c:\Data\test1.fdb #Windows
oppure
mydb1=/db/test1.fdb #linux
e poi usarlo nel nostro comando:
Windows
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Tempo di backup: 115 secondi
1.5. Il backup più veloce con gbak con garbage collection inibita
Per rendere il backup ancora più veloce, aggiungiamo l’opzione -g
-G(ARBAGE_COLLECT) inibisce la garbage collection
Quindi, il comando di backup sarà il seguente
Windows
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
L’opzione -g forza il motore Firebird a disabilitare la garbage collection per il processo di backup nel file del database.
Non significa che le versioni dei record spazzatura verranno memorizzate nel file di backup; significa che il server non tenterà di pulire la spazzatura esistente nel database durante il backup, e il backup sarà più veloce.
Raccomandiamo vivamente di usare questa opzione, perché crediamo che la garbage collection e la pulizia associata dovrebbero essere fatte da sweep (gfix -sweep o autosweep), quindi è meglio non considerare gbak come una sorta di alternativa allo sweep.
Tempo di backup: 105 secondi
1.6. Backup su condivisione di rete o percorso di rete
E se dobbiamo mettere il file di backup su una condivisione di rete?
Su Windows
La confusione frequente dei nuovi utenti Firebird: il backup manuale (quando avvii il comando da un prompt dei comandi), con semplice gbak -b, verso una condivisione di rete funziona bene, ma la versione veloce di gbak con -se localhost:service_mgr, non funziona.
Il motivo è che Firebird su Windows viene eseguito sotto l’account LocalSystem, che non ha accesso ai percorsi di rete (a meno che queste condivisioni di rete non abbiano configurato l’accesso per il gruppo “Everyone”, ma questo è molto molto pericoloso nella nostra era di ransomware).
La soluzione è eseguire il servizio Firebird su Windows sotto un account con diritti sufficienti per accedere alla condivisione di rete e, contemporaneamente, diritti sufficienti per accedere ai file del database locale e ai file di sistema in C:\ProgramData\Firebird. Inoltre, una buona idea è configurare il parametro RestrictAccess in firebird.conf.
Su Linux
Poiché Firebird su Linux viene eseguito sotto l’account “firebird”, monta la condivisione di rete con mapping all’utente “firebird”, così il servizio Firebird sarà in grado di accedere al percorso di rete nello stesso modo di un’unità locale.
1.7. Backup semplice dal server remoto alla macchina locale
È possibile eseguire il backup del database dal server remoto alla macchina locale.
Il comando di esempio seguente viene avviato su un computer Windows, accede al database su server Linux (con indirizzo IP 192.168.0.108, ma ovviamente può essere utilizzato anche il nome host del server), e il file di backup viene salvato nella cartella C:\Data su Windows):
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk
Tempo di backup: 568 secondi
Questo comando di solito sarà molto più lento del backup locale, perché gbak legge i dati dal server remoto e trasferisce i record attraverso la rete.
1.8. Backup più veloce dal server remoto al locale con Service Manager
Il comando seguente è più veloce del backup tradizionale dal server remoto alla macchina locale, descritto in #1.7
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk
Utilizza Service Manager per eseguire il backup sul server remoto, ma l’output viene inviato al pipe stdout e poi reindirizzato al file locale.
Questo comando è di solito più veloce del 15%-20% rispetto al #1.7 (Backup semplice dal server remoto al locale), grazie a quanto segue:
- esegue il backup tramite Service Manager sul server remoto, quindi tutte le operazioni di lettura e compressione vengono eseguite nel modo più rapido,
- trasferisce attraverso la rete solo il file di backup risultante, con dimensioni inferiori rispetto ai dati nel database
Tuttavia, con questo comando, non è possibile abilitare la modalità verbose e salvare l’output dettagliato nel file di log.
Tempo di backup: 473 secondi
1.9. Backup del database Firebird sul server remoto allo stesso server remoto utilizzando Service Manager
Con Service Manager, è possibile richiamare il backup gbak del database sul server remoto e salvarlo anche sullo stesso server remoto.
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk
Questo comando tramite Service Manager richiama il backup sul server remoto, con l’istruzione di salvare il file di backup anche sullo stesso server di rete.
Naturalmente, la posizione di backup deve essere accessibile dal servizio Firebird (su Linux viene eseguito come utente “firebird”, su Windows come account LocalSystem).
1.10. Backup del database Firebird 6 volte più veloce con backup multi-thread in Firebird 5 (o HQbird 2.5/3.0/4.0/5.0)
Se non sei ancora soddisfatto delle prestazioni di backup di Firebird gbak, considera di migrare a Firebird 5 (o utilizza la distribuzione enterprise Firebird: HQbird per altre versioni).
Supporta il backup multi-thread, che consente operazioni di backup fino a 6 volte più veloci con gbak.
gbak -b -par 8 -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Come puoi vedere, c’è un nuovo parametro -par 8, che fa sì che gbak utilizzi 8 thread per creare un backup.
HQbird esegue le attività di manutenzione (sweep, backup, restore) molto più velocemente (i risultati nella figura seguente provengono da un database diverso, ovviamente):

2. Ripristino con lo strumento Gbak
Abbiamo il file di backup backup1.fbk, creato da uno dei comandi precedenti, e dobbiamo ripristinarlo in modo rapido ed efficiente.
Supponiamo che il file sia in C:\Data\backup1.fbk nel caso di Windows, o /db/backup1.fbk nel caso di Linux.
2.1. Il comando di ripristino più semplice
Su Windows
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Su Linux
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey
Prima di tutto, si prega di notare che gbak -c non sovrascrive il file del database, e se esiste il file C:\data\new1.fdb o /db/new1.fdb, gbak restituirà un errore dicendo che il database esiste già.
Inoltre, questo comando funziona in modo molto diverso su 2.5/3.0+ e Windows/Linux.
Su Linux, questo comando utilizzerà l’accesso embedded al database creato (se non hai modificato in firebird.conf l’ordine dei provider Firebird, ovviamente) sia per 3.0 che per 2.5.
Su Windows, su Firebird 3.0 con l’ordine predefinito dei provider, sarà accesso embedded, su 2.5 - XNET.
Inoltre, questo comando crea un file con i diritti dell’utente che ha avviato gbak, è particolarmente importante su Linux - se esegui tale gbak come root, il proprietario del file del database sarà root, e il processo Firebird, che viene eseguito sotto l’utente “firebird”, non sarà in grado di accedere al file ripristinato.
Nota per gli utenti Linux
Molte persone, per “sistemare” la proprietà, applicano il permesso a tutti di accedere al database ripristinato, cioè qualcosa come “chmod 777 database”, ma questo è molto insicuro; il modo corretto è cambiare il proprietario del database in firebird, con il seguente comando
chown firebird /db/new1.fdb
In generale, questo comando è abbastanza buono per il ripristino semplice di database non di produzione (usati per test o in sviluppo).
Tempo di ripristino: 275 secondi
2.2. Ripristino con stringa di connessione localhost
L’opzione di ripristino più universale, ma non la più veloce, è la seguente:
Windows
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Porta non standard
Se Firebird è in esecuzione su una porta non standard, ad esempio 3051, può essere specificata nel comando di ripristino:
Windows
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey
Tempo di ripristino: 1225 secondi
2.3. Ripristino con XNET su Windows
Per rendere il ripristino un po’ più veloce, su Windows possiamo utilizzare XNET (per Firebird 3.0 e versioni successive):
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey
Su Firebird 2.5 su Windows, l’accesso XNET verrà utilizzato con la semplice riga di comando (se è in esecuzione una sola istanza di Firebird):
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Tempo di ripristino: 585 secondi
2.4. Ripristino più veloce con Service Manager
E il modo più veloce per ripristinare è utilizzare Service Manager
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Con l’opzione -se, richiamiamo Service Manager sull’indirizzo localhost e gli istruiamo di eseguire il codice di ripristino all’interno del motore Firebird.
Quando il ripristino viene eseguito da Service Manager, il file del database creato sarà di proprietà dell’account dell’istanza Firebird in esecuzione (processo) - è “firebird” su Linux e LocalSystem su Windows.
Tempo di ripristino: 244 secondi
2.5. Opzione non raccomandata
A un certo punto potresti avere la tentazione di utilizzare la seguente opzione:
-R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used) database from backup file (restore)
per forzare la sostituzione del database esistente con quello nuovo.
Nella nostra esperienza, questa opzione aumenta notevolmente le probabilità di sovrascrivere accidentalmente il database di produzione.
Raccomandiamo vivamente di ripristinare il database ogni volta con un nuovo nome e rinominarlo, oltre a eliminare esplicitamente il vecchio database.
Non forniremo nemmeno l’esempio del comando con questa opzione.
2.6. Ripristino del database utilizzando un alias
È possibile ripristinare il database utilizzando l’alias, dichiarato in databases.conf (o aliases.conf in Firebird 2.5)
Ad esempio, abbiamo la seguente dichiarazione
restdb=c:\Data\newrest1.fdb #Windows
restdb=/db/newrest1.fdb #Linux
Quindi possiamo eseguire il seguente comando per ripristinare il backup nel percorso specificato dall’alias
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey
2.7. Ripristino del backup locale sul server remoto
È possibile ripristinare il file di backup locale sul server Firebird remoto.
In questo esempio, ripristiniamo il file di backup salvato su Windows, sul server Linux (il suo indirizzo IP 102.168.0.108):
gbak -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey
Tempo di ripristino: 7009 secondi
Come puoi notare, il processo di ripristino remoto funziona molto lentamente; possiamo accelerarlo con Service Manager?
2.8. Ripristino del backup locale sul server remoto con Service Manager
Per ripristinare il backup locale sul server remoto con Service Manager, è necessario fare il trucco con il flusso di input stdin:
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb < C:\Data\backup1.fbk
Questo comando richiama il ripristino sul server remoto con l’input standard stdin come fonte del backup - e fornisce l’input utilizzando la parte < C:\Data\backup1.fbk del comando.
Sembra un po’ complicato? Ma è un modo semplice per aumentare di 10 volte le prestazioni di gbak per il ripristino sul server remoto!
Tempo di ripristino: 450 secondi
2.9. Ripristino di tabelle estremamente lunghe
Se hai un database davvero grande con un numero totale di righe superiore a 2 miliardi, è necessario specificare l’opzione -o[ne_at_a_time], per ripristinare ogni tabella in una transazione separata, per evitare alcuni overflow interni.
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey
3. Ottimizzazione e registrazione dei processi di backup e ripristino
3.1. Gbak con output verbose
Per impostazione predefinita, gbak è uno strumento molto silenzioso; non restituisce nulla in caso di esecuzione riuscita. Per renderlo verbose, possiamo aggiungere l’opzione -v[erify]
gbak -b -se localhost/3050:service_mgr -g mydb1 c:\Data\backup1.fbk -v -user SYSDBA -pass masterkey
Di conseguenza, ci saranno più dettagli. Il problema minore ma fastidioso è che la stampa dell’output sulla console può rendere il backup verbose significativamente più lento rispetto alla variante silenziosa, quindi una buona idea sarà salvare il log nel file con l’opzione - y logfile:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Nota: gbak non sovrascriverà il file di log esistente! Se hai già C:\data\backuplog1.txt in questo esempio, il backup genererà un errore (vedi #3 nell’Appendice A).
Nota 2: esiste l’opzione -verbint per controllare l’intervallo per segnalare il numero di record elaborati durante il backup o il ripristino.
3.2. Aggiungi statistiche sulle prestazioni all’output verbose
Nell’output verbose di gbak per backup e ripristino, possiamo vedere messaggi come questi:
gbak: writing data for table COUNTRY
gbak:16 records written
per ogni tabella e altri oggetti del database.
È interessante capire quali tabelle/oggetti richiedono più tempo, giusto?
Per questo, è necessario utilizzare l’opzione -st(atistics):
-ST(ATISTICS) TDRW show statistics:
T time from start
D delta time
R page reads
W page writes
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Quando applicata, aggiungerà al log le seguenti colonne:
gbak: time delta reads writes
così potremo vedere il tempo e l’IO spesi per ogni riga.
3.3. Escludere tabelle dal backup e/o dal ripristino
Se pensi che alcune tabelle possano essere escluse dal backup (un buon esempio è una tabella di log molto lunga), puoi specificarle nel parametro SK[IP_DATA], con un’espressione regolare come parametro.
Nell’esempio seguente, escludiamo i dati delle tabelle COUNTRY e JOB dal backup:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
E, nell’esempio seguente, escludiamo la tabella CLIENT dal ripristino:
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"
Si prega di notare che il parametro per SKIP_DATA deve essere trasmesso come parametro singolo, quindi deve essere tra virgolette!
Su Linux, le virgolette devono essere singole, su Windows - doppie.
Precauzioni sull’esclusione di tabelle dal backup e/o dal ripristino
Raccomandiamo vivamente di verificare la condizione dell’espressione regolare prima di usarla, con la seguente query - restituirà un elenco di tabelle che corrispondono alla condizione del filtro (nella query le virgolette sono sempre singole)
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';
RDB$RELATION_NAME
===============================
COUNTRY
JOB
Si prega di notare che le tabelle verranno escluse dal backup o dal ripristino indipendentemente dai vincoli esistenti (Foreign Keys), quindi, se non si è pianificata attentamente tale esclusione, è molto facile ricevere l’errore “Cannot commit foreign key index” durante il processo di ripristino.
3.4. Recuperare la password per il backup o il ripristino da un file
Se non siete grandi fan dell’idea di esporre la password a chiunque veda i vostri comandi, apprezzerete il seguente switch: -fetch passwordfile
Creiamo il file con la password in C:\Data\passfile.txt e usiamolo (qui usiamo una variante embedded molto semplice, ovviamente lo switch funzionerà anche con Service Manager):
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt
Ci sono 2 vantaggi pratici:
- Se memorizziamo la password in un unico file, possiamo garantire che tutti i nostri file di comando useranno sempre la password attuale.
- Non esponiamo la password in ogni file di comando
4. Backup-ripristino in un unico passaggio
Spesso l’obiettivo del backup è eseguire il ripristino immediato, per ottenere un nuovo database fresco, ad esempio, per applicare una nuova dimensione di pagina al database, o per migrare il database esistente da 2.5 a 3.0.
In questo caso, è possibile eseguire il backup-ripristino con un singolo comando, utilizzando input e output standard come sorgenti per i comandi appropriati, per bypassare la creazione del file di backup intermedio, ridurre i requisiti di spazio libero e velocizzare il processo.
Il comando è il seguente:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
In sostanza, qui eseguiamo 2 comandi, uniti dal simbolo |,
il primo per il backup su stdout:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout
e il secondo, per il ripristino da stdin
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Questo comando è il modo più veloce per eseguire il backup-ripristino sulla stessa istanza Firebird.
Si prega di notare: per convertire database con backup-ripristino in un unico passaggio da 2.5 a 3.0 è necessario utilizzare 2 istanze di Firebird, vedere i dettagli qui.
5. Riepilogo delle prestazioni
La figura seguente contiene informazioni sulla velocità dei diversi comandi di backup del backup locale del database di test:

Come si può vedere, il modo più veloce per eseguire il backup locale è utilizzare Service Manager (switch -se[rvice]) e inibire la garbage collection (switch -ig).
Per il backup dal server remoto alla macchina locale, anche Service Manager è l’opzione migliore:

La situazione con le prestazioni del ripristino è simile: Service Manager è il modo più veloce per ripristinare.

Per quanto riguarda il caso piuttosto raro in cui il ripristino viene eseguito dal backup locale al server remoto, l’utilizzo di Service Manager con il trucco di stdin è l’unica scelta praticabile:

Domanda molto frequente su VM e backup Firebird
Perché dovrei usare gli strumenti di backup di Firebird, quando ci sono strumenti di backup popolari disponibili che promettono di eseguire il backup di tutto?
Oppure, eseguo il backup dell’immagine completa della macchina virtuale, perché dovrei preoccuparmi del backup del database Firebird?
La risposta è qui.
Appendice A. Errori durante il backup/ripristino
- Un tentativo di eseguire gbak senza parametri, o con un utente non proprietario del database/non SYSDBA, porterà al seguente errore:
gbak: ERROR:Unable to perform operation. You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
- Se si specifica una password errata, ci sarà il seguente errore:
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
- L’errore si verifica quando il file esistente viene specificato come destinazione del log verbose
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- L’errore si verifica se il database esistente viene specificato nel comando di ripristino gbak come destinazione
gbak: ERROR:database C:\data\new1.fdb already exists. To replace it, use the -REP switch
gbak:Exiting before completion due to errors
- L’errore si verifica quando gbak tenta di scrivere un backup nella posizione in cui non ha diritti sufficienti per scrivere.
gbak: ERROR:cannot open file /db/test1.fbk
gbak:Exiting before completion due to errors
- Quando gbak tenta di accedere al file senza permesso per farlo - ad esempio, il file ha un altro proprietario rispetto all’utente “firebird” su Linux
gbak: ERROR:no permission for read-write access to database /db/test1.fdb
gbak: ERROR: IProvider::attachDatabase failed when loading mapping cache
gbak:Exiting before completion due to errors
- Tentativo di utilizzare l’output verbose
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout >
c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Tentativo di eseguire il backup con Service Manager sul server remoto con verbose abilitato e salvataggio nel file di log.
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt -user SYSDBA -pass masterkey /db/test1.f
db stdout > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet
gbak:Exiting before completion due to errors
- Errore nel backup-ripristino in un unico passaggio quando il backup fallisce per qualche motivo:
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
- Se si tenta di passare un non-backup a gbak
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
- Il backup di un file di database corrotto con la pagina sbagliata riporterà il seguente errore (il numero e il file del database differiranno, ovviamente)
gbak: ERROR:database file appears corrupt (E:\DATABASE1.FDB)
gbak: ERROR: wrong page type
gbak: ERROR: page 9294588 is of wrong type (expected 8, found 0)
gbak: ERROR:gds_$get_segment failed
gbak:Exiting before completion due to errors
gbak: ERROR:Unexpected I/O error while reading from backup file
gbak:Exiting before completion due to errors
Contatti
Non esitate a contattarci per qualsiasi domanda, o a segnalare errori o refusi: [email protected]