exp导出时出现ora-00904和ora-01003错误,不能成功导出
数据库服务器OS:2台Solaris 5.9做rac
数据库版本:9.2.0.5
数据库客户端OS:Windows Server2003
数据库客户端版本:9.2.0.1
当我在用exp命令在客户端导出某一个模式的数据时,出现EXP-00008,ORA-00904, ORA-01003等错误,无法正常导出,详见如下导出日志:
D:\>exp system/manager@nodeora file=scdljg.dmp log=scdljg.log owner=scdljg
Export: Release 9.2.0.1.0 - Production on 星期五 3月 26 09:48:20 2010
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
即将导出指定的用户...
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 SCDLJG 的外部函数库名称
. 导出 PUBLIC 类型同义词
. 导出私有类型同义词
. 正在导出用户 SCDLJG 的对象类型定义
即将导出 SCDLJG 的对象 ...
. 正在导出数据库链接
. 正在导出序号
. 正在导出群集定义
. 即将导出 SCDLJG 的表通过常规路径 ...
. . 正在导出表 ACC_T_ACCOUNTBALANCE 2101 行被导出
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: : 无效的标识符
. . 正在导出表 ACC_T_ACCOUNTCHECKITEM 40 行被导出
EXP-00008: 遇到 ORACLE 错误 1003
ORA-01003: 语句未进行语法分析
. . 正在导出表 ACC_T_ACCTBAL_MONTH 0 行被导出
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: : 无效的标识符
. . 正在导出表 ACC_T_BUDITEMACCOUNTBALANCE 12 行被导出
EXP-00008: 遇到 ORACLE 错误 1003
ORA-01003: 语句未进行语法分析
. . 正在导出表 ACC_T_CHECKITEM 555 行被导出
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: : 无效的标识符
. . 正在导出表 ACC_T_CHECKITEMVALUEINIT 668 行被导出
EXP-00008: 遇到 ORACLE 错误 1003
ORA-01003: 语句未进行语法分析
…………(中间省略部分)
. . 正在导出表 PRO_T_PROJBUDCHANGEDETAIL 0 行被导出
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: : 无效的标识符
. . 正在导出表 PRO_T_PROJBUDCHANGEINFO 0 行被导出
EXP-00008: 遇到 ORACLE 错误 1003
ORA-01003: 语句未进行语法分析
. . 正在导出表 PRO_T_PROJBUDCOLS 0 行被导出
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: : 无效的标识符
. . 正在导出表 PRO_T_PROJBUDCOLSCHANGE
EXP-00008: 遇到 ORACLE 错误 1000
ORA-01000: 超出打开游标的最大数
ORA-06512: 在"SYS.DBMS_EXPORT_EXTENSION", line 16
ORA-06512: 在"SYS.DBMS_EXPORT_EXTENSION", line 40
ORA-06512: 在"SYS.DBMS_EXPORT_EXTENSION", line 117
ORA-06512: 在line 1
EXP-00056: 遇到 ORACLE 错误 1000
ORA-01000: 超出打开游标的最大数
EXP-00000: 导出终止失败
我Google了很久,但网上提供的解决方法都不能解决问题。比如:
1.执行RDBMS\ADMIN\catexp.sql脚本
2.以SYSTEM用户打开事件904,再执行export, 在user_dump_dest目录下会生成了一个trace文件
alter system set events='904 trace name errorstack';
但我在两台数据库中都成功执行了这条语句,但在每台数据库的user_dump_dest目录中都找不到trace文件,因此后面 的步骤就没法进行了。
偶然间我发现,exp时加上statistics=none参数,就可以成功导出,不再报任何错误。
exp system/manager@nodeora file=scdljg.dmp log=scdljg.log owner=scdljg statistics=none
statistics参数的默认值是estimate,我理解是如果数据库中的统计信息过期,再执行导出时就重新估算。于是我用以下面语句成功地对整个数据库执行了全面的分析,但仍然没有解决该问题。
exec dbms_stats.gather_database_stats();
请大家帮帮忙啊,看看我这个应该怎么办?