简答题 2.  如何查询表的历史统计信息
【正确答案】从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次统计信息的比较结果:
   
   
【答案解析】