現在已經找到了問題的原因,並且也找到瞭解決問題的方法,但是導致問題的原因還不清楚。
也就是說,要找到為什麼這幾個分區表的統計資訊被鎖住。
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