oracle数据库迁移版本兼容问题.docx
- 文档编号:28449935
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:13
- 大小:23.18KB
oracle数据库迁移版本兼容问题.docx
《oracle数据库迁移版本兼容问题.docx》由会员分享,可在线阅读,更多相关《oracle数据库迁移版本兼容问题.docx(13页珍藏版)》请在冰豆网上搜索。
oracle数据库迁移版本兼容问题
在关于不同版本的数据库迁移
目的
在不同版本的数据库之间进行导入和导出的时候存在的兼容性问题。
应用范围
本文用于实现在oracle7,oracle8,oracle8i,oracle9i,oracle10g和oracle11g数据库上进行的导入/导出功能,也就是说将数据从版本为X的数据库中导出,然后再数据导入到版本为Y的数据库中去。
同时也提供了在执行导入/导出功能时,相关的一些版本的使用情况和在进行数据导出的时候需要进行哪些的准备工作。
在不同版本的数据库进行导入和导出的兼容性问题
兼容性概要
1.用具有导出功能的数据库将数据导出
2.用具有导入功能的目标数据库将数据导入
3.Exportdatadump生成的dump文件和由原来的导出工具生成的dump文件不兼容
4.oracle7的导出工具不支持从oracle9i以及更高的版本导出数据
客户端介绍
1.导出/导入客户端
使用oracle的导出/导入功能我们可以在不同的数据库间进行数据对象的迁移,即使他们所使用的硬件平台和软件配置不一样。
Oracle的导出工具从数据库中提取对象定义以及表数据,把他们存储在一个oracle的二进制导出转存文件里这个文件一般放在磁盘或者磁带当中。
我们也可以使用FTP或者物理传输(如果是磁带的话)把这个文件传到另外一个站点中去。
导出转存文件在网络中传输时必须以二进制的形式存在。
如果导出文件是以字符模式(ASCII)形式传输的话当进行文件导入的时候就会引起错误,这些错误结果可能是IMP-9或者IMP-10紧接在错误IMP-0后。
Oracle的导入工具从导出转存文件中读取数据定义以及表数据然后把这些信息插入到目标数据库中去。
2.导入/导出数据泵
从oracle10g的第一个版本(10.1.1.x)开始,ORACLE引入了导出数据泵(expdp)和导入数据泵(impdp)功能。
由导出数据泵创建的导出泵文件只能被导入数据泵所读取,由原来的导出功能创建的导出泵文件是不能被导入数据泵的客户端所读取的。
数据字典视图
1.catexp.sql脚本
在使用导出/导入功能之前,数据字典必须具备有导出/导入功能所需要的视图。
我们可以通过运行以下的脚本来实现:
——unix:
SQL>connect/assysdba
SQL>@$ORACLE_HOME/rdbms/admin/catexp.sql
——windows:
SQL>connect/assysdba
SQL>@%ORACLE_HOME%\rdbms\admin\catexp.sql
脚本CATEXP.SQL必须由用户SYS来执行,这个脚本也可以被脚本CATALOG.SQL自动调用。
CATEXP.SQL和CATALOG.SQL这两个脚本在数据库中只需要执行一次,通常在运行导出/导入之前我们没有必要再执行这些脚本了(如果需要的视图不正确会出现错误EXP-24或者IMP-23)。
脚本CATEXP.SQL执行完成的是以下的任务:
l创建数据字典需要的导出/导入视图
l创建角色EXP_FULL_DATABASE和IMP_FULL_DATABASE
l分配合适的权限给角色EXP_FULL_DATABASE和IMP_FULL_DATABASE
l把EXP_FULL_DATABASE和IMP_FULL_DATABASE分配给角色DBA
2.脚本catexp7.sql
当使用Oracle7导出客户端从oracle8/8i数据库创建oracle7导出文件,用户SYS必须在oracle8/8i上运行CATEXP7.SQL:
——unix:
SQL>connect/assysdba
SQL>@$ORACLE_HOME/rdbms/admin/catexp7.sql
——windows:
SQL>connect/assysdba
SQL>@%ORACLE_HOME%\rdbms\admin\catexp7.sql
这个脚本创建的导出视图使得oracle8/8i的导出看起来和oracle7的一样,这就意味着在这些视图里是不会看到oracle8/8i特定的对象,这样的导出文件在oracle7中可以正常的导入。
脚本CATEXP.SQL和CATEXP7.SQL只需要被执行一次。
CATEXP.SQL创建在Oracle8/8i/10g/11g导出客户端需要使用的exu8%视图,CATEXP7.SQL创建在Oracle7导出端需要使用的exu7%视图。
如果这两个脚本已经被SYS执行过了,我们就不需要再执行一次。
以上提到的方法也同样适用于从Oracle7数据库中创建一个Oracle6导出文件,我们只需要使用SYS用户在Oracle7数据库中运行CATEXP6.SQL脚本就可以了。
需要注意的是:
Oracle不支持使用Oracle7导出客户端对Oracle9i数据库进行导出:
在向后兼容时,我只支持向后兼容一个版本,这说明了我们同样也不能使用Oracle8导出客户端对Oracle10数据库进行导出(现
在只支持使用Oracle8i8.1.7或者更高版本的导出客户端对oracle10g数据库进行导出和使用Oracle9i9.2.0导出端对oracle11g数据库导出)
使用全库导出/导入进行数据库迁移
1.关于直接升级的约束
如果我们使用全库导出/导入的方法将数据库升级到Oracle9i,oracle10g,或者oracle11g,有一个关于直接升级的约束,当然这只是在我们将FULL模式(FULL=Y)底下导出的exportdumpfile在FULL模式的数据库里导入时候才有的。
需要注意的是:
从技术角度上一个导入端是可以将由oracle5.1.22及其更高版本的数据库导出的exportdumpfiles进行导入,所谓的升级约束是指在升级手册上说明的可能升级路径。
支持从一个主要版本的最终
版(oracle8i8.1.7)直接迁移到另外一个主要版本(oracle9i9.2.0)是因为8.1.7是8i的最后一个版本。
7.3.4是oracle7的最后一个版本
8.0.6是oracle8的最后一个版本
8.1.7是oracle8i的最后一个版本
9.2.0是oracle9i的最后一个版本
10.2.0是oracle10g的最后一个版本
2.迁移到oracle9i版本2(9.2.0.x.0)
当源数据库是以下的情况我们可以使用全库导出/导入进行直接的迁移
Migrationpossiblefrom…tooracle9iRelease2(9.2.0.x.0);
Oracle7:
7.3.4(7.3.4.5.0recommended)
Oracle8:
8.0.6(8.0.6.3.0recommended)
Oracle8iRelease3:
8.1.7.4.0
Oracle9iRelease1:
9.0.1.4.0(9.0.1.5.0foriASinfrastructure)
3.迁移到Oracle10g版本1(10.1.0.x.0)
当源数据库是以下的情况我们可以使用全库导出/导入进行直接的迁移
4.迁移到Oracle10g版本2(10.2.0.x.0)
当源数据库是以下的情况我们可以使用全库导出/导入进行直接的迁移
Migrationpossiblefrom…tooracle9iRelease2(9.2.0.x.0);
Oracle7:
7.3.4(7.3.4.5.0recommended)
Oracle8:
8.0.6(8.0.6.3.0recommended)
Oracle8iRelease3:
8.1.7.4.0
Oracle9iRelease1:
9.0.1.4.0(9.0.1.5.0foriASinfrastructure)
Migrationpossiblefrom…tooracle10gRelease1(10.1.0.x.0);
Oracle8:
8.0.6(8.0.6.3.0recommended)
Oracle8iRelease3:
8.1.7.4.0
Oracle9iRelease1:
9.0.1.4.0(9.0.1.5.0forIasinfrastructure)
Oracle9iRelease2:
9.2.0.4.0(9.2.0.8.0recommended)
Migrationpossiblefrom…tooracle10gRelease2(10.2.0.x.0);
Oracle8iRelease3:
8.1.7.4.0
Oracle9iRelease1:
9.0.1.4.0(9.0.1.5.0forIasinfrastructure)
Oracle9iRelease2:
9.2.0.4.0(9.2.0.8.0recommended)
Oracle10gRelease1:
10.1.0.2.0(10.1.0.5.0recommended)
Oracle9iRelease2:
9.2.0.4.0(9.2.0.8.0recommended)
5.迁移到Oracle11gRelease1(11.1.0.x.0)
当源数据库是以下的情况我们可以使用全库导出/导入进行直接的迁移
6.范例
1.从8.1.7.4.0迁移到9.2.0.8.0
—使用8.1.7.4.0导出客户端运行全库导出
—使用9.2.0.8.0导入客户端运行全库导入
2.从8.0.5.0.0迁移到10.2.0.4.0
—升级8.0.5.0.0数据库到8.0.6.0.0(推荐用8.0.6.3.0)
—迁移8.0.6.x数据库到9.2.0.4.0(推荐用9.2.0.8.0)
—使用9.2.0.x导出客户端运行全库导出
—使用10.2.0.4.0导入客户端运行全库导入或者我们使用8.0.5.0.0导出客户端做一个全库的导出,在10g数
据库里预先定义好用户.然后用10.1.0.2导入客户端进行schema级的导入。
注意:
不支持用8.0.5.0.0的导出客户端做全库的导出,然后用10.1.0.2做全库的导入。
3.从9.2.0.1迁移到11.1.0.6.0
—运行9.2.0.4.0的补丁包(推荐用9.2.0.8.0)
—使用9.2.0.8.0的导出客户端做一个全库导出
—使用11.1.0.6.0的导入客户端做一个全库导入
导入导出工具的兼容性
1.导出工具
提示:
当把exportdumpfile导入到一个更高版本的数据库中去(比如:
把oracle8i的导入到oracle9i),我们使用的导出工具的版本和源数据库的版本一样(在这个例子里等于oracle8i)如果使用更高版
Migrationpossiblefrom…tooracle10gRelease1(11.1.0.x.0);
Oracle9iRelease2:
9.2.0.4.0(9.2.0.8.0recommended)
Oracle10gRelease1:
10.1.0.2.0(10.1.0.5.0recommended)
Oracle10gRelease2:
10.2.0.1.0(9.2.0.8.0recommended)
导出端的兼容:
通常导出端的版本和源数据,目的数据库中版本低的一个一样本的导出工具,导出会发生错误。
举个例子:
你用9.0.1的导出工具从8.1.7版本的数据库导出会出现下面的错误:
l当你要把exportdumpfile导入到一个更低版本的数据库中去
(比如:
把oracle9i的导入到oracle8i),导出工具的版本应
该和目的数据库的版本一样(在这个例子里是使用oracle8i)。
l当你从oracle7的数据库中创建oracle6的导出文件,SYS用户要先在oracle7的数据库上执CATEXP6.SQL脚本。
这个脚本创建的导出视图,让我们感觉就在oracle6数据库上进行导出
l同理当你从oracle8的数据库中创建oracle7的导出文件,SYS用户要先在oracle7的数据库上执行CATEXP7.SQL脚本。
这个脚本创建的导出视图,让我们感觉就在oracle7数据库上进行导出
l当你从oracle9i的数据库中创建oracle8/8i的导出文件时,不需要在oracle9i数据库上去运行oracle8i版本的catexp.sql脚本。
你只需要在oracle9i上执行8iexpexecutable。
需要知道的是:
在oracle9i的几个特性是不被支持的。
2.升级包
安装了升级包后数据字典的导出视图就会被改变,所以不能使用已经升级的导出工具去对还没升级的数据库进行导出。
比如:
用9.2.0.5的导出工具去导出9.2.0.1的数据库的时候回出现这样的错误:
要想成功的将9.2.0.1数据库导出,应使用9.2.0.1导出工具而不是9.2.0.2或者更高版本的。
3.导入端
EXP-00056Oracleerror942encountered
ORA-00942tableorviewdoesnotexist
EXP-00000exportterminatedunsuccessfully
EXP-00008:
ORACLEerror942encountered
ORA-00942:
tableorviewdoesnotexist
EXP-00024:
Exportviewsnotinstalled,pleasenotifyyourDBA
EXP-00000:
Exportterminatedunsuccessfully
导入端的兼容性:
一般导入工具的版本和目标数据库的版本是一样的
约束
1.导出/导入的特性和约束
下面是导出/导入客户端的一些约束
Oracle导出转存文件只能被oracle导入客户端读取,因为这些转存文件以特定的oracle二进制的格式存储的。
所有的导出转存文件都可以导入到一样或者更高版本和打过补丁的数据库中去导出转存文件不能被比他更早以前版本的导入客户端导入。
比如:
10gR2(10.2.0.x)导出转存文件不能被10gR1(10.1.0.x)导
入端导入(会出现ORA-10.2.0.x错误)导入端可以读取从5.1.22到和导入端一样版本之间的任意版本导出的exportdump文件。
Oracle6(或者更早版本)导出客户端不能被用来导出oracle8或者oracle8i更高版本的数据库。
如果用一个低版本的导出客户端对高版本的数据库进行导出,在低版本中不存在的对象类型是不会被导出的。
比如:
partitionedtable就不会被oracle7的导出端导入,如果你要把版本8的数据库中的partitionedtable放到版本7中去,那么在放入前会把这些表重组合成non-partitionedtable.
2.把数据导入到oracle8或者更低版本的数据库中去
表1:
把数据导入到oracle8或者更低版本的数据库我们可以使用什么版本的导出客户端
提示:
1)导入客户端可以读取由5.1.22或者更高版本(最高到和导入端版本一样)的导出端导出的exportdump文件
2)从Oracle7导出然后导入到oracle6数据库中:
用户SYS必须先在oracle7的数据库上运行CATEXP6.SQL脚本(这个脚本只需要在创建版本6视图的时候运行一次就可以了)。
3)把从Oracle8,Oracle8i导出的数据导入到Oracle7的数据库中:
用户SYS必须在Oracle8,Oracle8i数据库上运行CATEXP7.SQL脚本(这个脚本只需要在创建版本7视图的时候运行一次就可以了)。
4)只有oracle8版本(8.0.6)的终端才在oracle9i数据库中被支持:
使用oracle8导出客户端将数据oracle9i数据库中导出然后导入到8.0.6数据库中去。
6.3导入数据到Oracle8i或者更高版本的数据库中
图2:
当导入到oracle8以及更高版本的时候采用的导出客户端版本
提示:
1)导入客户端可以读取由5.1.22或者更高版本(最高到和导入客户端的版本一样)导出的dump文件
2)Oracle7导出转存和oracle8/oracle8i/oracle9i导入:
如果TO_DATE功能在约束中没有被使用那么数据列的检查约束会失效(这个在早期的版本是没有要求的)
3)为了在oracle10g或者更高的版本之间进行导入/导出的性能和灵活性更好,建议使用Expotdatadump(expdp)和Importdatapump(impdp)客户端。
范例
范例1:
从7.3.4导出然后导入到8.1.7
使用7.3.4导出客户端把数据从7.3.4的源数据库中导出
使用8.1.7导入客户端把数据导入到8.1.7目的数据库中
范例2:
从9.2.0.8导出然后导入到9.2.0.8
使用9.2.0.8导出客户端把数据从9.2.0.8的源数据库中导出
使用9.2.0.8导入客户端把数据导入到9.2.0.8目的数据库中
范例3:
从9.2.0导出然后导入到8.1.7
使用8.1.7导出客户端把数据从9.2.0的源数据库中导出
使用8.1.7导入客户端把数据导入到8.1.7目的数据库中
范例4:
从8.1.7.4导出然后导入到11.1.0.6
使用8.1.7.4导出客户端把数据从8.1.7.4的源数据库中导出
使用11.1.0.6导入客户端把数据导入到11.1.0目的数据库中
范例5:
从9.2.0导出然后导入到7.3.4不被支持;但是有如下变通的方案
使用8.1.7.4导出客户端把数据从9.2.0源数据库中导出
使用8.1.7.4的导入客户端把数据临时的导入到8.1.7.4.0数据库中
为了创建Oracle7数据字典视图需要在8.1.7.4数据库上运行CATEXP7.SQL脚本(如果以前运行过就不需要再运行了)
使用7.3.4导出客户端从临时的8.1.7.4数据库中把数据导出
使用7.3.4导入端把数据导入到7.3.4数据库
范例6:
从7.3.4导出然后导入到11.1.0
使用7.3.4导出客户端把数据从7.3.4数据库中导出
使用11.1.0导入端把数据导入到11.1.0数据库中
需要注意的是不支持使用FULL=Y模式导出和FULL=Y模式导出的迁移
范例7:
从10.1.0.5导出然后导入到10.2.0.4
使用10.1.0.5导出数据泵客户端(expdp)把数据从10.1.0.5数据库导出
使用10.2.0.4导入数据泵客户端(impdp)把数据导入10.2.0.4数据库中可能出现的出错信息
1.EXP-3(找不到XX段的存储定义)
原因:
找不到集群/索引/表的存储定义。
方法:
记录下错误信息,作为内部导出错误报告
建议:
参考Note274076.1:
“EXP-0003当使用早于9.2.0.5.0版本的导出客户端从9.2.0.5.0或者更高的版本进行导出”
2.EXP-24(没安装导出视图,请通知DBA)
原因:
没有安装必要的导出视图
方法:
让数据库管理员安装需要的导出视图
3.EXP-37(导出视图和数据库的版本不兼容)
原因:
导出工具的版本比数据库版本高,所以不兼容
方法:
使用和导出数据库一样版本的的导出工具
4.IMP-0(导入终止)
原因:
发生错误
方法:
检查错误信息然后采取合适的措施
5.IMP-9(导出文件的异常结束)
EXP-0003:
nostoragedefinitionfoundforsegment(%lu,%lu)
EXP-00024:
Exportviewsnotinstalled,pleasenotifyyourDBA
EXP-00037:
Exportviewsnotcompatiblewithdatabaseversion
IMP00000:
Importterminatedunsuccessfully
IMP-00009:
Abnormalendofofexportfile
原因:
这通常是由一个被取消的导出会话生成的导出文件引起的
方法:
检查这个文件是否是二进制模式。
如果这个导出文件是由一个被取消的导出会话生成的,重新尝试导入这个导出文件,或者把他作为一个导入错误报告。
6.IMP-10(不是一个有效的导出文件,文件头部错误)
原因:
可是这个文件不是利用导出工具导出的文件,或者这个导出文件被破坏了。
方法:
检查这个文件是否二进制模式。
如果这个文件确实是由导出工具导出的而且没有兼容性的问题,把它作为一个导出错误报告。
7.IMP-21(操作系统错误—错误代码(XXX))
原因:
操作系统错误。
这个错误可能和IMP-10或者IMP-69同时出现。
方法:
根据错误代码查看操作系统手册然后采取合适的措施,如果错误IMP-10或者IMP-69一起出现的话需要检查下兼容性的问题。
8.IMP-23(导入视图没有安装,请通知DBA)
原因:
导入视图没有安装
方法:
通知DBA安装导入视图
9.IMP-69(不能切换到环境国际字符集的处理)
原因:
内部错误
方法:
联系支持
IMP-10:
Notavalidexportfile,headerfailedverification
IMP-00021:
Operatingsystemerror—errorcode(dec%lu,hex0x%x)
IMP-23:
Importviewsnotinstalled,pleasenotifyyourDBA
IMP-00069:
Couldnotconverttoenvironmentnationalcharacterset’shandle
总结
1.权限
要使用导出客户端你必须在oracle数据库上有CREATRESESSION这个权限。
如果要导出其他用户的表,你必须启动EXP_FULL_DATABASE这个角色,这个角色被授给DBA用户。
2.OracleNET,OracleNet8和SQL*NET如果想在新版本的数据库上使用早期版本的导出客户端,你要使用
SQL*NE,Net8或者OracleNET来访问这个数据库。
3.直接路径导出
如果要在Oracle8i或者更高版本的数据库上使用Oracle7或者更低版本的导出客户端,必须使用默认的传统路径导出(不要在导出命令程序里设置DIRECT=YES)一个传统的路径导出使用SQLSELECT语句把数据
从表中提取出来而直接路径导出是饶过不使用SQL命令程序去直接读取数据(要考虑缓存大小)。
需要注意的是当你在Oracle8i或者更高版本的数据库上使用8.0版本的导出端同时你还设置了直接路径加载(DIRECT=Y)那么导出客户端是不能从包含对象和LOB’S的表中导出行。
4.导出数据转存和导入数据转存
我们已经介绍了在Oracle10g版本1(10.1.0.x)新引入的的导出数据转存(e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 数据库 迁移 版本 兼容问题
![提示](https://static.bdocx.com/images/bang_tan.gif)