處理鎖住的統計資訊

wzz123snow發表於2015-03-26
之前的實驗講到了按照SCHEMA收集統計資訊的時候,不會收集統計資訊鎖住的表。
接下來實驗一下,如果統計資訊鎖住了,如何進行處理。
C:\Users\lenovo>sqlplus s1/s1@abc


SQL*Plus: Release 11.2.0.1.0 Production on 星期四 3月 26 14:17:08 2015


Copyright (c) 1982, 2010, Oracle.  All rights reserved.




連線到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> set linesize 9999 pagesize 9999
SQL> select table_name from user_tables;


TABLE_NAME
------------------------------
T1
T2




SQL> create table t3 as select *  from user_objects;


表已建立。


SQL> insert into t3 select *  from t3;


已建立3行。


SQL> /


已建立6行。


SQL> /


已建立12行。


SQL> /


已建立24行。


SQL> commit;


提交完成。


SQL> select table_name from user_tables;


TABLE_NAME
------------------------------
T1
T2
T3
SQL> select table_name,stattype_locked from user_tab_statistics ;


TABLE_NAME                     STATTYPE_L
------------------------------ ----------
T1
T2
T3
--此時SCHEMA下沒有被鎖住的表,所有的表都可以進行收集。
SQL> exec dbms_stats.gather_schema_stats('S1');


PL/SQL 過程已成功完成。


SQL> select table_name,last_analyzed from user_tables;


TABLE_NAME                     LAST_ANALYZED
------------------------------ -------------------
T1                             2015/03/26 14:23:37
T2                             2015/03/26 14:23:37
T3                             2015/03/26 14:23:37


--這個時候鎖住T3表的統計資訊
SQL> exec dbms_stats.lock_table_stats('S1','T3');


PL/SQL 過程已成功完成。


SQL> select table_name,stattype_locked from user_tab_statistics ;


TABLE_NAME                     STATTYPE_L
------------------------------ ----------
T1
T2
T3                             ALL


SQL> select table_name,stattype_locked from user_tab_statistics ;


TABLE_NAME                     STATTYPE_L
------------------------------ ----------
T1
T2
T3                             ALL


然後再按照SCHEMA收集統計資訊。
SQL> exec dbms_stats.gather_schema_stats('S1');


PL/SQL 過程已成功完成。


SQL> select table_name,last_analyzed from user_tables;


TABLE_NAME                     LAST_ANALYZED
------------------------------ -------------------
T1                             2015/03/26 14:29:47
T2                             2015/03/26 14:29:47
T3                             2015/03/26 14:23:37
--發現T3的統計資訊並沒有變化,LAST_ANALYZED還是上次的時間。


--我們把T3表的統計資訊解鎖。
SQL> exec dbms_stats.unlock_table_stats('S1','T3');


PL/SQL 過程已成功完成。


SQL> select table_name,stattype_locked from user_tab_statistics ;


TABLE_NAME                     STATTYPE_L
------------------------------ ----------
T1
T2
T3


SQL> exec dbms_stats.gather_schema_stats('S1');


PL/SQL 過程已成功完成。


SQL> select table_name,last_analyzed from user_tables;


TABLE_NAME                     LAST_ANALYZED
------------------------------ -------------------
T1                             2015/03/26 14:31:04
T2                             2015/03/26 14:31:04
T3                             2015/03/26 14:31:04

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

相關文章