oracle备份统计信息,ORACLE关于表上统计信息的备份与恢复 | YallonKing

本文详细介绍了在Oracle数据库中如何备份和恢复表的统计信息,这对于优化CBO执行计划至关重要。通过创建统计信息存储表,收集并存储统计信息,然后在需要时恢复旧的统计信息,可以确保数据批量操作后的查询性能。具体步骤包括创建统计表,收集统计信息,删除和还原统计信息等关键操作。
摘要由CSDN通过智能技术生成

备份恢复表统计信息

在oracle中,统计信息是十分重要的,尤其在10g以后sql执行计划采用CBO后,表上的统计信息将直接影响CBO做出正确的执行计划。所以,我们对那些数据量较大,且其中的数据存在批量加载和删除的情形,我们一般建议在对该类表做完数据批量加载或删除之后,及时对其进行统计信息的收集,此刻,我们便可采用先将该类表之前的统计信息备份之后再次对其统计信息的收集,这样一来,即使新的统计信息存在问题,我们也可将之前的旧的统计信息恢复过去,以不至于造成表上没有统计信息的问题发生。下边,就是一个表上统计信息的备份和恢复的实例:

SQL> desc test.test

Name Null? Type

----------------------------------------- -------- ----------------------------

ID NUMBER

NAME VARCHAR2(10)

查看表分析时间

SQL> select to_char(last_analyzed,'yyyy/mm/dd hh24:mi:ss') from dba_tables where table_name='TEST' AND OWNER='TEST';

TO_CHAR(LAST_ANALYZ

-------------------

2012/08/21 00:32:23

--查看当前时间

SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2012/09/28 08:21:58

创建统计信息存储表,收集表统计信息并将统计信息存储到存储表

SQL> BEGIN

2 DBMS_STATS.CREATE_STAT_TABLE ('test', 'savestats');

3 DBMS_STATS.GATHER_TABLE_STATS ('test', 'test', stattab => 'savestats');

4 END;

5 /

BEGIN

*

ERROR at line 1:

ORA-20002: Unable to create table SAVESTATS: already exists

ORA-06512: at "SYS.DBMS_STATS", line 7060

ORA-06512: at line 2

删除统计信息存储表

SQL> BEGIN

2 DBMS_STATS.DROP_STAT_TABLE ('test', 'savestats');

3 END;

4 /

PL/SQL procedure successfully completed.

创建统计信息存储表,收集表统计信息并将统计信息存储到存储表

SQL> BEGIN

2 DBMS_STATS.CREATE_STAT_TABLE ('test', 'savestats');

3 DBMS_STATS.GATHER_TABLE_STATS ('test', 'test', stattab => 'savestats');

4 END;

5 /

PL/SQL procedure successfully completed.

查看表分析时间

SQL> select to_char(last_analyzed,'yyyy/mm/dd hh24:mi:ss') from dba_tables where table_name='TEST' AND OWNER='TEST';

TO_CHAR(LAST_ANALYZ

-------------------

2012/09/28 08:25:33

查看当前时间

SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2012/09/28 08:26:20

删除当前表统计信息,将表旧统计信息从存储表还原

SQL> BEGIN

2 DBMS_STATS.DELETE_TABLE_STATS ('test', 'test');

3 DBMS_STATS.IMPORT_TABLE_STATS ('test', 'test', stattab => 'savestats');

4 END;

5 /

PL/SQL procedure successfully completed.

查看表分析时间

SQL> select to_char(last_analyzed,'yyyy/mm/dd hh24:mi:ss') from dba_tables where table_name='TEST' AND OWNER='TEST';

TO_CHAR(LAST_ANALYZ

-------------------

2012/08/21 00:32:23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值