ITPub博客

首页 > 数据库 > Oracle > 处理锁住的统计信息

处理锁住的统计信息

原创 Oracle 作者:wzz123snow 时间:2015-03-26 14:38:12 0 删除 编辑
之前的实验讲到了按照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博客 ” ,链接:https://blog.itpub.net/26084062/viewspace-1474477/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-11-13

  • 博文量
    27
  • 访问量
    411796