现在已经找到了问题的原因,并且也找到了解决问题的方法,但是导致问题的原因还不清楚。
也就是说,要找到为什么这几个分区表的统计信息被锁住。
Oracle的DBMS_STATS包提供了LOCK_TABLE_STATS过程,但是当前的问题显然不是手工调用这个过程造成的。
所有了一下metalink,发现Oracle在文档Doc ID: 433240.1中描述了统计信息被锁定的可能性:
手工执行DBMS_STATS包的LOCK_TABLE_STATS过程;
使用imp或impdp,导入表的时候不加载数据,会锁住表的统计信息;
在升级过程中,队列表的统计信息可能被锁定。
前面已经排除了手工执行LOCK_TABLE_STATS的可能性,而出现问题的表又不是队列表,显然第二种情况导致问题的可能性最大。
由于迁移确实是用IMP和IMPDP实现的,但是由于距离迁移的时间太长,导致一些具体的操作已经记不清了。而且由于服务器空间的问题,一些迁移时的log脚本已经被清除掉了。因此找到当时具体的操作很困难了。
如果根据当时的迁移步骤,是不存在只导入结构而没有导入数据的情况的。
根据记忆描述一下迁移的步骤:
在9i的源数据库用exp导出了数据;
由于要转换表空间,以及去掉物化视图日志等信息,避免导入过程对产品环境导致的危害,设立了一个10g的中间数据库;
在中间数据库上手工建立了分区表,然后用imp指定ignore=y导入所有的表;
在中间数据库进行数据的清理工作;
在中间数据库执行expdp导出;
在目标数据库上执行impdp导入。
如果说发生过imp操作,可能在中间数据库上执行过。不过检查统计信息的生成时间,实在对象的创建之后,而且间隔几个小时之久:
SQL> conn zhejiang输入口令: 已连接。
SQL> set pages 100 lines 120
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
会话已更改。
SQL> select object_name, created
2 from user_objects a, user_part_tables b
3 where a.object_name = b.table_name
4 and a.object_type = 'TABLE';
OBJECT_NAME CREATED
------------------------------ -------------------
CON_LOG_LIST_ITEM 2007-05-03 10:17:40
ORD_ORDER 2007-05-03 10:18:06
ORD_ORDER_ITEM 2007-05-03 10:18:15
ORD_PURCHASE_ITEM 2007-05-03 10:18:26
ORD_LOG_HIT_COMM 2007-05-03 11:12:34
EMED_WEB_LOG 2008-06-24 17:06:59
已选择6行。
SQL> select a.table_name, last_analyzed
2 from user_tables a, user_part_tables b
3 where a.table_name = b.table_name;
TABLE_NAME LAST_ANALYZED
------------------------------ -------------------
CON_LOG_LIST_ITEM 2007-05-03 15:33:19
ORD_ORDER 2007-05-03 15:23:42
ORD_ORDER_ITEM 2007-05-03 15:30:25
ORD_PURCHASE_ITEM 2007-05-03 15:33:17
ORD_LOG_HIT_COMM 2007-05-03 15:33:45
EMED_WEB_LOG 2009-08-09 01:07:31
已选择6行。
这说明在对象导入后,成功的收集过一次统计信息。
莫非是在系统迁移之后,执行过IMP或IMPDP的导入,这个问题的产生和迁移没有关系。统计信息的收集时间与迁移时间发生在同一天,且间隔比较接近,而且此后这些分区表就没有再被分析过,要说这个问题和迁移没有关系,显然难以令人信服。更重要的是,除了迁移过程,平常基本上没有可能对产品环境执行IMP或IMPDP的操作。
由于系统上的日志信息已经都丢失了,只能依靠数据库中保存的信息了。
检查数据库中对象的创建时间,看看能否发现一些什么:
SQL> select object_name, object_type, created
2 from user_objects
3 where created < to_date('2007-5-4', 'yyyy-mm-dd')
4 order by created;
OBJECT_NAME OBJECT_TYPE CREATED
------------------------------ ------------------- -------------------
CON_LOG_LIST_ITEM TABLE PARTITION 2007-05-03 10:17:40
CON_LOG_LIST_ITEM TABLE PARTITION 2007-05-03 10:17:40
CON_LOG_LIST_ITEM TABLE 2007-05-03 10:17:40
CON_LOG_LIST_ITEM TABLE PARTITION 2007-05-03 10:17:40
CON_LOG_LIST_ITEM TABLE PARTITION 2007-05-03 10:17:40
CON_LOG_LIST_ITEM TABLE PARTITION 2007-05-03 10:17:40
ORD_ORDER TABLE PARTITION 2007-05-03 10:18:06
ORD_ORDER TABLE PARTITION 2007-05-03 10:18:06
ORD_ORDER TABLE 2007-05-03 10:18:06
本文URL地址:http://www.bianceng.cn/database/Oracle/201410/45383.htm