oracle不同版本之间的导入导出
oracle不同版本之间的导入导出
不同版本oracle导入导出解决办法。
今天遇到一个比较特殊的情况,需要在oracle8中使用oracle9的数据,如是导入导出。费了大半天,从oracle9中导出的数据就是无法导入oracle8中。
后来上网查询才知道,oracle不同版本之间的导入导出,不同于同版本导入导出。 有些规则要遵循:
一篇文章这样说:
如果版本不一致的话,在数据库之间exp、imp数据的应该遵循的规则:
1、imp工具的版本应该和目标数据库的版本一致;
2、exp工具的版本应该与源数据库和目标数据库中版本最低的一个相一致
另一片文章这样说:
规则一:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8,则应先将数据输入到中间版本—Oracle 7,再从中间数据库转入更高版本。
规则二:Oracle的Export/Import工具只能连接到拥有更高或者一样的Export/Import版本的数据库。如Oracle 8.0.5的Export/Import(版本8.0.5.0.0)可连接到Oracle 8.1.6数据库(版本8.1.6.0.0);高版本的Export导出来的转储文件,低版本的Import读不了;低版本的Export导出来的转储文件,高版本的Import可以进行读取。
这两中说法基本相同。
那如何解决呢?
实例:
比如机器A oracle9
机器B oralce8
如果机器B想要使用机器A的数据。
我这里有两个办法:
第一种: 这一种比较简单,步骤如下:
通过机器B连接到机器A,然后导出数据库,然后再导入到机器B中,即可完成。
如果两台机器无法连接。 只好使用第二种办法。
1、在高版本数据库上运行底版本的catexp.sql;
2、使用低版本的EXP来导出高版本的数据;
3、使用低版本的IMP将数据库导入到低版本数据库中;
4、在高版本数据库上重新运行高版本的catexp.sql脚本。
但在9i中,上面的方法并不能解决问题。如果直接使用低版本EXP/IMP会出现如下错误:
EXP-00008: ORACLE error %lu encountered
ORA-00904: invalid column name
这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261722,你可以到METALINK上去查看有关此BUG的详细信息。
BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。
CREATE OR REPLACE view exu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
from user$ u, obj$ o, rls$ r
where u.user# = o.owner#
and r.obj# = o.obj#
and (uid = 0 or
uid = o.owner# or
exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
)
/
grant select on sys.exu81rls to public;
/
当在不相邻的主要版本之间迁移数据 (例如,从O r a c l e 6到O r a c l e 8 )时,应先将数据导入到
中间版本(本例中是O r a c l e 7 ),然后再从这个版本的数据库导入更新的主要版本 ( O r a c l e 8 )。
总结:
可以跨版本的使用EXP/IMP,但必须正确地使用EXP和IMP的版本:
1.总是使用IMP的版本匹配数据库的版本,如:要导入到817中,使用817的IMP工具.
2.总是使用EXP的版本匹配两个数据库中最低的版本,如:从9201往817中导入,则使用817版本的EXP工具.