【oracle】统计信息的恢复和备份

oracle 11g 增加了系统信息的备份和恢复功能,分别是在系统级别,用户级别,表级别!当我们对oracle 系统对象进行统计信息收集时,为了防止新的统计信息之后的执行计划不如之前的,我们可以利用
dbms_stats.export_(database/schema/table)_stats 导出统计信息到创建的表中
dbms_stats.import_(database/schema/table)_stats 导入统计信息到系统中
来进行恢复统计信息!
对统计信息的备份和恢复包括如下等级
1)数据库的统计信息备份恢复(只能是sys用户下)
exec dbms_stats.create_stat_table('sys','stat_sys');
exec dbms_stats.export_database_stats('stat_sys');
exec dbms_stats.import_database_stats('stat_sys');

2)方案的统计信息备份恢复(只能在方案拥有者的用户下,yang为用户名)
exec dbms_stats.create_stat_table('yang','stat_2');
exec dbms_stats.export_schema_stats('yang','stat_2');
exec dbms_stats.import_schema_stats('yang','stat_2');

3)表的统计信息备份恢复(只能在表拥有者的用户下)
exec dbms_stats.create_stat_table('yang','stat_3');
exec dbms_stats.export_table_stats('yang','T1',null,'stat_3');
exec dbms_stats.import_table_stats('yang','T1',null,'stat_3');

下面针对用户级别做一个测试!
1 创建统计信息备份存放的表
yang@yangdb> exec dbms_stats.create_stat_table('yang','stat_4');
PL/SQL procedure successfully completed.

2 对用户yang 进行统计,并将统计信息导出到表里面!
yang@yangdb> begin
  2  dbms_stats.gather_schema_stats(
  3  ownname          => 'yang',
  4  estimate_percent => 100,
  5  method_opt       => 'for all columns size auto',
  6  degree           => 2);
  7  end;
  8  /
PL/SQL procedure successfully completed.
yang@yangdb> select table_name,last_analyzed from user_tables where table_name='T2';
TABLE_NAME                     LAST_ANALYZED
------------------------------ ------------------
T2                             27-FEB-12

yang@yangdb> exec dbms_stats.export_schema_stats('yang','stat_4');
PL/SQL procedure successfully completed.
3 删除之前的统计信息并查询验证
yang@yangdb> exec dbms_stats.delete_schema_stats('yang');
PL/SQL procedure successfully completed.
yang@yangdb> select table_name,last_analyzed from user_tables where table_name='T2';
TABLE_NAME                     LAST_ANALYZED
------------------------------ ------------------
T2

4 将之前备份的统计信息从新导入
yang@yangdb> exec dbms_stats.import_schema_stats('yang','stat_4');
PL/SQL procedure successfully completed.
查询yang 用户下的t2表的统计分析时间!
yang@yangdb> select table_name,last_analyzed from user_tables where table_name='T2';
TABLE_NAME                     LAST_ANALYZED
------------------------------ ------------------
T2                             27-FEB-12

时间: 2024-11-01 21:01:50

【oracle】统计信息的恢复和备份的相关文章

oracle 统计信息收集包:DBMS_STATS

 DBMS_STATS包 DBMS_STAS包不仅能够对表进行分析,它还可以对数据库分析进行管理. 按照功能可以分一下几类: (1)       性能数据的收集 (2)       性能数据的设置 (3)       性能数据的删除 (4)       性能数据的备份和恢   更多信息参考Oracle 联机文档: 11g DBMS_STATS http://download.oracle.com/docs/cd/E11882_01/appdev.112/e10577/d_stats.htm#AR

如何使用analyze命令收集oracle统计信息

ORACLE数据库的PL/SQL语句执行的优化器,有基于代价的优化器(CBO)和基于规则的优化器(RBO). (1)RBO的优化方式,依赖于一套严格的语法规则,只要按照规则写出的语句,不管数据表和索引的内容是否发生变化,不会影响PL/SQL语句的"执行计划". (2)CBO自ORACLE7版被引入,ORACLE自7版以来采用的许多新技术都是只基于CBO的,如星型连接排列查询,哈希连接查询,反向索引,索引表,分区表和并行查询等.CBO计算各种可能"执行计划"的&quo

Oracle统计信息和dbms_stats包

1.统计信息的作用 Oracle基于CBO的优化器在生成执行计划时,很大程度上依赖 于统计信息,你可以把CBO理解为一个复杂的数学模型,而统计信息是它最主要的输入,执行 计划是输出,如果输入都不准确,输出还可能准确吗?所有,统计信息是否及时有效对执行 计划的好坏有着关键的影响. 2.dbms_stats包 Oracle里采用dbms_stats包分 析统计信息(Analyze命令已过时,不建议使用),该包的使用方法,官方文档有详细说明 (http://docs.oracle.com/cd/E11

oracle收集统计信息

什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息.CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划. 统计信息是存放在数据字段表中的,如dba_tab_statistics 如何搜集统计信息 统计信息搜集也是有多种方法,推荐大家使用DBMS_STATS 表来进行统计信息搜集及

dbms_stats 导入导出 schema 级别统计信息

    在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据.这些统计信息通常包括列级.表级.索引.系统级别的统计信息等.所有的这些统计信息都可以被备份,导入导出也可以被锁定与解锁.因此相应地,我们可以导出列级.表级.索引.系统级别的统计信息.通过导出导入统计信息,可以在测试环境来模拟产生环境进行数据库性能优化,SQL调优等.本文主要描述了基于schema级别导出导入统计信息到不同的数据库.     关于统计信息的具体描述与用法,本文不作详细介绍,大家可以参考

执行计划错误—索引统计信息的不准确

mysql在生成执行计划的时候,需要根据索引的统计信息进行一个估算,计算出成本最低的索引: 但是mysql索引统计信息的采集默认8个page: root@test 08:48:52>show global variables like '%samp%'; +---------+---+ | Variable_name             | Value | +---------+---+ | innodb_stats_sample_pages | 8     | +---------+---

Oracle 10g恢复统计信息的限制

恢复统计信息操作也存在一些限制,比如无法恢复用户自定义的统计信息.除此之外由于统计信息是表的属性,因此如果表被删除,则对应的统计备份也被清除,而TRUNCATE操作则并不会影响统计备份信息: SQL> CREATE TABLE T (ID NUMBER); Table created. SQL> INSERT INTO T SELECT ROWNUM FROM TAB; 96 rows created. SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(US

Oracle 10g恢复统计信息的相关函数和过程

上一篇简单介绍了恢复统计信息的方法,这一篇介绍相关的视图和函数. 在上一篇提到了如果要恢复统计信息,必须提供恢复的TIMESTAMP,而这个时间戳通过USER_TABLES视图是无法获得准确信息的,因此对于表而言,可以查询USER_TAB_STATS_HISTORY视图,而对于SCHEMA和数据库级的恢复时间戳可以查询DBA_OPTSTAT_OPERATIONS视图: SQL> SELECT OPERATION, 2  TO_CHAR(START_TIME, 'YYYY-MM-DD HH24:M

Oracle 11g的统计信息功能增强

在11g中,Oracle在统计信息方面进行了进一步的增强. 这篇介绍PENDING统计信息. 在10g中,Oracle提供了恢复统计信息的方法,这使得统计信息收集后造成的问题可以通过恢复原始统计信息的方法快速解决. 在11g中,Oracle更进了一步,用户收集的统计可以设置为悬而未决的,等到统计信息验证过然后在发布到数据字典中. SQL> SELECT * FROM V$VERSION; BANNER -----------------------------------------------