Oracle9i客户端EXP导出高版本数据库中BLOB和CLOB大字段的问题

标题:Oracle9i客户端EXP导出高版本数据库中BLOB和CLOB大字段的问题


正文:

使用Oracle9i(版本:9.2.0.1.0)的客户端exp命令导出Oracle10g的数据库,当表中有BLOB或CLOB类型的字段时,会报如下的错误:

---------

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

---------

无法成功导出表。


经过查找资料和测试,发现可能是版本差异造成的一个问题。


经过如下操作可以修正该问题:


1.修改Oracle客户端的文件catexp.sql。

catexp.sql文件在Oracle客户端安装路径:../ora92/rdbms/admin/中。

在修改之前,备份catexp.sql文件。

打开catexp.sql文件,找到视图“exu9tne”。

然后把语句“UNION ALL select * from sys.exu9tneb”加入到视图exu9tne定义的最后一行。

形成如下样子:

---------

  CREATE OR REPLACE VIEW exu9tne (

  tsno, fileno, blockno, length) AS

  SELECT ts#, segfile#, segblock#, length

  FROM sys.uet$

  WHERE ext# = 1

  UNION ALL

  SELECT * from sys.exu9tneb

  /

---------


2.以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 * from sys.exu9tneb
  /

  GRANT SELECT ON sys.exu9tne TO PUBLIC;

  ----------

经过如上操作,即可在Oracle9i的客户端使用exp命令成功导出Oracle10g的数据库中含有BLOB或CLOB字段类型的表。

by JRQ

2009/02/20

你可能感兴趣的:(oracle,sql,ext,脚本)