恢复表的统计信息 (文档 ID 2016355.1)

适用于:

Oracle Database - Standard Edition - 版本 10.1.0.2 和更高版本
Oracle Database - Enterprise Edition - 版本 10.1.0.2 和更高版本
Oracle Database - Personal Edition - 版本 10.1.0.2 和更高版本
本文档所含信息适用于所有平台

用途

这篇文章概述了统计信息在被删除后能恢复的措施,这个措施适用于在 Oracle 10g 及以上版本。

适用范围

协助于恢复已被覆盖的统计信息数据。

详细信息

从 Oracle10g 开始,当收集表的统计信息时候,旧的统计数据被保留,如果因为新的统计信息而出现性能问题,旧的统计信息就可以被恢复。

Oracle 将保留统计信息多长时间?

默认统计信息将被保留 31 天,除非使用下面的命令修改:-

execute DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (xx)

- xx 是保留的天数

注意:这些统计信息在 SYSAUX 表空间中占有额外的存储开销,所以应该注意并防止统计信息将表空间填满。

如何了解统计信息的有效天数?

select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;


- 将返回统计信息当前保留的天数。

select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;


- 将返回统计信息已经被删除到的日期(所以只有在这日期之后的统计信息才可能被恢复)。任何恢复到比这日期旧的统计信息的请求都会失败: "ORA-20006: Unable to restore statistics , statistics history not available"

如何找到指定表的统计信息的历史?

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');
请使用浏览器的分享功能分享到微信等