程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> impdp導入中碰到的兩個問題

impdp導入中碰到的兩個問題

編輯:DB2教程

impdp導入中碰到的兩個問題


前兩天,需要將遠程一個測試庫用expdp導出的數據dump導入到本地的一個測試環境中,其中碰到了一些問題,值得小結下。


環境介紹

1. 數據量:10+表,<1000萬的數據,dump文件大約400多MB

2. 源庫和目標庫都是11.2.0.4

3. 字符集不同,源庫字符集是GBK,目標庫字符集是UTF-8


導入命令

test/test directory=exp_dump dumpfile=test.dmp logfile=test.log remap_schema=test1:test2 remap_tablespace=TBS_DAT_1:TBS_DAT_2,TBS_IDX_1:TBS_IDX_2


導入過程中碰到的兩個問題

(1) 中文字符集轉換

KUP-11007: conversion error loading table "TEST"."T_PSR"

這裡涉及到了字符集轉換的問題,中文在GBK字符集中占2位,但在UTF-8字符集中占3位,所以在GBK中保存小於20個字符的情況下,導入到了UTF-8的庫中,就可能因為需要額外的字符空間導致超出字段長度定義,報了ORA-12899的錯誤。


(2) 主外鍵關聯

ORA-31693: Table data object "TEST"."T_ITE" failed to load/unload and is being skipped due to error:

由於有些表之間是存在主外鍵關聯的,expdp導出的時候選擇了data_only僅導出數據,impdp導入的時候會因未插入主鍵記錄而插入外鍵記錄,出現ORA-02291的錯誤,對於這種情況可以選擇先禁止主外鍵關聯,導入後再恢復關聯。

操作順序

(a) 導入前,執行如下SQL找到需要禁止的外鍵關聯

select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||';'

from user_constraints WHERE CONSTRAINT_TYPE='R';

(b) 執行(a)的結果SQL

(c) 導入後,執行如下SQL找到需要恢復的外鍵關聯

select 'ALTER TABLE '||TABLE_NAME||' ENABLE NOVALIDATE CONSTRAINT '||constraint_name||';'

from user_constraints WHERE CONSTRAINT_TYPE='R';

NOVALIDATE參數不會驗證已存儲的數據,但未來再插入的記錄則會遵循主外鍵關聯的關系。


總結

1. 使用10g以上版本提供的expdp/impdp數據泵導入導出工具,較以往的exp/imp工具,無論是在參數的可選擇性上,還是速度和壓縮比上,都有了不小的改進,提供更為方便快速的數據導入導出方法給我們。

2. 導入導出可能碰到最多的問題,字符集轉換算是其中之一,要明確導入導出數據對字符集的依賴程度,才能確保數據導入導出的正確。

3. 對於有主外鍵關聯的數據,如果選擇data_only僅導出數據,那麼可在導入前禁止約束,這樣導入過程不會受到主外鍵關聯的影響,導入後可以恢復約束,保證約束的正確。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved