Oracle expdp/impdp 從高版本 到 低版本 示例

roominess發表於2012-03-31

公司的一個測試庫原來的版本是Oracle 11gR2的。 有些語法10g的有些出入,老大說把測試庫重建一下,用10g的版本。

 

       雖說可以停機,資料量也不大,不過白天研發的同事要使用測試庫,所以只能晚上加班搞。 打算使用資料泵expdp/impdp 來做。 因為從高版本到低版本導需要加上version 引數,之前還沒有測試過。 用這個機會測試一下。

關於Version 的更多說明,參考:

Export/Import DataPump Parameter VERSION - Compatibility of Data Pump Between Different Oracle Versions [Video] [ID 553337.1]


 

 

資料泵的更多示例,參考我的Blog

       Oracle expdp/impdp 使用示例

       http://space.itpub.net/15880878/viewspace-720017

 

 

步驟如下:

1. 10g版本的庫裝好,並建立一個例項

 

2. 檢視原使用者物件總數

SQL> select count(*) from dba_objects where owner in ('WANGOU','SUP','QISHUN');

 

 

這樣導完之後,就可以比較一下。

 

3.  建立目錄,並用expdp匯出資料

SQL>create directory backup as '/u01/backup';

#expdp /'/ as sysdba/' directory=backup full=y dumpfile=wgfullexp.dmp logfile=fullexp.log version=10.2.0.1 ;

-- 注意引數,我是從11gR2的庫導的,我要匯入10g的庫,通過version指定版本資訊。

 

4.  Toad 匯出原測試庫 表空間使用者等指令碼。

 

5.  在新的測試庫用之前匯出的指令碼把表空間建立好。

 

6.  建立dir,用impdp 匯入資料

SQL>create directory backup as '/u01/backup';

#impdp /'/ as sysdba/' directory=backup full=y dumpfile=wgfullexp.dmp logfile=fullimp.log;

 

impdp 沒有成功,最後的錯誤如下:

  Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39112: Dependent object type TABLE_STATISTICS skipped, base object type TABLE:"ORDDATA"."ORDDCM_PREFS_LOOKUP" creation failed

ORA-39125: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS while calling DBMS_METADATA.CONVERT [TABLE_STATISTICS]

ORA-06502: PL/SQL: numeric or value error

LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE"

 

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105

ORA-06512: at "SYS.KUPW$WORKER", line 6241

 

----- PL/SQL Call Stack -----

  object      line  object

  handle    number  name

0x4de6dba8     14916  package body SYS.KUPW$WORKER

0x4de6dba8      6300  package body SYS.KUPW$WORKER

0x4de6dba8     12279  package body SYS.KUPW$WORKER

0x4de6dba8      3279  package body SYS.KUPW$WORKER

0x4de6dba8      6889  package body SYS.KUPW$WORKER

0x4de6dba8      1262  package body SYS.KUPW$WORKER

0x4de62824         2  anonymous block

 

Job "SYS"."SYS_IMPORT_FULL_01" stopped due to fatal error at 20:58:03#o b0d5j2u18982013

 

       因為這裡的使用者比較多,同事給我的是3個使用者,但我連上去看了一下,明顯不止三個使用者。 所以就不想按使用者導,直接full =y 全庫導了。

 

       impdp 的時候,如果使用者不存在會自動建立。 所以在我impdp的時候,我沒有去建立使用者。 不過如果是生產環境,還是按部就班的來。 先建好表空間,使用者,按使用者來導。

 

       imdp失敗了,但之前導的表,索引等物件匯入過了。 用:

       SQL> select count(*) from dba_objects where owner in ('WANGOU','SUP','QISHUN');

 

檢視了新測試庫上這3個使用者的物件,比原庫少了20個。

 

       2個庫物件的詳細資料匯出到txt,用UC 比較了一下,少的20個物件是觸發器。 用Toad 在原庫上把這20個觸發器的sql匯出來,在新庫上執行一下。最後檢查了一下。 兩遍物件一致。

 

       因為impdp 在最後統計資訊那塊報錯所以檢視了一下統計資訊,已經匯入了。 讓開發的同事測試了一下,沒有問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15880878/viewspace-720018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章