【正确答案】从Oracle 10g开始,当收集表的统计信息的时候,旧的统计数据被保留,如果因为新的统计信息而出现性能问题,旧的统计信息就可以被恢复。历史统计信息保存在以下几张表中:
1)WRI$_OPTSTAT_TAB_HISTORY表的统计信息。
2)WRI$_OPTSTAT_IND_HISTORY索引的统计信息。
3)WRI$_OPTSTAT_HISTHEAD_HISTORY列的统计信息。
4)WRI$_OPTSTAT_HISTGRM_HISTORY直方图的信息。
从视图DBA_TAB_STATS_HISTORY可以查询历史收集统计信息的时间,但是不能查询到行数,所以需要结合基表来查询,查询的SQL语句如下:
查询索引的历史统计信息的SQL语句如下:
默认情况下统计信息将被保留31天,可以使用下面的命令修改:

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

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

查询到可以恢复统计信息到某一个比较好的时间之后,可以执行下面的命令进行恢复:

可以通过如下的命令返回2次统计信息的比较结果:
