oracle 10g的dmp如何导入9i
oracle 10g的dmp如何导入9i
问题描述:如何将oracle 10g中的数据库对象迁移到9i中.这个10g和9i的服务器分别搭建在局域网的两个机器上,可以相互访问.
问题分析:在网上查了一些资料,表明要想将10g导出的dmp文件导入到9i中,是不可实现的.只能实现9i往10g中导.如果想要把10g中的数据导入到9i中,可以先到9i那台服务器上配置一个tnsnames.ora串,用于访问10g数据库,之后在9i服务器中用9i客户端提供的exp命令实现导出,再用imp命令实现导入.
10g导出的dmp往9i中导入,可能会报以下错误.
在安装有9i客户端执行导入命令时会报:
Sql代码
Import started on 2013-3-13 14:17:13
E:\oracle\ora92\bin\IMP.EXE log=C:\DOCUME~1\wangzh\LOCALS~1\Temp\plsimp.log file=D:\yusj\dqjz\dqjz20130308.dmp userid=dqjz/dqjz@ORCL buffer=30720 commit=no full=yes grants=yes ignore=yes indexes=yes rows=yes show=no constraints=yes
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
IMP-00010: 不是有效的导出文件,标题验证失败
IMP-00000: 未成功终止导入
Import finished on 2013-3-13 14:17:13
在安装有10g客户端执行导入命令时会报:
Sql代码
Import started on 2013-3-13 上午 11:13:02
D:\oracle\product\10.2.0\db_1\bin\imp.exe log=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\plsimp.log file=C:\dqjz20130308.dmp userid=dqjz/dqjz@ORCL_232 buffer=30720 commit=no full=yes grants=yes ignore=yes indexes=yes rows=yes show=no constraints=yes
IMP-00058: 遇到 ORACLE 错误 6550
ORA-06550: 第 1 行, 第 33 列:
PLS-00302: 必须说明 'SET_NO_OUTLINES' 组件
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
IMP-00000: 未成功终止导入
Import finished on 2013-3-13 上午 11:13:03
问题解决:
1. 在安装有9i客户端的机器中配置tnsnames.ora,保证可以正常连接到10g数据库.
2. 在安装有9i客户端的机器中执行exp命令导出dmp文件之前,需要解决一个问题,那就是对BLOB的支持,如果要导出的表中含有BLOB字段,那么在执行exp命令的时候会报EXP-00003错误,解决方法如下:需要先连接到10数据库,用sys用户登录,找到exu9tne视图(view),备份出来.再把执行下面SQL语句:
Sql代码
CREATE OR REPLACE VIEW SYS.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;
注意,在导出完数据之后,一个要把这个view恢复到初始值.
我本地的初始值为:
Sql代码
CREATE OR REPLACE VIEW SYS.EXU9TNE
(tsno, fileno, blockno, length)
AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1;
3. 在安装有9i客户端的机器中执行imp命令,完成导入操作(注意在导入之前一定要先建立相应的表空间,用户等).