Восстановление базы данных Firebird 2.5 с использованием gbak и fix_fss_data возвращает неверную строку

У меня старая база данных, и я хочу преобразовать ее в Firebird 2.5. Проблема возникает при восстановлении данных в таблицах, содержащих текстовые поля больших двоичных объектов, с хорошо известной проблемой gbak: ОШИБКА: неверно сформированная строка gbak: обнаружены недопустимые данные

Выполненные шаги:

  1. gfix -user SYSDBA -password masterkey f: \ dbb.db -shut -force 0
  2. gfix -v -full -user SYSDBA -password masterkey f: \ dbb.db
  3. gbak -v -t -g -ig -user SYSDBA -Y F: \ backup.log -password masterkey f: \ dbb.db F: \ dbb1.db
  4. gbak -r -v -o -p 16384 -Y F: \ log.txt -user SYSDBA -password masterkey f: \ dbb1.db f: \ new.db -fix_fss_data win1251 -rep

замена набора символов на win1252, utf8 или unicode_fss не решает проблемы.

Я также попытался перенести данные с помощью InterBase Data Pump версии 3.4.

Шаги:

  1. резервное копирование метатаблицы
  2. восстановить метатаблицу в новой базе данных
  3. переносить данные с помощью InterBase Data Pump

Обнаружены ошибки Неправильная строка.

Все таблицы, в которых возникает ошибка, имеют поле типа BLOB SUB_TYPE 1 SEGMENT SIZE 80

Подозреваю, что изначально в базе была кодировка WIN1252. После этого кто-то изменил кодировку на UTF8 и изменил определение всех полей для кодировки и сопоставления с WIN1252 на UTF8. В противном случае я не понимаю, почему я получаю эти искаженные строковые ошибки. Кроме того, я понял, что эта проблема характерна для миграций с FireBird 2.0 на FireBird 2.5.

Кто-нибудь знает, как это решить?


person RBA    schedule 27.11.2012    source источник
comment
Почему бы не использовать бесплатную утилиту FDBCONVERT gsbelarus.com/gs/fdbconvert/index.html?   -  person Andrej Kirejeŭ    schedule 28.11.2012
comment
с FDBConvert - Библиотека времени выполнения Microsoft Visual C ++ --------------------------- Ошибка выполнения! Программа: F: \ a \ FDBConvertPortable \ FDBConvert.exe R6025 - вызов чистой виртуальной функции 10:44:57 AM: Во время восстановления базы данных появилось сообщение: Неверная строка Обнаружены недопустимые данные. Используйте параметр -FIX_FSS_DATA   -  person RBA    schedule 28.11.2012


Ответы (3)


Ошибка искаженной строки может исходить из данных, и вы можете исправить это с помощью переключателя -fix_fss_d, но она также может исходить из метаданных, и вы должны использовать переключатель -fix_fss_m

-FIX_FSS_D [ATA]

Этот переключатель заставляет gbak исправлять искаженные символьные данные UNICODE_FSS во время восстановления.

Этот и последующие переключатели не требуются при нормальных обстоятельствах. Однако, если операция восстановления завершается неудачно с ошибкой искаженной строки, вывод сообщения от gbak будет направлять пользователя к одному или обоим из этих переключателей, чтобы исправить искаженные данные UNICODE_FSS или метаданные в зависимости от ситуации.

-FIX_FSS_M [ETADATA]

Этот переключатель заставляет gbak исправлять искаженные метаданные UNICODE_FSS во время восстановления.

Этот переключатель, как и предыдущий, не требуется при нормальных обстоятельствах. Однако, если операция восстановления завершается неудачно с ошибкой искаженной строки, вывод сообщения от gbak будет направлять пользователя к одному или обоим из этих переключателей, чтобы исправить искаженные данные UNICODE_FSS или метаданные в зависимости от ситуации.

ссылка на утилиту firebird gbak < / а>

person Hugues Van Landeghem    schedule 27.11.2012
comment
даже с исправлением метаданных восстановление не восстанавливает все данные в таблицах. +1, спасибо - person RBA; 28.11.2012

хоть это и глупо звучит, я исправил вот так:

резервное копирование метатаблицы
создание восстановления в новый файл базы данных
извлечение данных из старой таблицы с помощью IBExpert в сценарий
запуск сценария для добавления данных в новую базу данных

Ни одна из комбинаций -fix_fss_D или fix_fss_m с разными кодировками не импортировала все данные в новую базу данных. Пробовал все бесплатные и условно-бесплатные инструменты, но безрезультатно.

person RBA    schedule 28.11.2012

В конце используйте -fix_fss_metadata WIN1252. Это поможет мне это исправить.

Например:

gbak -c -r -v -user SYSDBA -password masterkey C:\backup\Example.bkp C:\TEST7.fdb -fix_fss_metadata WIN1252

person ChernyEV    schedule 05.08.2019