資料泵匯出帶有約束的表
阿新 • • 發佈:2018-11-30
近期使用資料泵匯出帶有約束的表,匯入的時候,提示了很多錯誤,一些表幾乎沒有匯入資料。
後來想了想,應該先把所有元資料匯出來,匯入元資料,然後禁用所有的約束。
或者加上引數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