Неввостановимый backup из-за UDF

Ремонт и восстановление баз данных InterBase, Firebird, Yaffil

Модераторы: kdv, Alexey Kovyazin

Ответить
Yushinin
Сообщения: 19
Зарегистрирован: 10 июл 2005, 16:23

Неввостановимый backup из-за UDF

Сообщение Yushinin » 27 мар 2007, 13:05

Здравствуй, All.

В свое время заметил такую особенность Interbase (Firebird):
1. Создадим таблицу, использующую в вычислимых полях UDF:
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80),
SMALLINT,
SMALLINT
RETURNS CSTRING(80) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'

CREATE TABLE PERSON (
ID INTEGER NOT NULL,
F VARCHAR(30),
I VARCHAR(30),
O VARCHAR(30),
FIO COMPUTED BY ((f||' '||substr(i,1,1)||'. '||substr(o,1,1)||'.'))
);

2. Сделаем backup базы и все пройдет хорошо.
3. Пытаемся восстановить базу и получаем следущее:

IBE: Starting restore. Current time: 12:15:32
gbak:открыт файл D:\Projects\FB_test\fb_test.fbk
gbak:переносимая копия -- данные в формате XDR
gbak:\t\tрезервный файл сжат
gbak:создана БД D:\Projects\FB_test\FB_TEST_.FDB, размер страницы 16384 байтов
gbak:начата транзакция
gbak:восстанавливается домен RDB$1
gbak:восстанавливается домен RDB$2
gbak:восстанавливается домен RDB$3
gbak:восстанавливается домен RDB$4
gbak:восстанавливается домен RDB$6
gbak:восстанавливается домен RDB$7
gbak:восстанавливается таблица PERSON
gbak: восстанавливается столбец O
gbak: восстанавливается столбец I
gbak: восстанавливается столбец F
gbak: восстанавливается столбец FIO
gbak: восстанавливается столбец ID
gbak:подтверждаются метаданные таблицы PERSON
gbak: ошибка подтверждения метаданных таблицы PERSON
gbak:восстанавливается таблица V_PERSON
gbak: восстанавливается столбец O
gbak: восстанавливается столбец I
gbak: восстанавливается столбец F
gbak: восстанавливается столбец FIO
gbak: восстанавливается столбец ID
gbak:подтверждаются метаданные таблицы V_PERSON
gbak:восстанавливается функция SUBSTR
gbak: восстанавливается аргумент для функции SUBSTR
gbak: восстанавливается аргумент для функции SUBSTR
gbak: восстанавливается аргумент для функции SUBSTR
IBE: Неудачный запуск из-за системной ошибки, помешавшей выполнению следующих команд.
действие отменено триггером (0) для сохранения целостности данных.
не могу найти таблицу/процедуру для GRANT.
IBE: Restore completed. Current time: 12:15:33. Elapsed time: 00:00:00

Сообщения из русифицированного firebird.msg, но сути дела это не меняет.

Из это я сделал вывод о том, что не удается использовать вычисляемые поля, использующие UDF, непосредственно в таблице.

Конечно, в качестве решения может быть предложено создать VIEW и т.д. Это я сделал, конечно, но вопрос остался:
Можно ли управлять порядком восстановления объектов базы данных? Хотелось бы сначала восстановить все UDF (так как они в принципе независимы), а только потом - таблицы.
Вот бы было счастье :)

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 27 мар 2007, 13:28

Управлять порядком восстановления невозможно: он определяется порядком записей в файле бэкапа (который читается последовательно). Изменить порядок бэкапа можно покопавшись в исходниках.

Yushinin
Сообщения: 19
Зарегистрирован: 10 июл 2005, 16:23

Сообщение Yushinin » 27 мар 2007, 13:40

Dimitry Sibiryakov писал(а):Управлять порядком восстановления невозможно: он определяется порядком записей в файле бэкапа (который читается последовательно). Изменить порядок бэкапа можно покопавшись в исходниках.
Понятно.
Ну насчет исходников сервера, это, наверное, к его авторам.
Не могу же я заказчикам устанавливать свою сборку сервера!
А вот есть ли возможность управлять порядком backup программно из клиенсткого приложения?
Чтобы потом получить восстановимую резервную копию: сначала UDF, затем - все остальное.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 27 мар 2007, 13:48

Нет.
На эту тему есть CORE-949, но что-то я на текущей 2.1 не могу его воспроизвести. UDF все еще восстанавливаются после таблиц, но ошибки это не вызывает.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 27 мар 2007, 14:31

Ага, проверка отложена до коммита... Но -o это дело суммонит обратно... Закоммитил грязный фикс в голову.

Ответить