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

oracle不同版本数据库的导入导出规则

2012-03-06 21:20 423 查看
Oracle的imp/exp组件是我们常用的工具,它的一个操作原则就是向下兼容。

下面是据此总结的几个使用规则和相关测试:

规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,

但高版本的exp/imp不能连接到低版本的数据库服务器

--1.1 使用9i客户端通过imp连接到10g数据库OK

注意,当10g数据库中遇到有大对象(BLOB, CLOB)的表时,也会出现错误:EXP-00003

EXP-00003:未找到段(4,99363)的存储定义

这个错误网上号称可以通过修改系统视图EXU9TNE解决,没有验证过:

具体的视图为: EXU9TNE

该视图初始创建时的位置为: $ORACLE_HOME/rdbms/admin/catexp.sql里

初始的定义为:

CREATE OR REPLACE VIEW EXU9TNE

(tsno, fileno, blockno, length)

AS

SELECT ts#, segfile#, segblock#, length

FROM sys.uet$

WHERE ext# = 1

以sys用户登录数据库服务器重新建立该视图:

CREATE OR REPLACE VIEW EXU9TNE

(tsno, fileno, blockno, length)

AS

SELECT ts#, segfile#, segblock#, length

FROM sys.uet$

WHERE ext# = 1

UNION ALL select "TSNO","FILENO","BLOCKNO","LENGTH" from sys.exu9tneb

--1.2 使用10g客户端通过imp连接9i数据库:连接失败(而不是导出失败)

EXP-00056: 遇到 ORACLE 错误 6550

ORA-06550: 第 1 行, 第 41 列:

PLS-00302: 必须说明 'SET_NO_OUTLINES' 组件

ORA-06550: 第 1 行, 第 15 列:

PL/SQL: Statement ignored

EXP-00000: 导出终止失败

规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件)

--2.1 使用10g客户端exp出10g的数据OK

--2.2 使用9i客户端imp上面所导出的dmp文件到10g或者9i:可以连接到10g中,但无法识别文件

IMP-00010: 不是有效的导出文件,标题验证失败

IMP-00000: 未成功终止导入

即9i的客户端无法识别10g客户端imp出的文件格式

C:\Documents and Settings\yuechaotian>

规则3:低版本exp出的dmp文件,高版本可以imp(向下兼容)

-- 3.1 使用9i客户端exp出9i中的数据OK

-- 3.2 使用10g客户端imp上一步的数据到10g数据库中OK

规则4:从Oracle 低版本的Export数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,

如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8,

则应先将数据输入到中间版本—Oracle 7,再从中间数据库转入更高版本。

--我使用10g的imp功能,可以将由817导出的dmp文件直接导入10g中,这与该规则的介绍不同。

(该规则出自高道强的《Oracle导入导出工具实现数据库移植》)

综上所述,如果想把一个10g数据库中的数据导入到9i数据库中,只有一个方法:

用9i的客户端exp出10g的数据,然后再imp进9i,而且此时10g的库中还不能有大对象(BLOB, CLOB)的表

如果现场只有10g的客户端,导回了10g数据库的数据,在所里可以先用10g的客户端导入到一个10g的中间

库中,然后再用9i的客户端exp出10g中间库的数据,然后再imp进9i数据库

用9i的客户端在两个10g数据库倒换数据也是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: