impdp匯入中碰到的兩個問題

2021-12-30 06:54:03 字數 1947 閱讀 3752

前兩天,需要將遠端乙個測試庫用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"

ora-12899: 列 reason_code 的值太大 (實際值: 21, 最大值: 20)

kup-11009: data for row: reason_code : 0x'babdbfd5c6f7c8ddc1bfcfded6c6'

這裡涉及到了字符集轉換的問題,中文在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:

ora-29913: error in executing odciexttablefetch callout

ora-02291: integrity constraint (test.fk_ite_ref_psr) violated - parent key not found

由於有些表之間是存在主外來鍵關聯的,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僅匯出資料,那麼可在匯入前禁止約束,這樣匯入過程不會受到主外來鍵關聯的影響,匯入後可以恢復約束,保證約束的正確。

mysql 今天碰到的兩個問題。

今天在 檢查環境的時候。報出 make no targets specified and no makefile found.stop.一連串的幾行錯誤。checking for tgetent in lncurses.no checking for tgetent in lcurses.no ch...

兩個開發中碰到的sql錯誤

select from table1 o table2 i left join table3 p on o.id p.id結果報錯 err 1054 unknown column o.order id in on clause 原因是left join 連線的時左右相連的兩個table,連不到tab...

impdp匯入遇到的問題

由於本地的生產庫需要更新,要的也比較著急,由於管理 在另外乙個系統裡,所以就聯絡他們那邊的dba,叫他們導一下的dmp檔案,檔案是拿過來了,剛開始採用imp命令匯入,報一些錯,網上查了一下,說是資料庫版本的問題,後來聯絡他們的dba,不是這個問題導致的,最後看了一下他的匯出日誌,是以expdb命令匯...