物件統計資訊鎖定的解決辦法(ORA-20005/ORA-38029)

lastwinner發表於2012-05-24
昨天我從9i R2裡匯出了幾張表,然後匯入到11g R2中,在匯入成功後我要收集下這些表的資訊,結果發現好幾張表都沒法收集,用DBMS_STATS包顯示ORA-20005:object statistics are locked (stattype = ALL),用Analyze命令顯示ORA-38029: 物件統計資訊已鎖定。

解決辦法很明確,就是解鎖。
可以從兩個層面去處理:
A、解鎖Schema
DBMS_STATS.UNLOCK_schema_STATS(user);

B、解鎖單個物件
1)先查出被鎖定的表select table_name from user_tab_statistics where stattype_locked is not null;
然後再解鎖物件
exec dbms_stats.unlock_table_stats(user,'表名');
2)也可直接生成sql指令碼
select 'exec dbms_stats.unlock_table_stats('''||user||''','''||table_name||''');' from user_tab_statistics where stattype_locked is not null;
這裡不在生成的sql中用動態的user是為了讓執行者明確知道到底是解鎖哪個schema下的表,防止誤操作。


不過,你要特別注意,Oracle為什麼會要鎖定住統計資訊?
一般而言,這是為了穩定執行計劃,因為在Oracle 10g以上,Oracle預設會自動收集統計資訊,要想鎖住統計資訊,請使用LOCK_SCHEMA_STATS、LOCK_TABLE_STATS包。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29867/viewspace-730902/,如需轉載,請註明出處,否則將追究法律責任。

相關文章