My approach so far has been very straightforward but I'm struggling to get the fdb file parsed and connected.
I downloaded the correct version of Firebird (2.5) for the file I have. I attempted to do this
con = fdb.connect(dsn='202204.fdb', user='sysdba', password='masterkey')
This results in the following error:
202204.FDB.delta"\n- Error while trying to open file\n- The system cannot find the file specified. ', -902, 335544344)
What am I doing wrong? Am I missing this delta file? Is there a better approach for this?
Note: I have no experience working with Firebird.
CodePudding user response:
The problem is that the database file you have was copied while the database was in backup-mode (or "stalled"). In this mode, the main database file is not updated and updates are written into a delta file. This mode is entered when the command ALTER DATABASE BEGIN BACKUP
is executed (or the nbackup -lock <database>
command).
In a normal situation, this delta file is reintegrated into the database once the ALTER DATABASE END BACKUP
is executed (or the nbackup -n <database>
command, or - Firebird 3.0 and higher - nbackup -unlock <database>
).
However, in your case, you only have a copy of the stalled database. To be able to use the database, you need to "fixup" the database with the command nbackup -f <database>
. nbackup
is a commandline tool included in the Firebird installation directory (in Firebird 2.5, in the bin
directory of the Firebird installation). After the fixup, the database will be identical to how it was before the backup mode was entered, any changes after that are lost in your copy.
Warning: Only perform the fixup if this is actually just a copy, otherwise you should really obtain the delta file, and use ALTER DATABASE END BACKUP
or nbackup -n <database>
to avoid loss of data. Once a database is "fixed up", it is not possible to reintegrate a delta file.
See also the Firebird nbackup tool documentation, specifically the chapter Locking and unlocking.