ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 10g统计信息增加恢复功能(二)

10g统计信息增加恢复功能(二)

原创 Linux操作系统 作者:yangtingkun 时间:2010-10-24 23:00:48 0 删除 编辑

从10g开始,Oracle可以恢复错误的统计信息。

这篇简单恢复统计信息的相关函数和过程。

10g统计信息增加恢复功能(一):http://yangtingkun.itpub.net/post/468/507491

 

 

上一篇简单介绍了恢复统计信息的方法,这一篇介绍相关的视图和函数。

在上一篇提到了如果要恢复统计信息,必须提供恢复的TIMESTAMP,而这个时间戳通过USER_TABLES视图是无法获得准确信息的,因此对于表而言,可以查询USER_TAB_STATS_HISTORY视图,而对于SCHEMA和数据库级的恢复时间戳可以查询DBA_OPTSTAT_OPERATIONS视图:

SQL> SELECT OPERATION,
  2  TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') START_TIME,
  3  TO_CHAR(END_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') END_TIME
  4  FROM DBA_OPTSTAT_OPERATIONS;

OPERATION                      START_TIME                           END_TIME
------------------------------ ------------------------------------ ------------------------------------
gather_database_stats(auto)    2010-09-23 22:00:01.896829 +08:00    2010-09-23 22:00:10.791628 +08:00
gather_database_stats(auto)    2010-09-24 22:00:02.928340 +08:00    2010-09-24 22:00:18.671629 +08:00
gather_database_stats(auto)    2010-09-25 06:00:04.506349 +08:00    2010-09-25 06:00:19.210098 +08:00
gather_database_stats(auto)    2010-09-27 22:00:03.031536 +08:00    2010-09-27 22:00:21.163297 +08:00
gather_database_stats(auto)    2010-09-28 22:00:00.210947 +08:00    2010-09-28 22:00:20.981982 +08:00
gather_database_stats(auto)    2010-09-29 22:00:01.531744 +08:00    2010-09-29 22:00:11.544685 +08:00
gather_database_stats(auto)    2010-10-11 22:00:02.290130 +08:00    2010-10-11 22:00:25.104684 +08:00
gather_database_stats(auto)    2010-10-12 22:00:01.351698 +08:00    2010-10-12 22:00:20.560877 +08:00
gather_database_stats(auto)    2010-10-13 22:00:02.348621 +08:00    2010-10-13 22:00:21.802732 +08:00
gather_database_stats(auto)    2010-10-14 22:00:02.484677 +08:00    2010-10-14 22:00:11.928128 +08:00
gather_database_stats(auto)    2010-10-15 22:00:00.713935 +08:00    2010-10-15 22:00:15.028450 +08:00
gather_database_stats(auto)    2010-10-16 06:00:04.560163 +08:00    2010-10-16 06:00:07.685812 +08:00
gather_database_stats(auto)    2010-10-18 22:00:01.796532 +08:00    2010-10-18 22:00:16.815746 +08:00
gather_database_stats(auto)    2010-10-19 22:00:02.761516 +08:00    2010-10-19 22:00:16.051881 +08:00
gather_database_stats(auto)    2010-10-20 22:00:02.855247 +08:00    2010-10-20 22:00:15.642001 +08:00
gather_database_stats(auto)    2010-10-21 22:00:00.977750 +08:00    2010-10-21 22:00:14.674787 +08:00
gather_database_stats(auto)    2010-10-22 22:00:02.768465 +08:00    2010-10-22 22:00:14.866542 +08:00
gather_database_stats(auto)    2010-10-23 06:00:04.238141 +08:00    2010-10-23 06:00:15.393996 +08:00

18 rows selected.

SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER)

PL/SQL procedure successfully completed.

SQL> SELECT OPERATION,
  2  TARGET,
  3  TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') START_TIME,
  4  TO_CHAR(END_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') END_TIME
  5  FROM DBA_OPTSTAT_OPERATIONS;

OPERATION                      TARGET START_TIME                           END_TIME
------------------------------ ------ ------------------------------------ ---------------------------------
gather_schema_stats            TEST   2010-10-24 19:07:20.865619 +08:00    2010-10-24 19:09:05.966690 +08:00
gather_database_stats(auto)           2010-09-23 22:00:01.896829 +08:00    2010-09-23 22:00:10.791628 +08:00
gather_database_stats(auto)           2010-09-24 22:00:02.928340 +08:00    2010-09-24 22:00:18.671629 +08:00
gather_database_stats(auto)           2010-09-25 06:00:04.506349 +08:00    2010-09-25 06:00:19.210098 +08:00
gather_database_stats(auto)           2010-09-27 22:00:03.031536 +08:00    2010-09-27 22:00:21.163297 +08:00
gather_database_stats(auto)           2010-09-28 22:00:00.210947 +08:00    2010-09-28 22:00:20.981982 +08:00
gather_database_stats(auto)           2010-09-29 22:00:01.531744 +08:00    2010-09-29 22:00:11.544685 +08:00
gather_database_stats(auto)           2010-10-11 22:00:02.290130 +08:00    2010-10-11 22:00:25.104684 +08:00
gather_database_stats(auto)           2010-10-12 22:00:01.351698 +08:00    2010-10-12 22:00:20.560877 +08:00
gather_database_stats(auto)           2010-10-13 22:00:02.348621 +08:00    2010-10-13 22:00:21.802732 +08:00
gather_database_stats(auto)           2010-10-14 22:00:02.484677 +08:00    2010-10-14 22:00:11.928128 +08:00
gather_database_stats(auto)           2010-10-15 22:00:00.713935 +08:00    2010-10-15 22:00:15.028450 +08:00
gather_database_stats(auto)           2010-10-16 06:00:04.560163 +08:00    2010-10-16 06:00:07.685812 +08:00
gather_database_stats(auto)           2010-10-18 22:00:01.796532 +08:00    2010-10-18 22:00:16.815746 +08:00
gather_database_stats(auto)           2010-10-19 22:00:02.761516 +08:00    2010-10-19 22:00:16.051881 +08:00
gather_database_stats(auto)           2010-10-20 22:00:02.855247 +08:00    2010-10-20 22:00:15.642001 +08:00
gather_database_stats(auto)           2010-10-21 22:00:00.977750 +08:00    2010-10-21 22:00:14.674787 +08:00
gather_database_stats(auto)           2010-10-22 22:00:02.768465 +08:00    2010-10-22 22:00:14.866542 +08:00
gather_database_stats(auto)           2010-10-23 06:00:04.238141 +08:00    2010-10-23 06:00:15.393996 +08:00

19 rows selected.

可以看到,数据库中保留了一个月的统计信息备份。除了查询数据字典外,DBMS_STATS包还提供了查询统计信息可恢复时间戳以及统计信息保留的日期:

SQL> SELECT DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY FROM DUAL;

GET_STATS_HISTORY_AVAILABILITY
---------------------------------------------------------------------------
22-9
月 -10 10.10.40.834379000 下午 +08:00

SQL> SELECT DBMS_STATS.GET_STATS_HISTORY_RETENTION FROM DUAL;

GET_STATS_HISTORY_RETENTION
---------------------------
                         31

GET_STATS_HISTORY_AVAILABILITY返回统计信息可以恢复的最早的时间戳,而GET_STATS_HISTORY_RETENTION函数返回的是当前系统中统计信息备份保留的时间。

SQL> EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(20)                  

PL/SQL procedure successfully completed.

SQL> SELECT DBMS_STATS.GET_STATS_HISTORY_RETENTION FROM DUAL;

GET_STATS_HISTORY_RETENTION
---------------------------
                         20

SQL> SELECT OPERATION,
  2  TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') START_TIME,
  3  TO_CHAR(END_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') END_TIME
  4  FROM DBA_OPTSTAT_OPERATIONS;

OPERATION                      START_TIME                           END_TIME
------------------------------ ------------------------------------ ------------------------------------
gather_schema_stats            2010-10-24 19:07:20.865619 +08:00    2010-10-24 19:09:05.966690 +08:00
alter_stats_history_retention  2010-10-24 19:37:04.721652 +08:00    2010-10-24 19:37:04.788833 +08:00
gather_database_stats(auto)    2010-09-23 22:00:01.896829 +08:00    2010-09-23 22:00:10.791628 +08:00
gather_database_stats(auto)    2010-09-24 22:00:02.928340 +08:00    2010-09-24 22:00:18.671629 +08:00
gather_database_stats(auto)    2010-09-25 06:00:04.506349 +08:00    2010-09-25 06:00:19.210098 +08:00
gather_database_stats(auto)    2010-09-27 22:00:03.031536 +08:00    2010-09-27 22:00:21.163297 +08:00
gather_database_stats(auto)    2010-09-28 22:00:00.210947 +08:00    2010-09-28 22:00:20.981982 +08:00
gather_database_stats(auto)    2010-09-29 22:00:01.531744 +08:00    2010-09-29 22:00:11.544685 +08:00
gather_database_stats(auto)    2010-10-11 22:00:02.290130 +08:00    2010-10-11 22:00:25.104684 +08:00
gather_database_stats(auto)    2010-10-12 22:00:01.351698 +08:00    2010-10-12 22:00:20.560877 +08:00
gather_database_stats(auto)    2010-10-13 22:00:02.348621 +08:00    2010-10-13 22:00:21.802732 +08:00
gather_database_stats(auto)    2010-10-14 22:00:02.484677 +08:00    2010-10-14 22:00:11.928128 +08:00
gather_database_stats(auto)    2010-10-15 22:00:00.713935 +08:00    2010-10-15 22:00:15.028450 +08:00
gather_database_stats(auto)    2010-10-16 06:00:04.560163 +08:00    2010-10-16 06:00:07.685812 +08:00
gather_database_stats(auto)    2010-10-18 22:00:01.796532 +08:00    2010-10-18 22:00:16.815746 +08:00
gather_database_stats(auto)    2010-10-19 22:00:02.761516 +08:00    2010-10-19 22:00:16.051881 +08:00
gather_database_stats(auto)    2010-10-20 22:00:02.855247 +08:00    2010-10-20 22:00:15.642001 +08:00
gather_database_stats(auto)    2010-10-21 22:00:00.977750 +08:00    2010-10-21 22:00:14.674787 +08:00
gather_database_stats(auto)    2010-10-22 22:00:02.768465 +08:00    2010-10-22 22:00:14.866542 +08:00
gather_database_stats(auto)    2010-10-23 06:00:04.238141 +08:00    2010-10-23 06:00:15.393996 +08:00

20 rows selected.

利用ALTER_STATS_HISTORY_RETENTION可以修改统计信息的保留时间,但是过期的统计信息并不会即时删除,Oracle会在下一个统计信息的工作窗口完成清除操作。

DBMS_STATS包还提供了手工清除统计信息备份的方法,调用PURGE_STATS过程:

SQL> EXEC DBMS_STATS.PURGE_STATS(TO_TIMESTAMP_TZ('2010-10-1', 'YYYY-MM-DD'))

PL/SQL procedure successfully completed.

SQL> SELECT OPERATION,
  2  TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') START_TIME,
  3  TO_CHAR(END_TIME, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') END_TIME
  4  FROM DBA_OPTSTAT_OPERATIONS;

OPERATION                      START_TIME                           END_TIME
------------------------------ ------------------------------------ ------------------------------------
gather_schema_stats            2010-10-24 19:07:20.865619 +08:00    2010-10-24 19:09:05.966690 +08:00
alter_stats_history_retention  2010-10-24 19:37:04.721652 +08:00    2010-10-24 19:37:04.788833 +08:00
purge_stats                    2010-10-24 19:41:15.008896 +08:00    2010-10-24 19:41:16.119332 +08:00
gather_database_stats(auto)    2010-10-11 22:00:02.290130 +08:00    2010-10-11 22:00:25.104684 +08:00
gather_database_stats(auto)    2010-10-12 22:00:01.351698 +08:00    2010-10-12 22:00:20.560877 +08:00
gather_database_stats(auto)    2010-10-13 22:00:02.348621 +08:00    2010-10-13 22:00:21.802732 +08:00
gather_database_stats(auto)    2010-10-14 22:00:02.484677 +08:00    2010-10-14 22:00:11.928128 +08:00
gather_database_stats(auto)    2010-10-15 22:00:00.713935 +08:00    2010-10-15 22:00:15.028450 +08:00
gather_database_stats(auto)    2010-10-16 06:00:04.560163 +08:00    2010-10-16 06:00:07.685812 +08:00
gather_database_stats(auto)    2010-10-18 22:00:01.796532 +08:00    2010-10-18 22:00:16.815746 +08:00
gather_database_stats(auto)    2010-10-19 22:00:02.761516 +08:00    2010-10-19 22:00:16.051881 +08:00
gather_database_stats(auto)    2010-10-20 22:00:02.855247 +08:00    2010-10-20 22:00:15.642001 +08:00
gather_database_stats(auto)    2010-10-21 22:00:00.977750 +08:00    2010-10-21 22:00:14.674787 +08:00
gather_database_stats(auto)    2010-10-22 22:00:02.768465 +08:00    2010-10-22 22:00:14.866542 +08:00
gather_database_stats(auto)    2010-10-23 06:00:04.238141 +08:00    2010-10-23 06:00:15.393996 +08:00

15 rows selected.

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-676642/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11076983