海量資料遷移之sqlldr和datapump的缺點分析
在資料遷移中,sql*loader和datapump總是作為一些常用的資料遷移方案,自己在經歷了一些專案之後,優點就不說了,說點這些方案的缺點,批評不自由,則讚美無意義,所以我在提出了一些失敗錯誤的經驗後,會在下一篇中給出這些缺點的解決方案。畢竟解決問題才是最重要的。
使用sql*loader的缺點
可能存在潛在的亂碼問題,尤其是對於特定字符集的資料,因為sqlldr可以從客戶端匯出,如果客戶端的語言設定不當,匯出的檔案會有亂碼的隱患。
資料問題,這個是sql*loader使用比較頭疼的地方,因為這種載入方式老是感覺比insert的方式差一點,一旦出現錯誤,可以使用sql*loader提供的特定的介面來對檔案修改後,重新部署。
對於lob資料的使用不夠方便
如果表中含有clob,blob列,那麼使用sql*loader時比較麻煩的,儘管官方說是可以支援的,我看了下繁瑣的文件就準備放棄了。
主鍵衝突
ORA-00001: unique constraint (PRDAPPO.AR1_MEMO_PK) violated
這種錯誤很明顯是由於存在主鍵衝突的資料導致的。可能表中已經含有一部分資料,再插入一部分資料的時候,結果出現了主鍵衝突。
外來鍵資料問題/表插入資料的順序
ORA-02291: integrity constraint (PRDAPPO.CH_OBJECT_ATTRIBUTES_1FK) violated
這種問題比較糾結,主要是由於匯入表的順序不當導致的。
非空約束問題
ERROR at line 3: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-01400: cannot insert NULL into ("PRDAPPO"."CL9_CRD_MNTR_TREAT"."ACT_RSN_CODE")
這種問題比較少見,但是確實存在,如果某些欄位的約束不一致,很可能會出現這種問題。
使用Datapump的缺點
約束導致的匯入回退
ORA-31693: Table data object "PRDAPPO"."MO1_MEMO":"PMAX_AMAX_EMAX" failed to load/unload and is being skipped due to error: ORA-00001: unique constraint (PRDAPPO.MO1_MEMO_PK) violated Job "PRDAPPO"."SYS_IMPORT_FULL_01" completed with 1 error(s) at 02:34:33
使用datapump比較最怕的就是等待了個把小時,最後dump檔案報錯回退了,對於約束的問題,可以使用impdp的選項 DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS來匯入沒有問題的資料。
undo的困擾
ORA-31693: Table data object "MIG_TEST"."MO1_MEMO":"P2_A1000_E3" failed to load/unload and is being skipped due to error: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
如果表足夠大,幾十G,上百G,恰好你的undo大小也在幾十G,那麼很有可能會出現undo資源不足。這個時候你都不知道該怎麼繼續了。
資源的相互制約
有些專案中,可能同時使用sql*loader和datapump,一旦這種情況發生,sqlldr和datapump就會互相制約,儘可能多的佔用資源,對效能還是有一定的影響。
使用sql*loader的缺點
可能存在潛在的亂碼問題,尤其是對於特定字符集的資料,因為sqlldr可以從客戶端匯出,如果客戶端的語言設定不當,匯出的檔案會有亂碼的隱患。
資料問題,這個是sql*loader使用比較頭疼的地方,因為這種載入方式老是感覺比insert的方式差一點,一旦出現錯誤,可以使用sql*loader提供的特定的介面來對檔案修改後,重新部署。
對於lob資料的使用不夠方便
如果表中含有clob,blob列,那麼使用sql*loader時比較麻煩的,儘管官方說是可以支援的,我看了下繁瑣的文件就準備放棄了。
主鍵衝突
ORA-00001: unique constraint (PRDAPPO.AR1_MEMO_PK) violated
這種錯誤很明顯是由於存在主鍵衝突的資料導致的。可能表中已經含有一部分資料,再插入一部分資料的時候,結果出現了主鍵衝突。
外來鍵資料問題/表插入資料的順序
ORA-02291: integrity constraint (PRDAPPO.CH_OBJECT_ATTRIBUTES_1FK) violated
這種問題比較糾結,主要是由於匯入表的順序不當導致的。
非空約束問題
ERROR at line 3: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-01400: cannot insert NULL into ("PRDAPPO"."CL9_CRD_MNTR_TREAT"."ACT_RSN_CODE")
這種問題比較少見,但是確實存在,如果某些欄位的約束不一致,很可能會出現這種問題。
使用Datapump的缺點
約束導致的匯入回退
ORA-31693: Table data object "PRDAPPO"."MO1_MEMO":"PMAX_AMAX_EMAX" failed to load/unload and is being skipped due to error: ORA-00001: unique constraint (PRDAPPO.MO1_MEMO_PK) violated Job "PRDAPPO"."SYS_IMPORT_FULL_01" completed with 1 error(s) at 02:34:33
使用datapump比較最怕的就是等待了個把小時,最後dump檔案報錯回退了,對於約束的問題,可以使用impdp的選項 DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS來匯入沒有問題的資料。
undo的困擾
ORA-31693: Table data object "MIG_TEST"."MO1_MEMO":"P2_A1000_E3" failed to load/unload and is being skipped due to error: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
如果表足夠大,幾十G,上百G,恰好你的undo大小也在幾十G,那麼很有可能會出現undo資源不足。這個時候你都不知道該怎麼繼續了。
資源的相互制約
有些專案中,可能同時使用sql*loader和datapump,一旦這種情況發生,sqlldr和datapump就會互相制約,儘可能多的佔用資源,對效能還是有一定的影響。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1460044/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【DATAPUMP】使用DataPump遷移Oracle資料庫Oracle資料庫
- 海量資料遷移之資料抽取流程
- 海量資料遷移之資料載入流程
- 海量資料遷移之衝突資料篩查
- Datapump資料遷移的實踐總結
- Datapump資料遷移前的準備工作
- 海量資料遷移之透過shell估算資料量
- 海量資料遷移之通過shell估算資料量
- sqlldr 完成mysql到oracle的資料遷移MySqlOracle
- Datapump資料遷移前的準備工作(二)
- 海量資料遷移之傳輸表空間(一)
- 海量資料遷移之誤操作和防範建議
- 海量資料遷移之透過rowid切分大表
- 海量資料遷移之通過rowid切分大表
- 海量資料遷移之外部表切分
- 海量資料處理_資料泵分批資料遷移
- 海量資料遷移之使用分割槽並行切分匯入並行
- 海量資料遷移之外部表載入
- 使用impdp,expdp資料泵進入海量資料遷移
- sqlldr和oracle_datapump效能比較SQLOracle
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之分割槽並行切分並行
- 海量資料遷移之外部表並行抽取並行
- 海量資料轉換遷移的程式碼自動生成
- 海量資料處理_使用外部表進行資料遷移
- 海量資料遷移之使用shell啟用多個動態並行並行
- 海量資料遷移之一個誤操作的問題總結
- 資料庫索引的作用和優點缺點資料庫索引
- datapump跨平臺升級遷移的總結
- MongoDB 資料遷移和同步MongoDB
- 資料的遷移
- 利用sqlldr工具進行資料遷移時發現的問題解決方法SQL
- datapump跨平臺升級遷移的對比測試和優化優化
- 資料庫遷移之資料泵實驗資料庫
- 海量資料遷移之分割槽表批次insert效能改進
- 海量資料遷移之分割槽表批量insert效能改進
- Laravel 中資料遷移和資料填充Laravel