impdp做資料匯入時約束和觸發器引起資料匯入後應用故障
使用資料泵匯入資料,匯入過程中沒有任何錯誤,匯入的記錄數完全正常,但應用就是無法使用,取不到資料,找了很久都沒找到原因,最後,發現是由於序列的問題引起的,發現匯出和匯入的值不一樣,通過與開發溝通才明白,因為在匯入資料時要對一些欄位定義做了修改,所以先匯入空表,然後再匯入資料的,在向表插入資料時會插入序列,而序列是由觸發器來產生的,從而導致兩邊的序列值不一致,引起記錄的值有差異,找到原因就好辦了,在匯入資料前關閉所有的約束和觸發器,匯入資料成功後,再開啟約束和觸發器,連線應用測試,一切ok.
在目標庫上建立資料泵目錄
create directory dump_dir as '/oracle/ppp';
grant read,write on directory dump_dir to user;
在源庫上匯出資料:
expdp system/oracle directory=dump_dir dumpfile=user.dmp schemas=user logfile=user.log
匯出表結構:
impdp system/oracle directory=dump_dir dumpfile=user.dmp sqlfile=user.sql logfile=userimp.log
在目標庫上建立表
SQL>@/oracle/ppp/user.sql
匯入資料前關閉約束和觸發器:
SQL>set heading off
SQL>select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints;
SQL>alter table table_name disable constraint constraint_name;
SQL>select 'alter trigger '||trigger_name||' disable;' from user_triggers;
SQL>alter trigger trigger_name disable;
匯入資料:
export ORACLE_SID=SID
$impdp system/oracle directory=dump_dir dumpfile=javaoanew.dmp table_exists_action=append logfile=javaoaimpnew.log
匯入資料後開啟約束和觸發器:
SQL>set heading off
SQL>select 'alter table '||table_name||' enable novalidate constraint '||constraint_name||';' from user_constraints;
SQL>alter table table_name enable novalidate constraint constraint_name;
SQL>select 'alter trigger '||trigger_name||' enable;' from user_triggers;
SQL>alter trigger trigger_name enable;
連線應用測試,一切OK.
在目標庫上建立資料泵目錄
create directory dump_dir as '/oracle/ppp';
grant read,write on directory dump_dir to user;
在源庫上匯出資料:
expdp system/oracle directory=dump_dir dumpfile=user.dmp schemas=user logfile=user.log
匯出表結構:
impdp system/oracle directory=dump_dir dumpfile=user.dmp sqlfile=user.sql logfile=userimp.log
在目標庫上建立表
SQL>@/oracle/ppp/user.sql
匯入資料前關閉約束和觸發器:
SQL>set heading off
SQL>select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints;
SQL>alter table table_name disable constraint constraint_name;
SQL>select 'alter trigger '||trigger_name||' disable;' from user_triggers;
SQL>alter trigger trigger_name disable;
匯入資料:
export ORACLE_SID=SID
$impdp system/oracle directory=dump_dir dumpfile=javaoanew.dmp table_exists_action=append logfile=javaoaimpnew.log
匯入資料後開啟約束和觸發器:
SQL>set heading off
SQL>select 'alter table '||table_name||' enable novalidate constraint '||constraint_name||';' from user_constraints;
SQL>alter table table_name enable novalidate constraint constraint_name;
SQL>select 'alter trigger '||trigger_name||' enable;' from user_triggers;
SQL>alter trigger trigger_name enable;
連線應用測試,一切OK.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29099879/viewspace-776421/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Impdp資料泵匯入
- 使用資料泵impdp匯入資料
- 匯入大容量資料時控制觸發器執行觸發器
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- 然後再全庫匯入排除view資料庫在impdp匯入View資料庫
- impdp匯入資料後,system 表空間整理
- IMPDP匯入遠端資料庫資料庫
- 使用EXPDP/IMPDP匯入匯出表中資料/後設資料測試
- 資料庫泵(expdp/impdp)匯入匯出流程資料庫
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- expdp impdp 資料庫匯入匯出命令詳解資料庫
- 在異機上利用dblink做impdp資料匯入
- 資料泵IMPDP 匯入工具的使用
- 【IMPDP】忽略匯入過程中違反約束的資料——DATA_OPTIONS引數
- MySQL入門--匯出和匯入資料MySql
- mysql資料庫匯入外來鍵約束問題MySql資料庫
- postgresql 資料匯入和匯出SQL
- 用impdp匯入資料的一次經歷
- Oracle 11g impdp 先資料後索引匯入方法Oracle索引
- Hive資料匯入HBase引起資料膨脹引發的思考Hive
- truncate表後impdp匯入該表時加exclude=index引數並不能排除索引資料的匯入Index索引
- oracle按使用者imp資料時觸發器和儲存過程匯入後無效Oracle觸發器儲存過程
- Oracle 19.3資料庫impdp匯入view時hang住Oracle資料庫View
- Oracle 28.6資料庫impdp匯入view時hang@11Oracle資料庫View
- 19c資料庫impdp匯入view時hang住資料庫View
- 匯入和匯出AWR的資料
- 【mysql】資料庫匯出和匯入MySql資料庫
- BCP 資料的匯入和匯出
- NDS的資料匯入和匯出
- 匯入excel 資料時間Excel
- Oracle expdp/impdp匯出匯入命令及資料庫備份Oracle資料庫
- 通過EXPDP/IMPDP匯出匯入遠端資料倒本地
- Oracle expdp/impdp匯入匯出備份資料庫指令碼Oracle資料庫指令碼
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- Notadd 應用配置資料匯入匯出設計
- 資料泵匯出匯入
- Oracle 資料匯入匯出Oracle
- mysql資料匯入匯出MySql