EXP导出外部表报错(一)

今天测试的时候发现在10201环境中,利用EXP导出外部表报错。

 

 

这个外部表是以前建立的,脚本如下:

SQL> SET LONG 10000
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'T_EXTERNAL') FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','T_EXTERNAL')
---------------------------------------------------------------------

  CREATE TABLE "YANGTK"."T_EXTERNAL"
   (    "ID" NUMBER,
        "NAME" VARCHAR2(30)
   )
   ORGANIZATION EXTERNAL
    ( TYPE ORACLE_DATAPUMP
      DEFAULT DIRECTORY "D_OUTPUT"

      LOCATION
       ( 'TEST1.DMP'
       )
    )

这个外部表对应的数据文件本身并不存在,直接通过SQL访问会报错:

SQL> SELECT COUNT(*) FROM T_EXTERNAL;
SELECT COUNT(*) FROM T_EXTERNAL
*
1 行出现错误:
ORA-29913:
执行 ODCIEXTTABLEOPEN 调出时出错
ORA-29400:
数据插件错误KUP-11010: unable to open at least one dump file for load
ORA-06512:
"SYS.ORACLE_DATAPUMP", line 19

而如果使用EXP导出时,错误如下:

E:\>exp yangtk/yangtk file=t_external.dmp tables=t_external

Export: Release 10.2.0.1.0 - Production on 星期五 1 30 19:30:14 2009

Copyright (c) 1982, 2005, Oracle.  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 字符集

即将导出指定的表通过常规路径...
. .
正在导出表                      T_EXTERNAL
EXP-00002:
写入导出文件时出错
EXP-00056:
遇到 ORACLE 错误 1403
ORA-01403:
未找到数据
EXP-00002:
写入导出文件时出错
EXP-00000:
导出终止失败

导出经历了很长时间,然后报错,检查导出的文件,发现大小已经达到了3G左右,将所在磁盘空间完全占满,所以导致了上面的错误。

E:\>dir e:\t_external.dmp
 
驱动器 E 中的卷没有标签。
 
卷的序列号是 9037-19E7

 e:\ 的目录

2009-01-30  19:33     3,380,682,752 t_external.dmp
               1
个文件  3,380,682,752 字节
               0
个目录          8,192 可用字节

如果不导出数据,即使用ROWS=N,错误依旧。

而采用数据泵导出的话,则没有任何问题:

E:\>expdp yangtk/yangtk directory=d_output dumpfile=t_external.dp tables=t_external

Export: Release 10.2.0.1.0 - Production on 星期五, 30 1, 2009 19:26:56

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "YANGTK"."SYS_EXPORT_TABLE_01":  yangtk/******** directory=d_output dumpfile=t_external.dp tables=t_external
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 0 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
已成功加载/卸载了主表 "YANGTK"."SYS_EXPORT_TABLE_01"
******************************************************************************
YANGTK.SYS_EXPORT_TABLE_01
的转储文件集为:
  E:\DMP\T_EXTERNAL.DP
作业 "YANGTK"."SYS_EXPORT_TABLE_01" 已于 19:27:25 成功完成

检查了metalink,未发现类似的错误描述。

怀疑又找到了一个Oracle未发现的bug

下面新创建一个外部表,利用外部表卸载数据的功能,生成数据文件:

SQL> CREATE TABLE T_EXTERNAL2
  2  (
  3   ID,
  4   NAME
  5  )
  6  ORGANIZATION EXTERNAL
  7  (
  8   TYPE ORACLE_DATAPUMP
  9   DEFAULT DIRECTORY D_OUTPUT
 10   LOCATION ('TEST2.DMP')
 11  )
 12  AS SELECT ROWNUM, TNAME FROM TAB
 13  ;

表已创建。

SQL> SELECT * FROM T_EXTERNAL2 WHERE ROWNUM < 5;

        ID NAME
---------- ------------------------------
         1 T_PARTITION
         2 T_PART
         3 CHAINED_ROWS
         4 T_NO_EXISTS_BEFORE

尝试利用EXP工具导出这张表:

E:\>exp yangtk/yangtk file=t_external2.dmp tables=t_external2

Export: Release 10.2.0.1.0 - Production on 星期五 1 30 20:15:34 2009

Copyright (c) 1982, 2005, Oracle.  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 字符集

即将导出指定的表通过常规路径...
. .
正在导出表                     T_EXTERNAL2
EXP-00002:
写入导出文件时出错
EXP-00056:
遇到 ORACLE 错误 1403
ORA-01403:
未找到数据
EXP-00002:
写入导出文件时出错
EXP-00000:
导出终止失败

看来问题和表对应的数据文件是否存在没有关系。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-544807/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-544807/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值