les contraintes de table drop sans suppression de tables - Oracle
-
02-10-2019 - |
Question
Je fais une migration en masse d'une grande base de données Oracle. La première étape de ce changement de nom implique une charge entière des tables comme une préparation pour les laisser tomber plus tard (mais je dois garder les données autour d'eux pour l'instant). Toutes les clés étrangères sur les doivent être abandonnées - ils ne doivent pas être reliés au reste de la base de données du tout. Si je les laisser tomber maintenant je pouvais CASCADE CONTRAINTES, mais il suffit de renommer les contraintes modifie.
Est-il possible que je peux laisser tomber toutes les contraintes qui CASCADE CONSTRAINTS diminueraient sans laisser tomber la table elle-même?
La solution
Vous pouvez le faire avec SQL dynamique et le dictionnaire de données:
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;
Si les tableaux appartiennent à plus d'un utilisateur, vous devrez conduire de DBA_CONSTRAINTS et inclure dans la projection PROPRIÉTAIRE et l'instruction exécutée. Si vous voulez toucher moins que toutes les tables, je crains que vous aurez besoin de spécifier la liste dans la clause WHERE, à moins qu'il ya un certain modèle à leurs noms.
Autres conseils
Vous pouvez désactiver / réactiver les contraintes sans les laisser tomber. Jetez un oeil à cet article .