前不久检查了一篇以往的BLOG,意外的发现这个bug居然被我忘记了,时隔一年继续解决这个问题。
根据上一篇文章所介绍的分析过程,基本上可以确认和这几张分区表的统计信息本身有关。
由于当前数据库是从920环境EXP导出,IMP导入到同版本的中间数据库,最终通过数据泵IMPDP导入到当前数据库的。而分区表由于无法解决表空间的转换问题,因此在中间数据库手工创建,在IMP导入的时候指定了IGNORE=Y参数。
而现在恰好问题出在这个用户的所有分区表上,难道问题和迁移的过程有关系。检查了当时的脚本,没有发现异常之处。
不过由于原始数据的版本是9204,而迁移后的版本是10203,有可能是版本的不同导致了迁移过程中某些参数的设置发生了变化。
表的存储参数中与统计信息相关的就是MONITORING了。这个存储参数比较有意思,从9i开始引入,到了10g及以后版本中,这个参数又消失了。并不是Oracle认为这个参数没有意义而去掉了,而是Oracle认为这个MONITORING功能的代价很小,而对于统计信息十分有帮助,因此变成了Oracle的默认的行为,只留下了一个隐含参数来控制是否进行MONITORING的操作。
检查这几个表的MONITORING属性,发现值都是YES:
SQL> SELECT TABLE_NAME, MONITORING
2 FROM USER_TABLES
3 WHERE TABLE_NAME IN
4 (SELECT TABLE_NAME FROM USER_PART_TABLES);
TABLE_NAME MON
------------------------------ ---
EMED_WEB_LOG YES
ORD_LOG_HIT_COMM YES
ORD_PURCHASE_ITEM YES
ORD_ORDER_ITEM YES
ORD_ORDER YES
CON_LOG_LIST_ITEM YES
已选择6行。
但是10g和9i的数据字典中MONITORING的值的来源是不同的,在9i中:
SQL> SELECT TEXT FROM DBA_VIEWS WHERE VIEW_NAME = 'DBA_TABLES';
TEXT
--------------------------------------------------------------------------------
select u.name, o.name, decode(bitand(t.property, 4194400), 0, ts.name, null),
decode(bitand(t.property, 1024), 0, null, co.name),
decode((bitand(t.property, 512)+bitand(t.flags, 536870912)),
0, null, co.name),
decode(bitand(t.property, 32+64), 0, mod(t.pctfree$, 100), 64, 0, null),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(t.property, 32+64), 0, t.pctused$, 64, 0, null)),
decode(bitand(t.property, 32), 0, t.initrans, null),
decode(bitand(t.property, 32), 0, t.maxtrans, null),
s.iniexts * ts.blocksize,
decode(bitand(ts.flags, 3), 1, to_number(NULL),
s.extsize * ts.blocksize),
s.minexts, s.maxexts,
decode(bitand(ts.flags, 3), 1, to_number(NULL),
s.extpct),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(o.flags, 2), 2, 1, decode(s.lists, 0, 1, s.lists))),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(o.flags, 2), 2, 1, decode(s.groups, 0, 1, s.groups))),
decode(bitand(t.property, 32), 32, null,
decode(bitand(t.flags, 32), 0, 'YES', 'NO')),
decode(bitand(t.flags,1), 0, 'Y', 1, 'N', '?'),
t.rowcnt,
decode(bitand(t.property, 64), 0, t.blkcnt, null),
decode(bitand(t.property, 64), 0, t.empcnt, null),
t.avgspc, t.chncnt, t.avgrln, t.avgspc_flb,
decode(bitand(t.property, 64), 0, t.flbcnt, null),
lpad(decode(t.degree, 32767, 'DEFAULT', nvl(t.degree,1)),10),
lpad(decode(t.instances, 32767, 'DEFAULT', nvl(t.instances,1)),10),
lpad(decode(bitand(t.flags, 8), 8, 'Y', 'N'),5),
decode(bitand(t.flags, 6), 0, 'ENABLED', 'DISABLED'),
t.samplesize, t.analyzetime,
decode(bitand(t.property, 32), 32, 'YES', 'NO'),
decode(bitand(t.property, 64), 64, 'IOT',
decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null
本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45381.htm