溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異

發(fā)布時間:2021-11-09 16:53:55 來源:億速云 閱讀:288 作者:柒染 欄目:建站服務器

今天就跟大家聊聊有關如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

當我們回顧Oracle產(chǎn)品工具發(fā)展歷程,不能不承認Exp/Imp的成功。從早期的版本到現(xiàn)在11g,Exp/Imp都是開發(fā)人員最常使用、也是最簡單使用的數(shù)據(jù)庫邏輯備份工具。

但是隨著Oracle產(chǎn)品的不斷發(fā)展和現(xiàn)實環(huán)境中數(shù)據(jù)海量化,Exp/Imp已經(jīng)不能滿足實際需要了。Oracle10g版本中正式推出了數(shù)據(jù)泵(Data Pump),也就是Expdp/Impdp產(chǎn)品。在很多方面,Data Pump解決或者緩解了Exp/Imp的一些缺陷。

 

1、版本陷阱

 

經(jīng)常使用Exp/Imp的朋友可能都有過這樣的經(jīng)歷:將數(shù)據(jù)導出到本地機器上,再導入到一臺新服務器上的時候,經(jīng)常會報版本錯誤。不同的數(shù)據(jù)庫服務器版本、不同的客戶端版本都會影響到我們導出數(shù)據(jù)dump文件,影響我們導入操作的成功。

 

這樣情況的本質原因有兩個:一個是Exp/Imp是一個客戶端工具,工具程序是駐留在客戶端上的。不同版本的客戶端必然帶來不同的Exp/Imp操作行為,寫入的Dump文件也必然有一定差異。這就考驗客戶端程序的兼容性。

 

另一個方面的原因是數(shù)據(jù)庫服務器的版本兼容性。每一個版本中,Oracle推出的新特性和屬性,我們很難要求低版本服務器來兼容支持。Oracle可以做到向后兼容,但是不能做到“預知未來”。

 

所以,在Exp/Imp的使用過程中,我們經(jīng)常會討論的問題有兩個,一個是字符集的匹配,另一個就是版本導出策略。

 

Data Pump的使用過程中,也會有版本差異的問題。不過,Data Pump版本的架構特點決定了版本差異會得到一定程度的解決。

 

Exp/Imp工具不同的是,Data Pump是一個服務端工具,只運行在數(shù)據(jù)庫服務器端。這就讓Data Pump不受到客戶端版本的影響。同時,Oracle考慮到版本差異的影響,也給Data Pump進行了很多額外的配置。其中,version參數(shù)就是可以解決問題的方案。

 

2、實驗環(huán)境介紹

 

Data Pump10g開始推出,所以最大版本間的差異存在于Oracle 10g11g之間。筆者選擇兩個環(huán)境進行測試。

 

10g環(huán)境是Oracle Windows版本,創(chuàng)建Directory對象。

 

 

SQL> select * from v$version;

 

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE        10.2.0.1.0         Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

 

 

SQL> create directory verdmp as 'D:\verdmp';

Directory created

 

 

11g環(huán)境采用Linux版本。

 

 

SQL> select * from v$version;

 

BANNER

----------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

 

--創(chuàng)建Directory對象

[root@oracle11g /]# cd /verdmp/

[root@oracle11g verdmp]# pwd

/verdmp

 

SQL> create directory verdmp as '/verdmp';

Directory created.

 

 

3、從10g11g

 

首先我們測試從10g11g的情況。如果我們從10g中導出Dump文件,導入到11g上,有沒有什么問題呢?

 

我們先成10g上導出dmp文件。

 

 

C:\Documents and Settings\Administrator>expdp \"/ as sysdba\" directory=verdmp dumpfile=scottdmp.dmp schemas=scott

 

Export: Release 10.2.0.1.0 - Production on 星期六, 24 11, 2012 16:08:43

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

啟動 "SYS"."SYS_EXPORT_SCHEMA_01":  "/******** AS SYSDBA" directory=verdmp dumpf

ile=scottdmp.dmp schemas=scott

正在使用 BLOCKS 方法進行估計...

(篇幅原因,有省略……)

. . 導出了 "SCOTT"."BONUS"                                 0 KB       0

已成功加載/卸載了主表 "SYS"."SYS_EXPORT_SCHEMA_01"

******************************************************************************

SYS.SYS_EXPORT_SCHEMA_01 的轉儲文件集為:

  D:\VERDMP\SCOTTDMP.DMP

作業(yè) "SYS"."SYS_EXPORT_SCHEMA_01" 已于 16:20:03 成功完成

 

 

目錄中存在導出的文件。

 

 

 D:\verdmp 的目錄

2012-11-24  16:08    <DIR>          .

2012-11-24  16:08    <DIR>          ..

2012-11-24  16:20             2,360 export.log

2012-11-24  16:20        69,062,656 SCOTTDMP.DMP

               2 個文件     69,065,016 字節(jié)

               2 個目錄 36,759,314,432 可用字節(jié)

 

 

導出成功,使用ftp傳導到Linux 11g環(huán)境。

 

 

[root@oracle11g verdmp]# ls -l

total 67520

-rw-r--r--  1 root root     2360 Nov 24 08:14 export.log

-rw-r--r--  1 root root 69062656 Nov 24 08:14 SCOTTDMP.DMP

 

 

 

 

 

[oracle@oracle11g ~]$ impdp userid=\'/ as sysdba\' directory=verdmp dumpfile=SCOTTDMP.DMP remap_schema=scott:test

 

Import: Release 11.2.0.1.0 - Production on Sat Nov 24 08:17:15 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table "SYS"."SYS_IMPORT_FULL_01" successfully loaded/unloaded

Starting "SYS"."SYS_IMPORT_FULL_01":  userid="/******** AS SYSDBA" directory=verdmp dumpfile=SCOTTDMP.DMP remap_schema=scott:test

(篇幅原因,有省略……)

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Job "SYS"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 08:17:39

 

 

導入成功。我們得到了結論:在使用Data Pump時候,從低版本導出的dmp文件可以導入到高版本的數(shù)據(jù)庫服務器上。這個過程,不需要額外的配置。

 

 

4、11g10g

 

下面嘗試將從11g轉移到10g版本。

 

 

[oracle@oracle11g ~]$ expdp userid=\'/ as sysdba\' directory=verdmp dumpfile=testdmp.dmp  schemas=test reuse_dumpfiles=y

 

Export: Release 11.2.0.1.0 - Production on Sat Nov 24 08:24:01 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting "SYS"."SYS_EXPORT_SCHEMA_01":  userid="/******** AS SYSDBA" directory=verdmp dumpfile=testdmp.dmp schemas=test reuse_dumpfiles=y

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 85.25 MB

(篇幅原因,有省略……)

Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:

  /verdmp/testdmp.dmp

Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at 08:24:43

 

 

導出文件成功,將dmp文件傳輸?shù)?span lang="EN-US">10g環(huán)境去導入。

 

 

D:\verdmp>dir

 驅動器 D 中的卷沒有標簽。

 卷的序列號是 2294-1384

 

 D:\verdmp 的目錄

 

2012-11-24  17:00    <DIR>          .

2012-11-24  17:00    <DIR>          ..

2012-11-24  16:20             2,360 export.log

2012-11-24  16:20        69,062,656 SCOTTDMP.DMP

2012-11-24  17:00        69,103,616 testdmp.dmp

               3 個文件    138,168,632 字節(jié)

               2 個目錄 36,689,879,040 可用字節(jié)

 

--導入文件

D:\verdmp>impdp \"/ as sysdba\" directory=verdmp dumpfile=testdmp.dmp

 

Import: Release 10.2.0.1.0 - Production on 星期六, 24 11, 2012 17:02:19

 

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

ORA-39001: 參數(shù)值無效

ORA-39000: 轉儲文件說明錯誤

ORA-39142: 版本號 3.1 (在轉儲文件 "D:\verdmp\testdmp.dmp" ) 不兼容

 

 

 

報錯,明顯是版本錯誤。解決問題的方法,就是在導出expdp的時候,使用version參數(shù)限制dmp文件的格式。官方的文檔中,對version參數(shù)如下:

 

 

VERSION

Version of objects to export.

Valid keyword values are: [COMPATIBLE], LATEST or any valid database version.

 

 

我們重新導出文件。

 

 

[oracle@oracle11g ~]$ expdp userid=\'/ as sysdba\' directory=verdmp dumpfile=testdmp_10g.dmp  schemas=test reuse_dumpfiles=y version=10.2.0.1.0

 

Export: Release 11.2.0.1.0 - Production on Sat Nov 24 08:32:34 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting "SYS"."SYS_EXPORT_SCHEMA_01":  userid="/******** AS SYSDBA" directory=verdmp dumpfile=testdmp_10g.dmp schemas=test reuse_dumpfiles=y version=10.2.0.1.0

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 85.25 MB

(篇幅原因,有省略……)

******************************************************************************

Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:

  /verdmp/testdmp_10g.dmp

Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at 08:33:10

 

 

重新導入文件。

 

 

D:\verdmp>dir

 驅動器 D 中的卷沒有標簽。

 卷的序列號是 2294-1384

 

 D:\verdmp 的目錄

 

2012-11-24  17:13    <DIR>          .

2012-11-24  17:13    <DIR>          ..

2012-11-24  16:20             2,360 export.log

2012-11-24  17:02               378 import.log

2012-11-24  16:20        69,062,656 SCOTTDMP.DMP

2012-11-24  17:00        69,103,616 testdmp.dmp

2012-11-24  17:13        69,087,232 testdmp_10g.dmp

               5 個文件    207,256,242 字節(jié)

               2 個目錄 36,620,615,680 可用字節(jié)

 

--重新導入

D:\verdmp>impdp \"/ as sysdba\" directory=verdmp dumpfile=testdmp_10g.dmp remap_tablespace=test:tptest

 

Import: Release 10.2.0.1.0 - Production on 星期六, 24 11, 2012 17:16:52

 

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已成功加載/卸載了主表 "SYS"."SYS_IMPORT_FULL_02"

啟動 "SYS"."SYS_IMPORT_FULL_02":  "/******** AS SYSDBA" directory=verdmp dumpfil

e=testdmp_10g.dmp remap_tablespace=test:tptest

處理對象類型 SCHEMA_EXPORT/USER

處理對象類型 SCHEMA_EXPORT/SYSTEM_GRANT

處理對象類型 SCHEMA_EXPORT/ROLE_GRANT

處理對象類型 SCHEMA_EXPORT/DEFAULT_ROLE

處理對象類型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

處理對象類型 SCHEMA_EXPORT/TYPE/TYPE_SPEC

ORA-39083: 對象類型 TYPE 創(chuàng)建失敗, 出現(xiàn)錯誤:

ORA-02304: 無效的對象標識符文字

失敗的 sql :

CREATE TYPE "TEST"."T_INFO"   OID '5F88C5F6877C43468A5C2CE5F53CEA48' is object (

id number);

 

ORA-39083: 對象類型 TYPE 創(chuàng)建失敗, 出現(xiàn)錯誤:

ORA-02304: 無效的對象標識符文字

失敗的 sql :

CREATE TYPE "TEST"."T_INFOLIST"   OID '49E54F26C4CC4134B65C15C1D91026FC' is tabl

e of t_info;

 

處理對象類型 SCHEMA_EXPORT/DB_LINK

處理對象類型 SCHEMA_EXPORT/SEQUENCE/SEQUENCE

(篇幅原因,有省略……)

處理對象類型 SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE

ORA-39082: 對象類型 ALTER_PROCEDURE:"TEST"."P_TEST_NC" 已創(chuàng)建, 但帶有編譯警告

處理對象類型 SCHEMA_EXPORT/VIEW/VIEW

ORA-39082: 對象類型 VIEW:"TEST"."V_T1" 已創(chuàng)建, 但帶有編譯警告

處理對象類型 SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

處理對象類型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

處理對象類型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

作業(yè) "SYS"."SYS_IMPORT_FULL_02" 已經(jīng)完成, 但是有 4 個錯誤 ( 17:18:11 完成)

 

 

存在報錯,但是導入的版本問題已經(jīng)不存在了。這個問題筆者曾經(jīng)解決過,詳細參見(http://space.itpub.net/17203031/viewspace-732501)。

 

我們通過transform參數(shù)來解決這個問題。

 

 

D:\verdmp>impdp \"/ as sysdba\" directory=verdmp dumpfile=testdmp_10g.dmp remap_tablespace=test:tptest transform=oid:n

 

Import: Release 10.2.0.1.0 - Production on 星期六, 24 11, 2012 17:20:30

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已成功加載/卸載了主表 "SYS"."SYS_IMPORT_FULL_02"

啟動 "SYS"."SYS_IMPORT_FULL_02":  "/******** AS SYSDBA" directory=verdmp dumpfile=testdmp_10g.dmp remap_tablespace=test:tptest transform=oid:n

(篇幅原因,有省略……)

處理對象類型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

作業(yè) "SYS"."SYS_IMPORT_FULL_02" 已經(jīng)完成, 但是有 2 個錯誤 ( 17:20:41 完成)

 

 

結論:當從高版本數(shù)據(jù)庫服務器導出,試圖導入到低版本數(shù)據(jù)庫服務器的時候,會存在版本沖突問題。解決的方法在導出expdp過程中,使用version參數(shù)約定版本號。

 

注意,impdp程序也有version參數(shù)。但是對解決沖突不起作用。Impdpversion是用于生成兼容性SQL語句的。

 

 

VERSION

Version of objects to import.

Valid keywords are: [COMPATIBLE], LATEST or any valid database version.

Only valid for NETWORK_LINK and SQLFILE.

 

 

即使我們在impdp中使用version,也不能起到兼容性作用。

 

 

D:\verdmp>impdp \"/ as sysdba\" directory=verdmp dumpfile=testdmp.dmp remap_tablespace=test:tptest transform=oid:n version=10.2.0.1.0

 

Import: Release 10.2.0.1.0 - Production on 星期六, 24 11, 2012 17:24:33

 

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

連接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

ORA-39001: 參數(shù)值無效

ORA-39000: 轉儲文件說明錯誤

ORA-39142: 版本號 3.1 (在轉儲文件 "D:\verdmp\testdmp.dmp" ) 不兼容

 


Oracle Data Pump而言,版本問題較exp/imp容易的多了。目前Data Pump推出的版本只有10g11g,相信隨著版本的不斷演進,數(shù)據(jù)泵跨版本移植的場景會越來越多。

看完上述內(nèi)容,你們對如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI