pythonjsonfirebirdfirebird2.5

How to fix error "The system cannot find the file specified." when trying to access a Firebird database


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.


Solution

  • 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.