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

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

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


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

在上一篇提到了如果要恢复统计信息,必须提供恢复的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月-1010.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.


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


你可能感兴趣的:(oracle,oracle,oracle,oracle,10g,10g统计信息,10g统计信息恢复)