新聞中心
今天就跟大家聊聊有關(guān)如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司10多年成都企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站建設(shè)及推廣,對成都柔性防護(hù)網(wǎng)等多個(gè)行業(yè)擁有多年的網(wǎng)站制作經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
當(dāng)我們回顧Oracle產(chǎn)品工具發(fā)展歷程,不能不承認(rèn)Exp/Imp的成功。從早期的版本到現(xiàn)在11g,Exp/Imp都是開發(fā)人員最常使用、也是最簡單使用的數(shù)據(jù)庫邏輯備份工具。
但是隨著Oracle產(chǎn)品的不斷發(fā)展和現(xiàn)實(shí)環(huán)境中數(shù)據(jù)海量化,Exp/Imp已經(jīng)不能滿足實(shí)際需要了。Oracle在10g版本中正式推出了數(shù)據(jù)泵(Data Pump),也就是Expdp/Impdp產(chǎn)品。在很多方面,Data Pump解決或者緩解了Exp/Imp的一些缺陷。
1、版本陷阱
經(jīng)常使用Exp/Imp的朋友可能都有過這樣的經(jīng)歷:將數(shù)據(jù)導(dǎo)出到本地機(jī)器上,再導(dǎo)入到一臺(tái)新服務(wù)器上的時(shí)候,經(jīng)常會(huì)報(bào)版本錯(cuò)誤。不同的數(shù)據(jù)庫服務(wù)器版本、不同的客戶端版本都會(huì)影響到我們導(dǎo)出數(shù)據(jù)dump文件,影響我們導(dǎo)入操作的成功。
這樣情況的本質(zhì)原因有兩個(gè):一個(gè)是Exp/Imp是一個(gè)客戶端工具,工具程序是駐留在客戶端上的。不同版本的客戶端必然帶來不同的Exp/Imp操作行為,寫入的Dump文件也必然有一定差異。這就考驗(yàn)客戶端程序的兼容性。
另一個(gè)方面的原因是數(shù)據(jù)庫服務(wù)器的版本兼容性。每一個(gè)版本中,Oracle推出的新特性和屬性,我們很難要求低版本服務(wù)器來兼容支持。Oracle可以做到向后兼容,但是不能做到“預(yù)知未來”。
所以,在Exp/Imp的使用過程中,我們經(jīng)常會(huì)討論的問題有兩個(gè),一個(gè)是字符集的匹配,另一個(gè)就是版本導(dǎo)出策略。
在Data Pump的使用過程中,也會(huì)有版本差異的問題。不過,Data Pump版本的架構(gòu)特點(diǎn)決定了版本差異會(huì)得到一定程度的解決。
與Exp/Imp工具不同的是,Data Pump是一個(gè)服務(wù)端工具,只運(yùn)行在數(shù)據(jù)庫服務(wù)器端。這就讓Data Pump不受到客戶端版本的影響。同時(shí),Oracle考慮到版本差異的影響,也給Data Pump進(jìn)行了很多額外的配置。其中,version參數(shù)就是可以解決問題的方案。
2、實(shí)驗(yàn)環(huán)境介紹
Data Pump從10g開始推出,所以最大版本間的差異存在于Oracle 10g與11g之間。筆者選擇兩個(gè)環(huán)境進(jì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、從10g到11g
首先我們測試從10g到11g的情況。如果我們從10g中導(dǎo)出Dump文件,導(dǎo)入到11g上,有沒有什么問題呢?
我們先成10g上導(dǎo)出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
啟動(dòng) "SYS"."SYS_EXPORT_SCHEMA_01": "/******** AS SYSDBA" directory=verdmp dumpf
ile=scottdmp.dmp schemas=scott
正在使用 BLOCKS方法進(jìn)行估計(jì)...
(篇幅原因,有省略……)
. .導(dǎo)出了 "SCOTT"."BONUS" 0 KB 0行
已成功加載/卸載了主表 "SYS"."SYS_EXPORT_SCHEMA_01"
******************************************************************************
SYS.SYS_EXPORT_SCHEMA_01的轉(zhuǎn)儲(chǔ)文件集為:
D:\VERDMP\SCOTTDMP.DMP
作業(yè) "SYS"."SYS_EXPORT_SCHEMA_01"已于 16:20:03成功完成
目錄中存在導(dǎo)出的文件。
D:\verdmp的目錄
2012-11-24 16:08
2012-11-24 16:08
2012-11-24 16:20 2,360 export.log
2012-11-24 16:20 69,062,656 SCOTTDMP.DMP
2個(gè)文件 69,065,016字節(jié)
2個(gè)目錄 36,759,314,432可用字節(jié)
導(dǎo)出成功,使用ftp傳導(dǎo)到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
導(dǎo)入成功。我們得到了結(jié)論:在使用Data Pump時(shí)候,從低版本導(dǎo)出的dmp文件可以導(dǎo)入到高版本的數(shù)據(jù)庫服務(wù)器上。這個(gè)過程,不需要額外的配置。
4、11g到10g
下面嘗試將從11g轉(zhuǎn)移到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
導(dǎo)出文件成功,將dmp文件傳輸?shù)?0g環(huán)境去導(dǎo)入。
D:\verdmp>dir
驅(qū)動(dòng)器 D中的卷沒有標(biāo)簽。
卷的序列號(hào)是 2294-1384
D:\verdmp的目錄
2012-11-24 17:00
2012-11-24 17:00
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個(gè)文件 138,168,632字節(jié)
2個(gè)目錄 36,689,879,040可用字節(jié)
--導(dǎo)入文件
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:轉(zhuǎn)儲(chǔ)文件說明錯(cuò)誤
ORA-39142:版本號(hào) 3.1 (在轉(zhuǎn)儲(chǔ)文件 "D:\verdmp\testdmp.dmp"中)不兼容
報(bào)錯(cuò),明顯是版本錯(cuò)誤。解決問題的方法,就是在導(dǎo)出expdp的時(shí)候,使用version參數(shù)限制dmp文件的格式。官方的文檔中,對version參數(shù)如下:
VERSION
Version of objects to export.
Valid keyword values are: [COMPATIBLE], LATEST or any valid database version.
我們重新導(dǎo)出文件。
[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ǎo)入文件。
D:\verdmp>dir
驅(qū)動(dòng)器 D中的卷沒有標(biāo)簽。
卷的序列號(hào)是 2294-1384
D:\verdmp的目錄
2012-11-24 17:13
2012-11-24 17:13
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個(gè)文件 207,256,242字節(jié)
2個(gè)目錄 36,620,615,680可用字節(jié)
--重新導(dǎo)入
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"
啟動(dòng) "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)錯(cuò)誤:
ORA-02304:無效的對象標(biāo)識(shí)符文字
失敗的 sql為:
CREATE TYPE "TEST"."T_INFO" OID '5F88C5F6877C43468A5C2CE5F53CEA48' is object (
id number);
ORA-39083:對象類型 TYPE創(chuàng)建失敗,出現(xiàn)錯(cuò)誤:
ORA-02304:無效的對象標(biāo)識(shí)符文字
失敗的 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個(gè)錯(cuò)誤 (于 17:18:11完成)
存在報(bào)錯(cuò),但是導(dǎo)入的版本問題已經(jīng)不存在了。這個(gè)問題筆者曾經(jīng)解決過,詳細(xì)參見(http://space.itpub.net/17203031/viewspace-732501)。
我們通過transform參數(shù)來解決這個(gè)問題。
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"
啟動(dòng) "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個(gè)錯(cuò)誤 (于 17:20:41完成)
結(jié)論:當(dāng)從高版本數(shù)據(jù)庫服務(wù)器導(dǎo)出,試圖導(dǎo)入到低版本數(shù)據(jù)庫服務(wù)器的時(shí)候,會(huì)存在版本沖突問題。解決的方法在導(dǎo)出expdp過程中,使用version參數(shù)約定版本號(hào)。
注意,impdp程序也有version參數(shù)。但是對解決沖突不起作用。Impdp的version是用于生成兼容性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:轉(zhuǎn)儲(chǔ)文件說明錯(cuò)誤
ORA-39142:版本號(hào) 3.1 (在轉(zhuǎn)儲(chǔ)文件 "D:\verdmp\testdmp.dmp"中)不兼容
對Oracle Data Pump而言,版本問題較exp/imp容易的多了。目前Data Pump推出的版本只有10g和11g,相信隨著版本的不斷演進(jìn),數(shù)據(jù)泵跨版本移植的場景會(huì)越來越多。
看完上述內(nèi)容,你們對如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)頁題目:如何使用version參數(shù)解決Oracle數(shù)據(jù)泵版本差異
文章網(wǎng)址:http://biofuelwatch.net/article/pegejd.html