您的位置:首页 > 数据库 > Oracle

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

2013-06-21 09:33 393 查看
从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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息