При обновлении с версии 8 до версии 9.1 Smeta.ru на Windows 7 произошел сбой обновления базы. Попытка восстановления из старых бэкапов не дала результатов - все бэкапы оказались неполными (при размере базы около 12 ГБ файл gbk около 890 Mb).
К сожалению физической копии базы перед обновлением не делалось.
При валидации базы получается 3 record level errors, 2 index page errors, 755 database page errors (общее количество старниц 3 224 919)
Firebird.log прикрепить не могу, вот что касается ошибок:
RED-ПК Tue Nov 15 00:34:01 2016
Database: Q:\DATASD123.SSD
Chain for record 31259288 is broken in table A_SMETA (152)
RED-ПК Tue Nov 15 00:34:01 2016
Database: Q:\DATASD123.SSD
Chain for record 31259313 is broken in table A_SMETA (152)
RED-ПК Tue Nov 15 00:35:01 2016
Database: Q:\DATASD123.SSD
Relation has -2 orphan backversions (694763 in use) in table A_SMETA (152)
RED-ПК Tue Nov 15 00:54:20 2016
Database: Q:\DATASD123.SSD
Index 1 is corrupt on page 104093 level 1. File: ..\..\..\src\jrd\validation.cpp, line: 1667
in table A_SMETA_VIEW_NUM (400)
RED-ПК Tue Nov 15 00:54:20 2016
Database: Q:\DATASD123.SSD
Index 1 is corrupt on page 104093 level 1. File: ..\..\..\src\jrd\validation.cpp, line: 1657
in table A_SMETA_VIEW_NUM (400)
Что делал:
gfix -v -full
gfix -mend -full -ignore
gbak -b -v -ig -g
gbak -c -i
При таком восстановлении вылезли ошибки пори востановлении индексов:
cannot comit index FK_A_SMETA_CENLVL_ID
ERROR: violation of FOREIGN KEY constraint "FK_A_SMETA_CENLVL_ID" on table "A_SMETA_CENLVL"
ERROR: Foreign key reference target does not exist
cannot comit index FK_A_SMETA_INDLVL_ID
ERROR: violation of FOREIGN KEY constraint "FK_A_SMETA_INDLVL_ID" on table "A_SMETA_INDLVL"
ERROR: Foreign key reference target does not exist
Открыл таблицу в IBExpert и провел запросы:
select * from a_smeta_cenlvl where not ID in (select id from A_Smeta)
delete from a_smeta_cenlvl where not ID in (select id from A_Smeta)
select * from a_smeta_indlvl where not ID in (select id from A_Smeta)
delete from a_smeta_indlvl where not ID in (select id from A_Smeta)
Ошибка при восстановлении исчезла. Однако бэкап не окрывается с ошибкой:
GSCODE = 335544788
Исключительная ситуация EIBInterBaseError в модуле SmetaRu.exe. Unable to perform operation. You must be either SYSDBA or owner of the database.
Проблема в том, что IBBackup_Configurator при создании бэкапа все равно создает битый файл gbk (примерно 890 Мб). Восстановление из созданного gbak архива тоже не проходит.
Возможно ли перенести данные по сметам в новую рабочую базу данных?