Oracle 10 не перестает удивлять. Я так и не понял как можно было загрузить дамп в котором в дочерней таблице были references на несуществующие записи в master таблице, при том что после загрузки данных он спокойно создал и соотвествующие constraints и индексы.
Deferrable constraints нигде нет. Да и не пользовали никогда. Вообщем – случилось и случилось.
Пришлось написать скрипт который ловит такие записи. Что с ними делать потом решать Вам. Все результаты сохраняются в таблице Exceptions.
DECLARE QuantityTemp NUMBER(23); BEGIN BEGIN EXECUTE IMMEDIATE 'DROP TABLE EXCEPTIONS CASCADE CONSTRAINTS'; EXCEPTION WHEN OTHERS THEN NULL; END; BEGIN EXECUTE IMMEDIATE 'create table exceptions(row_id rowid, owner varchar2(30), table_name varchar2(30), constraint varchar2(30))'; EXCEPTION WHEN OTHERS THEN NULL; END; FOR X IN ( SELECT Constraint_name, TABLE_NAME FROM user_constraints ) LOOP EXECUTE IMMEDIATE 'DELETE FROM Exceptions'; BEGIN EXECUTE IMMEDIATE 'ALTER TABLE ' || x.TABLE_NAME || ' MODIFY CONSTRAINT ' || x.Constraint_name || ' VALIDATE EXCEPTIONS INTO EXCEPTIONS '; EXCEPTION WHEN OTHERS THEN NULL; END; EXECUTE IMMEDIATE 'SELECT Count(*) FROM Exceptions ' INTO quantityTemp; IF QuantityTemp <> 0 THEN dbms_output.put_line('Table ' || x.TABLE_NAME || ' CONSTRAINT: ' || x.Constraint_name || ' HAVE ' || QuantityTemp || ' problems. '); END IF; END LOOP; END;