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

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数据库倒换数据也是可以的。


 

你可能感兴趣的:(oracle,职场,exp,休闲)