tavolo vincoli goccia senza cadere tavoli - Oracle
-
02-10-2019 - |
Domanda
Sto facendo alcune migrazioni di massa di un ampio database Oracle. Il primo passo di questo comporta rinomina un intero carico di tabelle come preparazione per cadere successivamente (ma necessario per mantenere i dati nel loro intorno per ora). Eventuali vincoli di chiave esterna su di loro hanno bisogno di essere caduto - non dovrebbero essere collegati al resto del database a tutti. Se li stavano cadendo ora potevo CASCADE VINCOLI, ma rinomina semplicemente altera i vincoli.
C'è un modo per eliminare tutti i vincoli che VINCOLI CASCADE cadrebbero senza far cadere la tabella stessa?
Soluzione
E 'possibile farlo con SQL dinamico e il dizionario dei dati:
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;
Se le tabelle sono di proprietà di più di un utente che si avrà bisogno di guidare da DBA_CONSTRAINTS e comprendono PROPRIETARIO nella proiezione e l'istruzione eseguita. Se si vuole toccare meno di tutte le tabelle ho paura è necessario specificare l'elenco nella clausola WHERE, a meno che non ci sia un modello per i loro nomi.
Altri suggerimenti
È possibile disattivare / riattivare i vincoli senza farli cadere. Date un'occhiata a questo articolo .