You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1) run following .sql (change path and name of .fdb for your settings):
set list on;
shell del C:\\MIX\\firebird\\QA\\fbt\-repo\\tmp\\c5501\.fdb 2\>nul;
create database 'localhost:C:\\MIX\\firebird\\QA\\fbt\-repo\\tmp\\c5501\.fdb'; \-\- page\_size 8192;
alter database drop linger;
commit;
create table test\(s varchar\(1000\)\);
commit;
set count on;
insert into test\(s\)
select rpad\( '',1000, uuid\_to\_char\(gen\_uuid\(\)\) \)
from rdb$types
rows 100;
set count off;
commit;
set echo on;
select rdb$linger from rdb$database;
show table test;
select count\(\*\) from test;
===
2) open .fdb in any hex-editor, goto offset = 0x16e000 and ensure that following 16 bytes will be:
05 02 00 00 01 00 00 00 00 00 00 00 b7 00 00 00
(see attach, file "c5501-page_183_healthy_header.png")
3) replace these 16 bytes with:
ff aa cc ee bb 00 00 cc dd ee aa dd cc 00 dd ee
(see attach, file "c5501-page_183_broken_header.png")
4) open batch file "check-db.bat" (see attach) and change settings:
set fbc=C:\MIX\firebird\fb30
set host=localhost
set port=3333
set dbnm=C:\MIX\firebird\QA\fbt-repo\tmp\C5501.FDB
set ISC_USER=SYSDBA
set ISC_PASSWORD=masterkey
5) run "check-db.bat" with argument 0, i.e. type:
check-db.bat 0
This batch being run with argument = 0 will try to launch online validation two times.
Copy its log ("check-db.log") to some other name, say "check-db-online-val.log"
6) run "check-db.bat" with argument 1, i.e. type:
check-db.bat 1
With arg. = 1 this batch will try to launch gfix -v -full, also two times.
Second 'gfix' will fail with error:
bad parameters on attach or create database
-secondary server attachments cannot validate databases
lock-print utility after 1st gfix will show:
LOCK_HEADER BLOCK
...
Owners (4): forward: 187624, backward: 195776 <<<< ONE USER CONNECTION DOES EXIST!
...
Query to MON$ATTACHMENTS show that there is one connection from gfix after it was ran first time and finished its job:
Submitted by: @pavel-zotov
Attachments:
broken-fdb-and-logs-of_gfix_v_full___vs___online_validation.7z
1) run following .sql (change path and name of .fdb for your settings):
===
2) open .fdb in any hex-editor, goto offset = 0x16e000 and ensure that following 16 bytes will be:
05 02 00 00 01 00 00 00 00 00 00 00 b7 00 00 00
(see attach, file "c5501-page_183_healthy_header.png")
3) replace these 16 bytes with:
ff aa cc ee bb 00 00 cc dd ee aa dd cc 00 dd ee
(see attach, file "c5501-page_183_broken_header.png")
4) open batch file "check-db.bat" (see attach) and change settings:
set fbc=C:\MIX\firebird\fb30
set host=localhost
set port=3333
set dbnm=C:\MIX\firebird\QA\fbt-repo\tmp\C5501.FDB
set ISC_USER=SYSDBA
set ISC_PASSWORD=masterkey
5) run "check-db.bat" with argument 0, i.e. type:
check-db.bat 0
This batch being run with argument = 0 will try to launch online validation two times.
Copy its log ("check-db.log") to some other name, say "check-db-online-val.log"
6) run "check-db.bat" with argument 1, i.e. type:
check-db.bat 1
With arg. = 1 this batch will try to launch gfix -v -full, also two times.
Second 'gfix' will fail with error:
bad parameters on attach or create database
-secondary server attachments cannot validate databases
lock-print utility after 1st gfix will show:
LOCK_HEADER BLOCK
...
Owners (4): forward: 187624, backward: 195776 <<<< ONE USER CONNECTION DOES EXIST!
...
Query to MON$ATTACHMENTS show that there is one connection from gfix after it was ran first time and finished its job:
...
MON$STATE 0
MON$ATTACHMENT_ID 11
MON$REMOTE_PROCESS C:\MIX\firebird\fb30\gfix.exe
MON$REMOTE_PROTOCOL TCPv4
MON$USER SYSDBA
MON$SERVER_PID 1828
MON$REMOTE_VERSION P14
Comparison of firebird.log with results of gfix -vs- online validation shows that gfix __did_ fixed one page while online validation not:
1) firebird.log when GFIX was ran for diagnostics:
CSPROG Thu Mar 16 16:05:50 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Error: Page 183 wrong type (expected data encountered unknown (255))
CSPROG Thu Mar 16 16:05:50 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Warning: Pointer page 179 {sequence 0} bits {0x01 full} are not consistent with data page 183 {sequence 0} state {0x05 ull, swept} in table TEST (128)
CSPROG Thu Mar 16 16:05:50 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Warning: Page 183 is an orphan
CSPROG Thu Mar 16 16:05:50 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Validation finished: 1 errors, 2 warnings, 1 fixed <<<<<<<<<<<<<<< "1 FIXED". WHAT exactly was fixed by GFIX -V -FULL?
2) firebird.log when FBSVCMGR ACTION_VALIDATE was ran for diagnostics:
CSPROG Thu Mar 16 16:04:05 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Error: Page 183 wrong type (expected data encountered unknown (255))
CSPROG Thu Mar 16 16:04:05 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Warning: Pointer page 179 {sequence 0} bits {0x01 full} are not consistent with data page 183 {sequence 0} state {0x05 full, swept} in table TEST (128)
CSPROG Thu Mar 16 16:04:05 2017
Database: C:\MIX\FIREBIRD\QA\FBT-REPO\TMP\C5501.FDB
Validation finished: 1 errors, 1 warnings, 0 fixed
Checked on WI-V3.0.2.32695, 32 bit, OS = Win XP.
The text was updated successfully, but these errors were encountered: