|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.09.2009, 13:10 | #1 |
Регистрация: 07.12.2006
Сообщений: 4
|
Невосстанавливаемый backup
Доброго времени суток господа!
Есть действующая рабочая база данных Firebird (DB.FDB). Её backup проходит успешно, а вот при restore базы данных DB.gbk возникает ошибка: gbak: activating and creating deferred index PK_AI_RAIDERS gbak:cannot commit index PK_AI_RAIDERS gbak: ERROR:attempt to store duplicate value (visible to active transactions) in unique index "PK_AI_RAIDERS" gbak: ERROR:action cancelled by trigger (3) to preserve data integrity gbak: ERROR: Cannot deactivate index used by a PRIMARY/UNIQUE constraint gbak:Exiting before completion due to errors Как видно БД не восстанавливается. Подскажите пожалуйсто, в чём дело и как можно исправить эту ошибку? P.S. А иначе мне конец... |
10.09.2009, 13:22 | #2 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
а в рабочей базе этот констрейнт/уник.индекс активирован?
судя по всему нарушена уникальность значений можно проверить наличие неуникальных значений, сделав запрос по табличке Код:
Последний раз редактировалось soleil@mmc; 10.09.2009 в 13:26. |
10.09.2009, 13:37 | #3 |
Регистрация: 07.12.2006
Сообщений: 4
|
Сделал указанный запрос и получил:
POLNUM | CBRIDNUM | Count(*) 1 X1 Y1 2 2 X2 Y2 2 3 X3 Y3 2 . N Xn Yn 2 - что это значит? А по поводу структурки, так она такова (Выдержки из DDL): /*********************************** *********************************** ********/ /*** Primary Keys ***/ /*********************************** *********************************** ********/ ALTER TABLE AI_RAIDERS ADD CONSTRAINT PK_AI_RAIDERS PRIMARY KEY (POLNUM, CBRIDNUM); /*********************************** *********************************** ********/ /*** Indices ***/ /*********************************** *********************************** ********/ CREATE INDEX AI_RAIDERS_IDX1 ON AI_RAIDERS (CBPLAN, BMODE, SUBDTE); CREATE INDEX AI_RAIDERS_IDX2 ON AI_RAIDERS (CBPLAN); CREATE INDEX AI_RAIDERS_IDX3 ON AI_RAIDERS (BMODE); CREATE INDEX AI_RAIDERS_IDX4 ON AI_RAIDERS (SUBDTE); CREATE INDEX AI_RAIDERS_IDX5 ON AI_RAIDERS (CBSTATUS); CREATE INDEX AI_RAIDERS_IDX6 ON AI_RAIDERS (POLNUM); Какие могут быть выводы? |
10.09.2009, 13:45 | #4 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Судя по:
могу предположить, что индекс не отключается, т.к. является PK таблицы. Выход - убить индекс вообще, после чего восстановить, либо восстанавливать базу перезаписью.
Познавая других, мы познаем себя.
С'est la vie... |
10.09.2009, 13:51 | #5 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
селект вернул непустой набор данных
значит есть дубли при имеющемся ограничении по праймари не иметь этих дублей если на рабочей БД этот pk не удален, то встает вопрос "а как собсна такое возможно?" полистать данные и понять - нужны кому-то эти дубли? скорее всего нет - и тогда удалить лишние либо дропнуть констрейнт PK_AI_RAIDERS и сделать бекап/рестор, а потом уже на восстановленной БД убить дубли и пересоздать PK_AI_RAIDERS прямой путь остаться без БД вообще |
10.09.2009, 14:25 | #6 |
Регистрация: 07.12.2006
Сообщений: 4
|
Большое спасибо soleil@mmc !!! У меня есть 2 копии БД(разные периоды) одна бэкапится и потом ресторится (более ранняя), а другая бекапиться и потом не ресториться (более поздняя). Так вот В первом случае указанный SELECT был пустой, а во втором случае уже не пустой! Залез руками в таблицу - данные действительно задвоены!!! , - придётся убирать руками. Но влюбом случае, корень проблемы теперь ясен, спасибо soleil@mmc-у и форуму, в интернете описания проблемы почти нет!...
|