hsqldb version 1.7.0 Database Files and Recovery
The Standalone and Client/Server modes will in most cases use files to store
all data to disk in a persistent and safe way. This document describes
the meaning of the files and the mechanisms.
A database named 'test' is used in this description. The database files will
be 'test.script', 'test.properties', 'test.data' and 'test.backup'.
Database Files
- test.properties
Contains the entry 'modified'. If the entry 'modified' is set to 'yes' then
the database is either running or was not closed correctly (because the close
algorithm sets 'modified' to 'no' at the end).
- test.script
This file contains the SQL statements that makes up the database so far (something
like the 'Redo-log' or 'Transaction-log', but just text)
- test.data
This file contains the (binary) data records for CACHED tables only
- test.backup
This is compressed file that contains the backup of the old test.data file.
Mechanisms
Database is opened
- Check if test.properties file is in use (algorithm: try to
delete and re-create; if it works then the database it is not in use).
- Check in the test.properties file if 'modified=yes'. This
would mean last time it was not closed correctly, and thus the test.data file
may be corrupted. In this case the 'Repair' algorithm is executed (see below)
otherwise
- If in the test.properties file 'modified=yes-new-files', then
the (old) test.backup and test.script files are deleted and the new test.script.new
file is renamed to test.script.
- Open the test.script file and execute the commands
- Append commands to the test.script file
Database is aborted
This may happen by sudden power off, Ctrl+C in Windows, but may be simulated
using the command SHUTDOWN IMMEDIATELY.
- All files are closed; but the test.script file contains all
information to re-do all changes.
- The test.data file may be corrupt because the cache in memory
was not written completely.
- The test.properties still containes 'modified=yes'
- All files are closed (maybe by the operating system)
Database is closed correctly
This may be done using the command SHUTDOWN, in the Standalone version using
Connection.close()
- The test.data file is written completely
- The test.backup.new is created (containing the compressed
test.data file)
- The file test.script.new is created using the information
in the database (and thus shrinks because no 'update' and 'delete' statements;
only simple 'inserts').
- The entry 'modified' is set to 'yes-new-files'
- The file test.script is deleted
- The file test.script.new is renamed to test.script
- The file test.backup is deleted
- The file test.backup.new is renamed to test.backup
- The entry 'modified' is set to 'no'
Repair
The current test.data file is corrupt, but with the old test.data (from the
test.backup file) and the current test.script, the database can be made up-to-date:
- Restore the old test.data file from the backup (uncompress
the test.backup)
- Execute all commands in the test.script file.
- Close the database correctly (including a backup).