Переход с 2.0 на 2.1

View: New views
3 Messages — Rating Filter:   Alert me  

Переход с 2.0 на 2.1

by Alexandr N Zamaraev :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Выполняю перевод баз с 2.0 на 2.1
При выполнении
select * from rdb$fix_metadata('WIN1251');
Ошибочка:
RDB$TRIGGERS
               RDB$TRIGGER_SOURCE
                             CHECK_15
                                           <null>

Statement failed, SQLCODE = 100
attempted retrieval of more segments than exist
-action cancelled by trigger (1) to preserve data integrity
-Cannot update trigger used by a CHECK Constraint
-At procedure 'RDB$FIX_METADATA'

Открыл исходный вариант базы, оказалась, что CHECK_15, это триггер
созданный на основе ограничения CHK_LAND_RIGHTS_BUS_PARTS

Возникает ряд вопросов:
1) С какого перепуга скрипт вообще дёргает этот триггер?
2) Откуда там может быть ошибка - вроде букав русских нет и синтаксис
корректный.
3) Что делать дальше? :-)

Вот запись из RDB$TRIGGERS
INSERT INTO RDB$TRIGGERS (
   RDB$TRIGGER_NAME, RDB$RELATION_NAME, RDB$TRIGGER_SEQUENCE,
RDB$TRIGGER_TYPE, RDB$TRIGGER_SOURCE, RDB$TRIGGER_BLR, RDB$DESCRIPTION,
RDB$TRIGGER_INACTIVE, RDB$SYSTEM_FLAG, RDB$FLAGS
) VALUES (
   'CHECK_15', 'LAND_RIGHTS_BUS', 0, 1, NULL, NULL, NULL, 0, 3, 1
);

Ограничение создавалось в составе скрипта обновления базы (сервер 2.0.4):
create domain D_PARTS as INTEGER CHECK (value > 0);
alter table LAND_RIGHTS_BUS add PART_DIVIDEND D_PARTS;
alter table LAND_RIGHTS_BUS add PART_DIVISOR D_PARTS;
ALTER TABLE LAND_RIGHTS_BUS ADD CONSTRAINT CHK_LAND_RIGHTS_BUS_PARTS
check  (PART_DIVIDEND <= PART_DIVISOR);
for i, fld in enumerate(table.fields):
   alter table LAND_RIGHTS_BUS alter fld position i
comment on domain D_PARTS is '...';
comment on column LAND_RIGHTS_BUS.PART_DIVIDEND is '';
comment on column LAND_RIGHTS_BUS.PART_DIVISOR is '';
commit;

--
Александр Замараев


Re: Переход с 2.0 на 2.1

by Alexandr N Zamaraev :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Да, забыл упомянуть, что 3 базы до этой сконвертировались успешно.
По идее, они отличаются только данными, а методанные я раньше
синхронизировал с помощью DBComparer-а, а потом перешел на обновление
скриптами.

И ещё.
Было бы неполхо, если бы rdb$fix_metadata сохраняла бы какие объекты
она уже успешно обработала...
Иначе оченна неудобно работать при появлении ошибок.

Re: Переход с 2.0 на 2.1

by Alexandr N Zamaraev :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Да, сервер 2.1.1.17910-0 SS
Запущен сервисом.
Предидуший 2.0.4.13130 SS

OS Win XP Home Ru + sp3