数据库version
导入导出工具
( from )导出数据库
( to )导入数据库
Expdp/Impdp
11.2.0.2.0
10.2.0.3.0
From 11g(11.2.0.2.0) to 10g(10.2.0.3.0)
实现目的:将11g(11.2.0.2.0)中的数据导入到10g(10.2.0.3.0)环境中去
适用范围:将高版本的数据库导入到低版本的数据库中
使用工具:Expdp/Impdp
导入数据库version 10.2.0.3.0
在本地进行版本确定cmd 下输入expdp -help可以显示出本机的数据库版本信息
导出数据库version 11.2.0.2.0
确定导出数据库的版本信息 在cmd下sqlplus apps/cape@数据库连接符
本文档以scott/cape@mpm (mpm是本地配置的连接符,如下图所示:)
在CMD模式下sqlplus apps/cape@mpm后,可以看到数据连接符mpm的数据库版本信息是11.2.0.2.0
进行EXPDP的数据导出
Expdp system/password@mpm dumpfile=20120418.dmp schemas=(apps,oa,workflow,hr,appsys,mpm) version='10.2.0.3.0'
注意
1.由于导出,导入的数据库版本不一致,为防止版本不一致导至数据无法进行导入
此处一定要带上版本信息,并且version的值是需要导入到哪个数据库的版本信息
2.expdp的命令执行,如果本地机器有数据库的话,可以使用本地的expdp命令(当然必须先配置连接导出的数据库的连接符),如果没有,可以在数据库服务器上执行,两者没有区别,但必须带version ,version的值必须是你要导入的数据库的version值。
开始进行数据的导出
数据导出中…….
数据导出完成如下:
数据导出完成后,我们根据显示的路径可以找到生成的数据文件和日志文件
由于我们没有指定日志文件名称,系统默认是export.log文件,我们可以查看下导出日志文件内容,确定没有在导出过程中出现异常问题。
将导出的文件(主要是dmp文件)拷贝到目的数据的oracle_home/oracle_sid/dpdump目录下
然后在CMD模式下执行导入命令行
Impdp system/system@my dumpfile=20120418.dmp schemas=(apps,appsys,hr,workflow,oa,mpm)
注意:此处的导入不需要写version参数了,因为导出的时候已经指定了版本信息,并且版本信息与导入的数控版本信息一致。
在执行导入命令行之前,需要在导入数据库里创建必须的导入环境,如果之前已经导入过了,那么只需要将相关的用户删除既可,
drop user mpm cascade;
drop user oa cascade;
drop user hr cascade;
drop user workflow cascade;
drop user apps cascade;
drop user appsys cascade;
如果是第一次导入,那么需要创建相关的表空间(schema不需要创建,因为impdp会自动创建用户)创建表空间的代码如下:(因为导出的时候,指定了导出的用户为apps,appsys,hr,oa,workflow,mpm,那么我们需要创建的表空间就只需要跟这几个用户所对应的表空间既可)
create tablespace apps datafile 'D:\oracle10g\product\10.2.0\oradata\my\apps.dbf' size 100m autoextend on next 10m;
create tablespace appsys datafile 'D:\oracle10g\product\10.2.0\oradata\my\appsys.dbf' size 100m autoextend on next 10m;
create tablespace hr datafile 'D:\oracle10g\product\10.2.0\oradata\my\hr.dbf' size 100m autoextend on next 10m;
create tablespace mpm datafile 'D:\oracle10g\product\10.2.0\oradata\my\mpm.dbf' size 100m autoextend on next 10m;
create tablespace workflow datafile 'D:\oracle10g\product\10.2.0\oradata\my\workflow.dbf' size 100m autoextend on next 10m;
create tablespace oa datafile 'D:\oracle10g\product\10.2.0\oradata\my\oa.dbf' size 100m autoextend on next 10m;
利用PLSQL Developer工具,在需要导入数据库里创建表空间
表空间创建完成后,就可以进行Impdp的数据导入了
按一般情况来说,到此处,数据导入就算完成了,如果发现导入过程中出现错误信息,造成的原因有如下几点:
1. 在高版本使用了低版本不支持的函数如listagg,regexp_count,正则表达式,等
2. 在高版本中,引入了一些语义分析,对一些特殊字符可以进行语义的分析,导至低版本不兼容 比如高版本中对”,” (全角的逗号)的分析可以自动转化成”,”(英文逗号),也就是说在高版本中可以实验全角的逗号进行SQL语句的拼写。
3. 应用了其他未导入schema的对象。
4. 有些对象需要特定的权限,比如从sys用户下进行的授权等.
针对这样的问题,最好查看下导入的日志文件,然后对错误的信息进行逐一检查验证。
问题思考:
1. 如果发现from数据库和to数据库的schema一致,但是表空间不一样,也就是说用户名称一样,但表空间名称不一样,对impdb来说有个参数可以进行表空间的转移,可以查看下impdp的帮助
2. 从高版本数据迁移到低版本上,此方法基本通用,可进行参考执行。