Contattaci epr una consulenza info@firebirdsql.it



Firebird Gbak Tips And Tricks

Posted: 09/16/2020 22:09:35, in category Backup


 

Cos'è gbak?
1. Padroneggiare i backup con Gbak
1.0 Preparazione
1.1 Il più semplice backup di Firebird con il comando gbak
1.2. Backup locale con gbak che può essere eseguito 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 nella condivisione di rete o nel 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 sullo stesso server remoto utilizzando Service Manager
2. Ripristina con lo strumento Gbak
2.1. Il comando di ripristino più semplice
2.2. Ripristina con stringa di connessione localhost
2.3. Ripristina con XNET su Windows
2.4. Ripristino più veloce con Service Manager
2.5. Interruttore non consigliato
2.6. Ripristina il database utilizzando l'alias
2.7. Ripristina il backup locale sul server remoto
2.8. Ripristina il backup locale sul server remoto con Service Manager
2.9. Ripristina tabelle estremamente lunghe
3. Modifica e registrazione dei processi di backup e ripristino
3.1. Gbak con output dettagliato
3.2. Aggiungi statistiche sulle prestazioni all'output dettagliato
3.3. Escludi tabelle dal backup e / o dal ripristino
3.4. Recupera la password per il backup o il ripristino dal file
4. Backup-ripristino in un passaggio
5. Riepilogo delle prestazioni
Domanda molto frequente sui backup di VM e Firebird
Appendice A. Errori durante il backup / ripristino

Cosa è gbak?

Gbak è uno strumento da riga di comando standard di Firebird (vedere la sua documentazione ufficiale qui), progettato per eseguire 1) backup completo del database: legge tutti i record nel database e li memorizza nel file di backup, 2) ripristina il backup nel nuovo Banca dati.
Per sviluppatori e amministratori con esperienza con altri RDBMS, il termine "backup" potrebbe creare confusione, poiché gbak non produce la copia esatta del database, ma il file nel formato non database, solo con 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 mettiamo lì un database. Useremo il database 5Gb dal test OLTP-EMUL di Firebird, ma puoi usare il tuo database, ovviamente.

Per gli utenti Linux: creiamo la cartella / db e cambiamo il suo proprietario in "firebird", quindi copiamo il database lì (assicurati che anche il suo proprietario sia firebird).

mkdir /db
chown firebird -R /db

1.1 Il backup di Firebird elementare 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 di database utilizzando l'accesso locale o incorporato.

Firebird 3.0: l'accesso integrato nella configurazione predefinita per Firebird 3.0 (con parametro in firebird.conf ServerMode = SuperServer) proverà a 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à bene attraverso il protocollo XNET (se hai l'unica istanza Firebird in esecuzione, ovviamente). Su Linux, Firebird proverà a utilizzare l'accesso incorporato, se non è accessibile, proverà automaticamente (e implicitamente) a connettersi tramite TCP / IP. (Se non sai qual è il significato di XNET, INET, ecc., Leggi Protocolli di connessione in Firebird 3)

Nota 1: questo comando viene eseguito con l'account dell'utente del sistema operativo (ovvero il tuo) e utilizza le sue autorizzazioni per accedere ai file di backup e database.
Normalmente, il servizio Firebird su Windows viene eseguito con l'account LocalSystem e su Linux con l'utente "firebird", ma la console di solito viene eseguita con il proprio account utente.
Se questo account utente non ha accesso al percorso del database o al percorso di backup, gbak fallirà con l'errore "Impossibile aprire il file di backup" (vedere l'esempio nell'Appendice A. Errori, n. 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 il proprietario uguale all'utente della console.

Tempo di backup per questo comando: 120 secondi


1.2. Backup locale con gbak che può essere eseguito online su Windows

Questa sezione è solo per utenti Windows! Di solito, dobbiamo eseguire il backup mentre abbiamo connessioni attive al database, quindi invece di una connessione incorporata, è 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 utilizzare una stringa di connessione locale e utilizzerà 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 utilizzare la stringa di connessione TCP / IP (vedere la sezione 1.3).
Inoltre, XNET funziona solo per la singola istanza di Firebird, quindi se esegui più istanze di Firebird su Windows, potrebbe essere più semplice usare la stringa di connessione in stile INET per specificare l'istanza del server di destinazione

Tempo per il 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 avviene tramite il sottosistema di rete di Firebird.
È leggermente più lento dell'accesso locale ma funziona in tutti i casi quando abbiamo un server in esecuzione che accetta connessioni.

Firebird Non-standard port 

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 per il backup: 182 secondi

1.4. Backup più veloce con gbak con Service Manager

Come possiamo ottenere l'universalità della connessione TCP / IP, con supporto di porte non standard e backup locale veloce? Usiamo Service Manager! Service Manager, in parole semplici, è il modo per eseguire strumenti standard tramite il motore Firebird. Si noti 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 utilizza switch -service per specificare che si desidera utilizzare 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à notevolmente più veloce in questo caso.
Se Firebird è in esecuzione su uno standard non standard (ad esempio, 3051), il comando può essere simile a:

gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb  c:\Data\backup1.fbk -user SYSDBA -pass masterkey

Nota: esiste una limitazione significativa in Firebird 2.5 e Firebird 3.0.0-3.0.5 (rimossi solo nella 3.0.6): la riga di comando (tutti i parametri e percorsi per il database e per il backup) deve essere inferiore a 256 simboli .

Se si raggiunge questo limite, ad esempio, a causa dei lunghi percorsi del database e del backup, è possibile dichiarare un alias per il database in databases.conf (3.0 e versioni successive) o aliases.conf (2.5):

mydb1=c:\Data\test1.fdb #Windows

o

mydb1=/db/test1.fdb  #linux

e poi usalo nel 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 per il backup: 115 secondi

1.5. Il backup più veloce con gbak con garbage collection inibita

Per rendere il backup ancora più veloce, aggiungiamo switch -g

 -G(ARBAGE_COLLECT)    inhibit 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

Switch -g forza il motore Firebird a disabilitare la garbage collection per il processo di backup nel file di database.
Ciò non significa che le versioni dei record spazzatura verranno archiviate nel file di backup, significa che il server non tenterà di pulire i rifiuti esistenti nel database durante il backup e il backup sarà più veloce.

Consigliamo vivamente di utilizzare questo interruttore, perché riteniamo che la raccolta dei rifiuti e la pulizia associata debbano essere eseguite mediante sweep (gfix -sweep o autosweep), quindi è meglio non considerare gbak come alcun tipo di alternativa allo sweep.

Tempo per il backup: 105 secondi

1.6. Backup nella condivisione di rete o nel percorso di rete

E se avessimo bisogno di mettere il file di backup nella condivisione di rete?

Windows
La spesso confusione dei nuovi utenti Firebird: backup manuale (quando si avvia il comando da un prompt dei comandi), con semplice gbak -b, alla condivisione di rete funziona bene, ma la versione veloce di gbak con -se localhost: service_mgr, non funziona .
Il motivo è che Firebird su Windows funziona con 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 con l'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.

Linux
Poiché Firebird su Linux funziona con l'account "firebird", monta la condivisione di rete con mappatura all'utente "firebird", in modo che il servizio Firebird possa accedere alla posizione di rete allo 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 si avvia su un computer Windows, accede al database su server Linux (con indirizzo IP 192.168.0.108, ma ovviamente si può utilizzare anche il nome host del server) e il file di backup viene archiviato nella cartella C: \ Data on Finestre):

gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk

Tempo per ilbackup: 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 alla pipe stdout e quindi reindirizzato al file locale.
Questo comando è in genere più veloce del 15% -20% rispetto a # 1.7 (backup semplice dal server remoto al locale), per i seguenti motivi:

  • esegue il backup tramite Service Manager sul server remoto, quindi tutte le operazioni di lettura e compressione vengono eseguite nel modo più veloce,
  • trasferisce in rete solo il file di backup risultante, di dimensione inferiore ai dati nel database

Tuttavia, con questo comando, non è possibile abilitare la modalità dettagliata e memorizzare l'output dettagliato nel file di registro.

Tempo per il backup: 473 secondi

1.9. Backup del database Firebird sul server remoto sullo stesso server remoto utilizzando Service Manager

Con Service Manager, è possibile invocare il backup gbak del database sul server remoto e archiviarlo 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 archiviare anche il file di backup sullo stesso server di rete.
Ovviamente, il percorso di backup dovrebbe essere accessibile dal servizio Firebird (su Linux funziona come utente "firebird", su Windows come account LocalSystem).

2. Restore con Gbak 

Abbiamo il file di backup backup1.fbk, creato da uno dei comandi sopra, e dobbiamo ripristinarlo, in modo veloce ed efficiente.

Supponiamo che il file sia in C: \ Data \ backup1.fbk in caso di Windows, o /db/backup1.fbk in caso di Linux.

2.1. Il comando di ripristino più semplice

Windows

gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey

Linux

gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey

Prima di tutto, tieni presente 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à.

Quindi, questo comando funziona effettivamente in modo molto diverso su 2.5 / 3.0 + e Windows / Linux.

Su Linux, questo comando userà l'accesso integrato al database creato (se non hai cambiato in firebird.conf l'ordine dei provider di Firebird, ovviamente) sia per 3.0 che per 2.5.

Su Windows, su Firebird 3.0 con l'ordine predefinito dei provider, sarà integrato l'accesso, su 2.5 - XNET.

Quindi, questo comando crea un file con i diritti dell'utente che ha avviato gbak, è particolarmente importante su Linux: se esegui tale gbak sotto root, il proprietario del file di database sarà root e il processo Firebird, che viene eseguito sotto user "Firebird", non sarà in grado di accedere al file ripristinato.

Note per gli utenti Linux
Molte persone, al fine di "aggiustare" la proprietà, chiedono a tutti il permesso 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 semplice ripristino di database non di produzione (utilizzati per test o in fase di sviluppo).

Tempo per il restore: 275 secondi

2.2. Ripristina 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

Non-standard port

Se Firebird è in esecuzione su una porta non standard, ad esempio 3051, può essere specificato 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 per il restore: 1225 secondi

2.3. Restore con XNET in Windows

Per rendere il ripristino un po 'più veloce, su Windows possiamo usare XNET (per Firebird 3.0 e superiori):

gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey

Su Firebird 2.5 su Windows, l'accesso a 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 per il restore: 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, invochiamo Service Manager sull'indirizzo localhost e gli chiediamo di eseguire il codice di ripristino all'interno del motore Firebird.

Quando il ripristino viene eseguito da Service Manager, il file di database creato sarà di proprietà dell'account che esegue l'istanza (processo) Firebird: è "firebird" su Linux e LocalSystem su Windows.

Tempo per il restore: 244 secondi

2.5. Switch non consigliato

Ad un certo punto potresti avere la tentazione di utilizzare il seguente interruttore:

   -R(ECREATE_DATABASE)  create (or replace if OVERWRITE used)                               database from backup file (restore)
in order to force replacing of the existing database with the new one. 

Nella nostra esperienza, questa opzione aumenta notevolmente le possibilità di sovrascrivere accidentalmente il database di produzione.

Si consiglia vivamente di ripristinare il database ogni volta con il nuovo nome e rinominarlo, nonché di eliminare esplicitamente il vecchio database.

Non forniremo nemmeno l'esempio del comando con questo interruttore.

2.6. Restore database utilizzando gli 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. Ripristina il backup locale sul server remoto

È possibile ripristinare il file di backup locale sul server Firebird remoto.

In questo esempio, ripristiniamo il file di backup archiviato 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 per il restore: 7009 secondi

Come puoi notare, il processo di ripristino remoto funziona molto lentamente, possiamo velocizzarlo con Service Manager?

2.8. Ripristina il backup locale sul server remoto con Service Manager

Per ripristinare il backup locale sul server remoto con Service Manager, è necessario eseguire 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 lo standard input stdin come origine 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 ripristinarle sul server remoto!

Tempo per il restore: 450 secondi

2.9. Ripristina tabelle estremamente lunghe

Se si dispone di un database molto grande con un numero totale di righe superiore a 2 miliardi, è necessario specificare switch -o , per ripristinare ogni tabella nella transazione separata, per evitare un overflow interno.

gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey 

3. Modifica e registrazione dei processi di backup e ripristino

3.1. Gbak con output dettagliato

Per impostazione predefinita, gbak è uno strumento molto silenzioso, non restituisce nulla in caso di esecuzione riuscita. Per renderlo dettagliato, possiamo aggiungere l'opzione -v

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 dettagliato molto più lento rispetto alla variante silenziosa, quindi la buona idea sarà quella di salvare il log nel file con switch -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 registro esistente! Se hai già C: \ data \ backuplog1.txt in questo esempio, il backup genererà l'errore (vedi # 3 nell'Appendice A).


Nota 2: esiste l'opzione -verbint per controllare l'intervallo per riportare il numero di record elaborati durante il backup o il ripristino.

3.2. Aggiungi statistiche sulle prestazioni all'output dettagliato

Nell'output dettagliato di gbak per il backup e il ripristino, possiamo vedere messaggi come questi:

gbak:    writing data for table COUNTRY
gbak:16 records written

per ogni tabella e altri oggetti di database.
È interessante capire quali tabelle / oggetti impiegano più tempo, giusto?

Per questo, è necessario utilizzare switch -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 applicato, aggiungerà al registro le seguenti colonne:

gbak: time   delta  reads  writes 

così saremo in grado di vedere il tempo e l'IO spesi su ogni riga.

3.3. Escludi 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 , con un'espressione regolare come parametro.

Nell'esempio seguente, escludiamo i dati dalle 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 noti che il parametro SKIP_DATA deve essere trasmesso come parametro singolo, quindi deve essere tra virgolette!
Su Linux, le virgolette dovrebbero essere singole, su Windows - doppie.

Precauzioni sull'esclusione di tabelle dal backup e / o dal ripristino

Si consiglia vivamente di verificare la condizione dell'espressione regolare prima di utilizzarla, 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

Tieni presente che le tabelle dal backup o dal ripristino verranno escluse indipendentemente dai vincoli esistenti (chiavi esterne), quindi, se non hai pianificato attentamente tale esclusione, è molto facile ricevere l'errore "Impossibile eseguire il commit dell'indice della chiave esterna" durante il processo di ripristino.

3.4. Recupera la password per il backup o il ripristino dal file

Se non sei un grande fan dell'idea di esporre la password a tutti coloro che vedono i tuoi comandi, ti piacerà il seguente interruttore: -fetch passwordfile

Creiamo il file con la password in C: \ Data \ passfile.txt e usiamolo (qui usiamo una variante incorporata 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 una password nel singolo file, possiamo assicurarci che tutti i nostri file di comando utilizzeranno sempre la password effettiva.
  • Non esponiamo la password nel file di ogni comando

4. One-step backup-restore

Spesso l'obiettivo del backup è eseguire il ripristino immediato, al fine di ottenere il nuovo database fresco, ad esempio, per applicare la nuova dimensione di pagina per il database, o per migrare il database esistente da 2.5 a 3.0.

In questo caso è possibile eseguire il backup-restore con il singolo comando, utilizzando input e output standard come sorgenti per i comandi appropriati, 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 di Firebird.

Nota: per convertire database con backup-ripristino in un passaggio da 2.5 a 3.0 è necessario utilizzare 2 istanze di Firebird, see details here.

5. Riepilogo delle prestazioni

La figura seguente contiene informazioni sulla velocità dei diversi comandi di backup del backup locale del database di prova:

Come puoi vedere, il modo più veloce per eseguire il backup locale è usare Service Manager (switch -se ) 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 di ripristino è simile: Service Manager è il modo più veloce per ripristinare.


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


 

Very Frequently Asked Question About VM and Firebird Backups

Why should I use Firebird backup tools, when there are popular backup tools available which promise to backup everything?

Or, I do backup the complete image of Virtual Machine, why should I bother about backup of Firebird database?

The answer is here.
 

Appendice A. Errori durante il backup / ripristino

1) Un tentativo di eseguire gbak senza parametri o con l'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

2) Se specifichi la password sbagliata, si verificherà 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

3) Si verifica un errore quando il file esistente viene specificato come destinazione del registro dettagliato

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

4) Si verifica un errore se il database esistente viene specificato nel comando gbak restore 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

5) Si verifica un errore quando gbak tenta di scrivere un backup nella posizione in cui non dispone di diritti sufficienti per scrivere.

gbak: ERROR:cannot open file  /db/test1.fbk
gbak:Exiting before completion due to errors

6) Quando gbak tenta di accedere al file senza il permesso di farlo, ad esempio, il file ha un proprietario diverso dall'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

7) Tenta di utilizzare un output dettagliato

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

8) Tentare di eseguire il backup con Service Manager sul server remoto con il verbose abilitato e l'archiviazione nel file di registro.

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

9) Errore nel ripristino del backup in un passaggio quando il backup non riesce per qualche motivo:

gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors

10) Se stai tentando 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

11) Il backup di un file di database danneggiato con la pagina sbagliata riporterà il seguente errore (il numero e il file di database saranno diversi, 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