从10g开始统计表的恢复介绍
目的:从oracle10g开始,当统计信息聚合到一个表中的时,老的数据会继续保留,这样会影响查询效率,所以我们应该将陈旧的数据备份。
Oracle保留这些陈旧数据多长时间?默认的是31天,但是可以用一下命令修改:
execute DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (xx) xx是要保留的时间。
我们如何知道统计信息还有多少天可用?
select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;
(返回已保留的时间)
select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;
(返回那些历史数据可以恢复的时间)
我们如何找到一个表的历史统计?
select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history;
(返回一个表在此收集的次数)
我们如何恢复统计?
决定什么时间该做什么统计:
execute DBMS_STATS.RESTORE_TABLE_STATS ('owner','table',date)
execute DBMS_STATS.RESTORE_DATABASE_STATS(date)
execute DBMS_STATS.RESTORE_DICTIONARY_STATS(date)
execute DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS(date)
execute DBMS_STATS.RESTORE_SCHEMA_STATS('owner',date)
execute DBMS_STATS.RESTORE_SYSTEM_STATS(date)
ie
execute dbms_stats.restore_table_stats ('SCOTT','EMP','25-JUL-07 12.01.20.766591 PM +02:00');