您的位置:首页 > 数据库 > Oracle

oracle 不同版本之间的导入导出

2013-05-14 09:21 309 查看
不同版本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工具.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: