今天测试的时候发现在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/