之前的实验讲到了按照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
接下来实验一下,如果统计信息锁住了,如何进行处理。
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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26084062/viewspace-1474477/