当前位置:数据库 > Oracle >>

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工具.
 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,