ORACLE 10g: как импортировать без ошибки ограничения внешнего ключа? - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть дамп данных, и я хочу импортировать его в другую БД (Oracle 10g). В целевой базе данных уже есть таблицы (без данных) и некоторые ограничения внешнего ключа. Я буду импортировать данные по таблицам, чтобы избежать ошибок ограничений. Если кто-нибудь знает более простые способы, пожалуйста, научите меня? (Инструмент импорта Oracle не имеет функций для автоматического распознавания отношений между таблицами, не так ли?)

Ответы [ 2 ]

5 голосов
/ 29 февраля 2012

Сначала вы можете отключить все внешние ключи:

begin
  for cnst in (SELECT constraint_name, table_name FROM user_constraints WHERE constraint_type ='R') loop
    execute immediate 'alter table '|| cnst.table_name||' disable constraint ' || cnst.constraint_name ;
  end loop;
end;

После загрузки данных сделайте то же самое, чтобы включить их обратно (просто измените команду alter table на enable вместо disable

Но это рискованно, потому что, если данные не будут соответствовать вашим ограничениям - у вас будут проблемы ...

1 голос
/ 29 февраля 2012

Предполагая, что у вас есть экспорт на уровне схемы, исходная схема имела те же ограничения внешнего ключа, и все ограничения внешнего ключа находятся между таблицами в одной схеме, утилита импорта должна автоматически позаботиться об ограничениях внешнего ключа. Вам не нужно ничего делать для этого (хотя, конечно, вам придется игнорировать ошибки при импорте, потому что он попытается создать таблицы и получить ошибку, что они уже существуют).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...