L'ABC dell'informatica ci ha insegnato che non esiste un solo tipo di file system. Infatti, oltre al file system utilizzato dal sistema operativo esiste anche il file system del DBMS, il network file system (ad esempio NFS e Microsoft DFS) e così via.
Bene, solitamente quando si cancellano N record da una o più tabelle del DB, il DBMS a cui l'istanza afferisce non rilascerà automaticamente al sistema operativo lo spazio appena liberato. Questo significa che il file che identifica il DB manterrà le propre dimensioni originarie, nonostante le operazioni di rimozione dei record.
Per quanto riguarda Firebird, l'unico modo per effettuare lo shrinking del database (ovvero la sua contrazione in termini di spazio occupato su disco) è eseguire il backup di quest'ultimo e successivamente ripristinarlo.
Fortunatamente, Firebird ci mette a disposizione un valido strumento per tale scopo: gbak.
Per default tale applicativo effettuerà anche la garbage collection dei record duplicati (generati dai rollback delle transazioni), impiegando un certo lasso di tempo (in quanto trattasi di un'operazione abbastanza onerosa in termini computazionali). Per fare in modo che gbak non proceda con la garbage collection occorre usare la flag -G. Ad esempio:
server ~ # gbak -B nomedatabase.fdb nomedatabase.fbk
-v -y backup.log
eseguirà il backup del nostro DB, salvando le informazioni relative a tale operazione (-v -y) nel file backup.log, mentre:
server ~ # gbak -B -G nomedatabase.fdb nomedatabase.fbk
-v -y backup.log
eviterà di eseguire la garbage collection (che, solitamente, viene messa in atto automaticamente ad intervalli di tempo regolari, secondo quanto definito nel file di configurazione di Firebird).
Inoltre, è possibile effettuare la garbage collection in un secondo momento, utilizzando gfix:
server ~ # gfix -s nomedatabase.fdb
Una volta creato il file di backup (con estensione *.fbk), sarà necessario ripristinarlo. Il comando da utilizzare è il seguente:
server ~ # gbak -C nomedatabase.fbk nomedatabase.fdb
-v -y restore.log
Assegnamo i giusti permessi al file appena creato:
server ~ # chown firebird:firebird nomedatabase.fdb
riavviamo Firebird:
server ~ # /etc/init.d/firebird restart
ed abbiamo finito.
Alla prossima.