oracle数据泵导入分区表统计信息报错(一)

今天在进行数据泵导入操作时,发现一个bug。




数据库版本Oracle 10203 for Solaris RAC,执行导入在处理表的统计信息时报错,错误信息为:ORA-39083和ORA-917。


经过仔细排查,对比源数据库分析情况和目标数据库的表分析情况,发现所有的分区表的统计信息都没有导入。


基本确认问题是IMPDP在处理分区表的统计信息时出现了问题。


可惜现在问题无法通过构造案例来重现:在目标数据库中(RAC环境)尝试建立分区表并执行数据泵的导出和导入,无法重现问题。将源数据库中出现问题的分区表导入后,仿照源数据库方式收集统计信息,问题仍然无法重现。


不过只要将源数据库中的统计信息导出,并在目标数据库导入,就可以重现这个问题:


bash-2.03$ impdp test/test directory=d_test dumpfile=zhejiang_order.dp logfile=zhejiang_order.log remap_schema=zhejiang:test include=table/statistics


Import: Release 10.2.0.3.0 - 64bit Production on 星期一, 31 12月, 2007 2:49:30


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


连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production


With the Partitioning, Real Application Clusters, OLAP and Data Mining options已成功加载/卸载了主表 "TEST"."SYS_IMPORT_FULL_01" 启动 "TEST"."SYS_IMPORT_FULL_01": test/******** directory=d_test dumpfile=zhejiang_order.dp logfile=zhejiang_order.log remap_schema=zhejiang:test include=table/statistics 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS


ORA-39083: 对象类型 TABLE_STATISTICS 创建失败, 出现错误:


ORA-06550: 第 12 行, 第 17 列:


PL/SQL: ORA-00917: 缺失逗号


ORA-06550: 第 4 行, 第 115 列:


PL/SQL: SQL Statement ignored


ORA-06550: 第 20 行, 第 17 列:


PL/SQL: ORA-00917: 缺失逗号


ORA-06550: 第 12 行, 第 161 列:


PL/SQL: SQL Statement ignored


ORA-06550: 第 28 行, 第 17 列:


PL/SQL: ORA-00917: 缺失逗号


ORA-06550: 第 20 行, 第 161 列:


PL/SQL: SQL Statement ignored


ORA-06550: 第 36 行, 第 17 列:


PL/SQL: ORA-00917: 缺失逗号


ORA-06550: 第 28 行, 第 1作业 "TEST"."SYS_IMPORT_FULL_01" 已经完成, 但是有 1 个错误 (于 02:49:38 完成)


根据关键信息在metalink进行查询,只发现一篇文章在测试别的bug时碰到这个问题,但是Oracle的开发人员并未对这个问题进行处理。


短时间之内找不到导致问题的真正原因,只好先记录一下问题可能发生的原因和环境。这个问题说大不大,只要在导入后重新收集一下分区表的信息即可,但是说小也不小,如果忽略了这个错误,缺少统计信息的是分区表,一般来说分区表都是系统中的大表,访问也比较频繁,更重要的是,由于分区表的存在Oracle肯定会使用CBO作为优化模式,这时就会使用默认的统计信息,或者利用动态收集的信息,很可能会产生一些效率很差的执行计划,导致整个系统的瘫痪。



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

你可能感兴趣的:(oracle,数据泵导入分区表统计信息报错,oracle数据泵)