firebird icon indicating copy to clipboard operation
firebird copied to clipboard

Decompression overran buffer (179) while backing up a database. Firebird 5.0.3.1642

Open gsbelarus opened this issue 5 months ago • 6 comments

internal Firebird consistency check (decompression overran buffer (179), file: sqz.cpp line: 494)
gds_$receive failed
unknown ISC error 336330835

version of the Firebird:

gbak:gbak version WI-V5.0.3.1642 Firebird 5.0 9dc399f 
gbak:    Version(s) for database "" 
	Firebird/Windows/AMD/Intel/x64 (access method), version "WI-V5.0.3.1642 Firebird 5.0 9dc399f" 
	on disk structure version 13.1 
gbak:readied database  for backup 
gbak:creating file 
gbak:starting transaction 
gbak:use up to 8 parallel workers 
gbak:database has a page size of 8192 bytes. 

Allegedly, two fields were added to the table while it was being accessed by other connections. The server has a classic architecture.

@hvlad

gsbelarus avatar Jul 30 '25 10:07 gsbelarus

It’s better to return the infamous "object is in use" error than to keep the current state. We had a stressful day and night and put in enormous effort to restore the data in the production database.

Just a suggestion: if the error is caused by a mismatch between the record’s structure version number and the compressed data, and we know that multiple structure versions exist in the database, could we try each version to decompress the data?

gsbelarus avatar Jul 31 '25 07:07 gsbelarus

Why do you think that addition of fields is related with record corruption ?

It’s better to return the infamous "object is in use" error than to keep the current state. We had a stressful day and night and put in enormous effort to restore the data in the production database.

I'm sorry you under a stress, but I can't quite understand what you mean.

Just a suggestion: if the error is caused by a mismatch between the record’s structure version number and the compressed data, and we know that multiple structure versions exist in the database, could we try each version to decompress the data?

Record header contains format number thus such attempts not necessary and I doubt it can help. Or you want to say that you successfully decompressed corrupted record using another format ? Do you have copy of corrupted DB for analyze ?

PS there is an opinion that such bugcheck's should be replaced by regular error's, to not break others operations. But it is not as easy and could add some perf. penalty due to additional checks.

hvlad avatar Aug 01 '25 05:08 hvlad

Why do you think that addition of fields is related with record corruption ?

We upgraded the server in April, and it had been working without any database corruption since then. The incident occurred on July 28 and led to the corruption of records in one particular table. On that day, two fields were added to the table while it was in use.

It’s better to return the infamous "object is in use" error than to keep the current state. We had a stressful day and night and put in enormous effort to restore the data in the production database.

I'm sorry you under a stress, but I can't quite understand what you mean.

In the days of Yaffill/FB 0.9, most metadata-changing operations were prohibited while someone else was connected to the database. It was very inconvenient, but at least the database didn’t get corrupted.

Just a suggestion: if the error is caused by a mismatch between the record’s structure version number and the compressed data, and we know that multiple structure versions exist in the database, could we try each version to decompress the data?

Record header contains format number thus such attempts not necessary and I doubt it can help. Or you want to say that you successfully decompressed corrupted record using another format ? Do you have copy of corrupted DB for analyze ?

I'll check and write privately.

PS there is an opinion that such bugcheck's should be replaced by regular error's, to not break others operations. But it is not as easy and could add some perf. penalty due to additional checks.

If it helps: The corrupted table (GD_DOCUMENT) was being intensively used at the moment the two fields were added. This table is part of the Document Entity and is always referenced by another table. Only records in the GD_DOCUMENT table were corrupted. The linked table remained intact and was used as a source during the restoration process.

gsbelarus avatar Aug 01 '25 08:08 gsbelarus

Thanks, I've downloaded DB and it helps to identify the problem.

hvlad avatar Aug 12 '25 07:08 hvlad

@hvlad any updates on the issue?

gsbelarus avatar Oct 06 '25 08:10 gsbelarus

The fix is not obvious and still in development.

hvlad avatar Oct 08 '25 20:10 hvlad