Вопрос

Я делаю какую-то объемную миграцию большой базы данных 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 и включить владельца в проекцию и выполненное утверждение. Если вы хотите коснуться меньшего, чем все таблицы, которые я боюсь, вам нужно указать список в пункте «Где», если нет какого-либо шаблона на их имена.

Другие советы

Вы можете отключить / повторно включить ограничения, не бросая их. Взгляни на Эта статья.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top