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?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top