千家信息网

如何使用version参数解决Oracle数据泵版本差异

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,今天就跟大家聊聊有关如何使用version参数解决Oracle数据泵版本差异,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。当我们回顾Oracl
千家信息网最后更新 2025年02月05日如何使用version参数解决Oracle数据泵版本差异

今天就跟大家聊聊有关如何使用version参数解决Oracle数据泵版本差异,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

当我们回顾Oracle产品工具发展历程,不能不承认Exp/Imp的成功。从早期的版本到现在11gExp/Imp都是开发人员最常使用、也是最简单使用的数据库逻辑备份工具。

但是随着Oracle产品的不断发展和现实环境中数据海量化,Exp/Imp已经不能满足实际需要了。Oracle10g版本中正式推出了数据泵(Data Pump),也就是Expdp/Impdp产品。在很多方面,Data Pump解决或者缓解了Exp/Imp的一些缺陷。

1、版本陷阱

经常使用Exp/Imp的朋友可能都有过这样的经历:将数据导出到本地机器上,再导入到一台新服务器上的时候,经常会报版本错误。不同的数据库服务器版本、不同的客户端版本都会影响到我们导出数据dump文件,影响我们导入操作的成功。

这样情况的本质原因有两个:一个是Exp/Imp是一个客户端工具,工具程序是驻留在客户端上的。不同版本的客户端必然带来不同的Exp/Imp操作行为,写入的Dump文件也必然有一定差异。这就考验客户端程序的兼容性。

另一个方面的原因是数据库服务器的版本兼容性。每一个版本中,Oracle推出的新特性和属性,我们很难要求低版本服务器来兼容支持。Oracle可以做到向后兼容,但是不能做到"预知未来"。

所以,在Exp/Imp的使用过程中,我们经常会讨论的问题有两个,一个是字符集的匹配,另一个就是版本导出策略。

Data Pump的使用过程中,也会有版本差异的问题。不过,Data Pump版本的架构特点决定了版本差异会得到一定程度的解决。

Exp/Imp工具不同的是,Data Pump是一个服务端工具,只运行在数据库服务器端。这就让Data Pump不受到客户端版本的影响。同时,Oracle考虑到版本差异的影响,也给Data Pump进行了很多额外的配置。其中,version参数就是可以解决问题的方案。

2、实验环境介绍

Data Pump10g开始推出,所以最大版本间的差异存在于Oracle 10g11g之间。笔者选择两个环境进行测试。

10g环境是Oracle Windows版本,创建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环境采用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

--创建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

作业 "SYS"."SYS_EXPORT_SCHEMA_01" 已于 16:20:03 成功完成

目录中存在导出的文件。

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 个文件 69,065,016 字节

2 个目录 36,759,314,432 可用字节

导出成功,使用ftp传导到Linux 11g环境。

[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文件可以导入到高版本的数据库服务器上。这个过程,不需要额外的配置。

411g10g

下面尝试将从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文件传输到10g环境去导入。

D:\verdmp>dir

驱动器 D 中的卷没有标签。

卷的序列号是 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 个文件 138,168,632 字节

2 个目录 36,689,879,040 可用字节

--导入文件

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: 参数值无效

ORA-39000: 转储文件说明错误

ORA-39142: 版本号 3.1 (在转储文件 "D:\verdmp\testdmp.dmp") 不兼容

报错,明显是版本错误。解决问题的方法,就是在导出expdp的时候,使用version参数限制dmp文件的格式。官方的文档中,对version参数如下:

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

.

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 个文件 207,256,242 字节

2 个目录 36,620,615,680 可用字节

--重新导入

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 创建失败, 出现错误:

ORA-02304: 无效的对象标识符文字

失败的 sql:

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

id number);

ORA-39083: 对象类型 TYPE 创建失败, 出现错误:

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" 已创建, 但带有编译警告

处理对象类型 SCHEMA_EXPORT/VIEW/VIEW

ORA-39082: 对象类型 VIEW:"TEST"."V_T1" 已创建, 但带有编译警告

处理对象类型 SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

作业 "SYS"."SYS_IMPORT_FULL_02" 已经完成, 但是有 4 个错误 (17:18:11 完成)

存在报错,但是导入的版本问题已经不存在了。这个问题笔者曾经解决过,详细参见(http://space.itpub.net/17203031/viewspace-732501)。

我们通过transform参数来解决这个问题。

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

作业 "SYS"."SYS_IMPORT_FULL_02" 已经完成, 但是有 2 个错误 (17:20:41 完成)

结论:当从高版本数据库服务器导出,试图导入到低版本数据库服务器的时候,会存在版本冲突问题。解决的方法在导出expdp过程中,使用version参数约定版本号。

注意,impdp程序也有version参数。但是对解决冲突不起作用。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: 参数值无效

ORA-39000: 转储文件说明错误

ORA-39142: 版本号 3.1 (在转储文件 "D:\verdmp\testdmp.dmp") 不兼容


Oracle Data Pump而言,版本问题较exp/imp容易的多了。目前Data Pump推出的版本只有10g11g,相信随着版本的不断演进,数据泵跨版本移植的场景会越来越多。

看完上述内容,你们对如何使用version参数解决Oracle数据泵版本差异有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

版本 对象 文件 类型 数据 处理 参数 问题 成功 服务 原因 服务器 错误 差异 数据库 环境 目录 字节 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 方舟服务器维护得多长时间 无锡dell服务器维修处 java数据库调用环境测试 花网络安全插画 无线个人区域网络技术例子 广州浩恩互联网科技有限公司 深信服服务器端口绑定 金山区新能源软件开发哪家便宜 网络安全管理专业的毕业生 软件开发后如何选取权衡 传说对决还有几个服务器 网络安全警告不能验证服务器 贵州服务器电源生产厂 数据库实训个人总结800 现代网络技术基础课程 白鸽小白网络技术 网络安全不包括信息的可达性 信息时代网络安全手抄报内容 流式数据库 storm 门窗软件开发定制 企业网络安全 知乎 手机内网怎么访问内网服务器 命令方块服务器第二期 赞皇高科技软件开发服务供应 中国台湾手机软件开发哪家强 中铁信网络技术研究院 校园招聘 无法连接服务器的提示如何关闭 海顿网络安全 网络安全等级保护服务资质 电机的数据库
0