Oracle - Ограничения сброса стола без падения таблиц
-
02-10-2019 - |
Вопрос
Я делаю какую-то объемную миграцию большой базы данных Oracle. Первый шаг этого включает в себя переименование целой нагрузки таблиц в качестве препарата для снижения их позже (но мне нужно сохранить данные в них в настоящее время). Любые зарубежные ключевые ограничения на них должны быть сброшены - они не должны быть связаны с остальной базой данных вообще. Если бы я бросил их сейчас, я мог бы каскадные ограничения, но переименовать просто изменяет ограничения.
Есть ли способ, которым я могу бросить все ограничения, которые каскадные ограничения упадут, не бросая саму стол?
Решение
Вы можете сделать это с Dynamic SQL и словарь данных:
begin
for r in ( select table_name, constraint_name
from user_constraints
where constraint_type = 'R' )
loop
execute immediate 'alter table '|| r.table_name
||' drop constraint '|| r.constraint_name;
end loop;
end;
Если таблицы принадлежат более чем одному пользователю, вам нужно будет ездить из DBA_CONSTRAINTS и включить владельца в проекцию и выполненное утверждение. Если вы хотите коснуться меньшего, чем все таблицы, которые я боюсь, вам нужно указать список в пункте «Где», если нет какого-либо шаблона на их имена.
Другие советы
Вы можете отключить / повторно включить ограничения, не бросая их. Взгляни на Эта статья.