1. 程式人生 > >資料泵匯出帶有約束的表

資料泵匯出帶有約束的表

近期使用資料泵匯出帶有約束的表,匯入的時候,提示了很多錯誤,一些表幾乎沒有匯入資料。

後來想了想,應該先把所有元資料匯出來,匯入元資料,然後禁用所有的約束。

或者加上引數CONTENT=METADATA_ONLY先匯入元資料,再禁用約束觸發器。再匯入資料。

再次匯入資料,就可以了。

這種方法也適合於全表匯出匯入的情況。

禁用約束的程式碼

select 
'alter table '||table_name||' disable constraint '|| constraint_name||';' 
from 
user_constraints 
where 
constraint_type='R' 
union
select 
'alter table '||UCA.table_name||' disable constraint '|| uca.constraint_name||';'
from user_constraints uca,
(select constraint_name
from user_constraints
where constraint_type in('P','U')) tmp
where uca.constraint_type='R'
and tmp.constraint_name=uca.constraint_name

禁用觸發器的程式碼

select 
'alter trigger '||trigger_name||' disable ;'
from 
user_triggers;

資料匯入的語句

impdp apps/xxx directory=PUMP_DIR1 dumpfile=XXX.DMP logfile=imp_meta_20181123.log 
impdp apps/xxx directory=PUMP_DIR1 dumpfile=XXX.DMP logfile=imp_data_20181123.log exclude=job TABLE_EXISTS_ACTION=append

END