分享一统计信息的备份与恢复

情景:统计信息直接影响到Oracle优化器最后的执行计划,每次升完级或者数据迁移成功后都会习惯性的做一次统计信息收集。但是对于一些大表,比如数据量超过几千万条,表分析后却有可能会导致应用系统一些SQL执行计划变差,比如出现大量的全表扫,严重影响数据库性能。
分析:
1. 什么是统计信息?
统计信息主要是 描述数据库[url=][/url]中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。CBO正是根据这些统计信息数据,计算出不同访问路径下,各种计划的成本,最后选择出成本最小的计划。统计信息是存放在数据字段表中的,如tab$。一般我们从数据字段视图中察看统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS 等。
如下图,描述了该表的统计信息的的行数,块数(同理如果要查索引相关就使用DBA_INDEXES,):


2、如何备份统计信息?
一想到备份开始想到的就是expdp、rman,但统计信息是使用存储过程进行备份的
下面我做了一个实验:
(1)先查询病人信息表的统计信息

(2)在系统中创建统计信息表ZLHIS_DY3

(3)备份ZLHIS用户的统计信息

(4)ZLHIS用户统计信息收集
Begin
    dbms_stats.gather_schema_stats(ownname => 'ZLHIS',cascade => true ,estimate_percent => 10,method_opt => 'for all indexed columns');
end;
注:开始叫想,这里的统计信息收集是否会覆盖或者摧毁开始备份表中ZLHIS_DY3里面的统计信息?显然是不会的,因为这里的收集只是收集块数,行数,而ZLHIS_DY3记录的是真正的数字。
(5)再查看病人信息统计信息变化


(6)还原统计信息

(7)查看还原成功的统计信息


总结:
备份统计细信息:
--创建统计信息历史保留表 sql> exec dbms_stats.create_stat_table(ownname => 'ZLHIS',stattab => 'ZLHIS_DY2') ;


--导出整个scheme的统计信息 ,该scheme可以用来恢复用户、索引、以及表的统计信息,十分重要

sql> exec dbms_stats.export_schema_stats(ownname => 'ZLHIS',stattab => 'ZLHIS_DY2') ;


恢复统计信息按用户恢复:


sql> exec dbms_stats.import_schema_stats(ownname => 'ZLHIS',stattab => 'ZLHIS_DY2');
或者
BEGIN
DBMS_STATS.IMPORT_SCHEMA_STATS(
ownname => 'ZLHIS', stattab => 'ZLHIS_DY2'
);
END;
/

恢复统计信息按表恢复
exec dbms_stats.import_table_stats(ownname => 'ZLHIS',tabname => '表名',stattab => '备份统计信息的表名') ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值