关于Oracle Exp-00003问题的解决方法
前天在导数据的时候发生了Exp-00003的错误,以前也遇到过这样的问题,当时的解决方法是到数据库服务器本机上导,问题解决了,但是这次是从oracle 9.2.0.1.0客户端上导出(而数据库服务器是10.2.0.1.0),要求是用9.2.0.1.0的export导出,因为导出的DMP文件要导入到9.2.0.1.0上,因此到本机上导出的方法行不通,经过查找相应的文档问题解决了,下面把解决方法作个记录。
D:\hanganbuild>exp file=c:\0425.dmp tables=sys_news
Export: Release 9.2.0.1.0 - Production on 星期三 4月 25 13:24:34 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 SYS_NEWS
EXP-00003: 未找到段 (4,99363) 的存储定义
导出成功终止,但出现警告。
遇到这样的情况解决的办法有两个:一个就是上面提到的到服务器本机上导出,但这时的DMP文件会和服务器本机上的EXPORT版本一致。
第二种方法就是更改数据库服务器端的oracle系统的视图定义:
具体的视图为: 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
注意就是增加上面标红的语句
然后再试下就应该OK了。
D:\hanganbuild>exp file=c:\0425.dmp tables=sys_news
Export: Release 9.2.0.1.0 - Production on 星期三 4月 25 13:36:31 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的表通过常规路径 ...
. . 正在导出表 SYS_NEWS 4999 行被导出
在没有警告的情况下成功终止导出。
(注意:Oracle的系统视图最好不要轻易改动,操作执行完后,最好是改回原来的视图)