【ASK_ORACLE】Oracle如何恢复旧的统计信息

来源:这里教程网 时间:2026-03-03 18:12:53 作者:

前言 有时候统计信息的改变不一定会提升SQL执行效率,相反可能会大幅降低执行效率。如果我们不想再次收集新的统计信息,Oracle可以恢复到某一时刻的旧统计信息,下面我们来看看如何恢复吧!一些关于统计信息的SQL语句参考:1.【TUNE_ORACLE】检查统计信息是否过期SQL参考: http://blog.itpub.net/69992972/viewspace-2785127/ 2.【TUNE_ORACLE】定制化收集统计信息SQL参考: http://blog.itpub.net/69992972/viewspace-2784605/ 3.【TUNE_ORACLE】查看表,列和索引的统计信息SQL参考: http://blog.itpub.net/69992972/viewspace-2784114/

实验环境

搭建平台:VMware Workstation

OS:OL 6.10

DB:Oracle 11.2.0.4 恢复方法 1. 设置统计信息保留时间和AWR、备份一样,统计信息也有自己的保留时间,我们可以根据实际需要来设置(默认31天): exec DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (天数);比如我们保留60天:exec DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (60); 我们来查看下当前的保留天数,和最早能恢复到的时间:SQL> select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;GET_STATS_HISTORY_RETENTION---------------------------------------------------60              ##已经修改成保留60天了 SQL> select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;GET_STATS_HISTORY_AVAILABILITY------------------------------------------------------------------------------19-NOV-22 04.52.41.089721000 PM +8:00      ##这里由于之前是31天保留时间,所以就算更新到60天,也不会找到比这个时间更老的数据了,因为已经覆盖了。  2. 恢复统计信息有几种恢复统计信息的方式:(1)恢复表的统计信息 (最常用!)SQL> exec DBMS_STATS.RESTORE_ TABLE_STATS ('owner','table',date)举例:SQL> exec dbms_stats.restore_table_stats ('TEST','TBS','19-NOV-22 04.52.41.089721000 PM +8:00'); (2)恢复用户的统计信息(较常用)SQL> exec DBMS_STATS.RESTORE_ SCHEMA_STATS('owner',date) (3)恢复数据库的统计信息SQL> exec DBMS_STATS.RESTORE_ DATABASE_STATS(date) (4)恢复数据字典的统计信息SQL> exec DBMS_STATS.RESTORE_ DICTIONARY_STATS(date) (5)恢复基表(X$)的统计信息SQL> exec DBMS_STATS.RESTORE_ FIXED_OBJECTS_STATS(date) (6)恢复system的统计信息SQL> exec DBMS_STATS.RESTORE_ SYSTEM_STATS(date)

相关推荐