搜索
大数据中国 首页 大数据技术 查看内容
dbms_stats 导入导出 schema 级别统计信息
2013-8-3 12:13 |原作者: 佚名|来自: 互联网| 查看: 1371| 评论: 0
在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据。这些统计信息通常包括列级、表级、索引、系统级别的统计信 息等。所有的这些统计信息都可以被备份,导入导出也可以被锁定与解锁。因此相应地,我们可以导出列级、表级、索引、系统级别的统计信息。通过导出导入统计 信息,可以在测试环境来模拟产生环境进行数据库性能优化,SQL调优等。本文主要描述了基于schema级别导出导入统计信息到不同的数据库。

    关于统计信息的具体描述与用法,本文不作详细介绍,大家可以参考 Oracle references 。

 

1、导入导出统计信息的情形或作用
  a、可以把生产环境的统计信息导入到测试环境使得执行计划的产生能极大程度上等同于生产环境
  b、通过导入导出可以冻结执行计划,即控制与对比不同环境中的执行计划
  c、统计信息可以在重新analyze schema之前进行备份,防止analyze后性能下降
  d、系统级别的统计信息可以被移植到小型服务器来模拟Oracle在大型服务器的运行环境
  e、系统级别的统计信息也可以用于迁移到新服务器以保证一致的执行计划直到真正开始使用新服务器
  f、由于不同的工作负载需要使用不同的统计信息,可以在这些负载运行前给予合适的统计信息(如白天的OLTP,晚上为批量job模式)

 

2、schema级别统计信息导出导入的主要步骤
  a、收集统计信息(源schema或者含系统级别)
  b、创建用于存储统计信息的表(如stats_table)
  c、使用dbms_stats.export_schema_stats导出schema统计信息到表stats_table
  d、使用datapump expdp导出stats_table表。(可考虑SQL*Plus copy方式实现来避免导入导出)
  e、ftp或scp/cp dump文件到目的schema所在的服务器
  f、使用datapump impdp导入dmp文件到目的schema,如果需要备份,应在导入之前备份原统计信息
  g、使用dbms_stats.import_system_stats导入统计信息到所需的schema

 

3、创建统计信息的示例
--下面是一个基于schema scott级别进行收集统计信息的例子

BEGIN
   DBMS_STATS.gather_schema_stats (ownname            => 'SCOTT',
                                   options            => 'GATHER AUTO',
                                   estimate_percent   => DBMS_STATS.auto_sample_size,
                                   method_opt         => 'for all columns size repeat',
                                   degree             => 8);
END;
/

 

4、演示导出导入统计信息导不同的DB

--下面将数据库mmbo5上scott的统计信息导入到另外一个数据库mmbo4下的scott中
a、收集统计信息
scott@MMBO5> delete from emp where deptno=20;

scott@MMBO5> commit;

scott@MMBO5> exec dbms_stats.gather_schema_stats('SCOTT',cascade=>true);

scott@MMBO5> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10      --->emp表被删除了5条记录还剩9条
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
TT                                      4 20130513 22:19:10

b、创建用于存储统计信息的表
--可以指定表存放于哪个表空间,如果缺省则存放到用户的缺省表空间
scott@MMBO5> exec dbms_stats.create_stat_table('SCOTT', 'STATS_TABLE');

PL/SQL procedure successfully completed.

c、导出scott的统计信息到stats_table
scott@MMBO5> exec dbms_stats.export_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

scott@MMBO5> exit

d、导出统计信息到dump文件
oracle@Dev-DB-04:~> expdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=st.log tables=STATS_TABLE

Export: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:20:53

Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
. . exported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  /u02/database/MMBO5/BNR/dump/st.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 22:21:11

e、ftp统计信息到目的服务器并导入dump文件
--由于下面是在同一台服务器,所以直接用cp命令复制dump文件到特定目录
oracle@Dev-DB-04:~> cp /u02/database/MMBO5/BNR/dump/st.dmp /u02/database/MMBO4/BNR/dump

f、使用datapump impdp导入dmp文件到目的schema
oracle@Dev-DB-04:~> export ORACLE_SID=MMBO4
oracle@Dev-DB-04:~> impdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=imp_st.log tables=STATS_TABLE

Import: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:22:57
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 22:23:03

g、导入统计信息到目标数据库的schema
--导入前先查看一下本数据库scott的统计信息
scott@MMBO4> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:16:05
EMP                                    14 20130513 22:16:05
BONUS                                   0 20130513 22:16:05
SALGRADE                                5 20130513 22:16:05
T                                   49991 20130513 22:16:20

6 rows selected.

--导入统计信息
scott@MMBO4> exec dbms_stats.import_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

--可以通过查询视图dba_optstat_operations获得目标数据库上统计信息日志
ALTER SESSION SET nls_timestamp_tz_format='yyyy-mm-dd hh24:mi:ss';
COL start_time FORMAT a14
COL end_time FORMAT a14
COL operation FORMAT a30
COL target FORMAT a30
SET LINESIZE 120

SELECT operation,
       target,
       start_time,
       end_time
  FROM dba_optstat_operations
 WHERE operation LIKE 'import%';

OPERATION                      TARGET                         START_TIME     END_TIME
------------------------------ ------------------------------ -------------- --------------
import_schema_stats            SCOTT                          2013-05-13 22: 2013-05-13 22:
                                                              24:23          24:23

--Author: Robinson
--Blog  : http://blog.csdn.net/robinson_0612
                                                               
--下面的查询也可以看到此时scott下LAST_ANALYZED已经被更新为与源服务器上的统计信息相同
scott@MMBO4> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
T                                   49991 20130513 22:16:20

6 rows selected.

scott@MMBO4> select count(*) from emp;

  COUNT(*)
----------
        14
--实际上在mmbo4上表emp的数据依旧为14条,但统计信息为9条,是来自源数据库的统计信息
--对于源数据库schema上存在,但目标数据库schema不存在的对象,如mmbo5上的表tt,在mmbo4上不会被导入
--对于源数据库schema上不存在,但目标数据库schema存在的对象,如mmbo4上的表t,其统计信息没有被更新

h、根据需要可以考虑是否清除存储统计信息的表
scott@MMBO4> exec dbms_stats.drop_stat_table('SCOTT','STATS_TABLE');

PL/SQL procedure successfully completed.

--对于系统级别的统计信息的导入导出,此处不做演示,需要注意的是应使用dbms_stats中相应的导入导出procedure.
--dbms_stats.gather_system_stats
--dbms_stats.import_system_stats
--dbms_stats.export_system_stats

 

更多参考

有关Oracle RAC请参考
    使用crs_setperm修改RAC资源的所有者及权限
    使用crs_profile管理RAC资源配置文件
    RAC 数据库的启动与关闭
    再说 Oracle RAC services
    Services in Oracle Database 10g
    Migrate datbase from single instance to Oracle RAC
    Oracle RAC 连接到指定实例
    Oracle RAC 负载均衡测试(结合服务器端与客户端)
    Oracle RAC 服务器端连接负载均衡(Load Balance)
    Oracle RAC 客户端连接负载均衡(Load Balance)
    ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
    ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
    CRS-1006 , CRS-0215 故障一例 
    基于Linux (RHEL 5.5) 安装Oracle 10g RAC
    使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
    配置非默认端口的动态服务注册
    配置sqlnet.ora限制IP访问Oracle
    Oracle 监听器日志配置与管理
    设置 Oracle 监听器密码(LISTENER)
    配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
    Oracle 冷备份
    Oracle 热备份
    Oracle 备份恢复概念
    Oracle 实例恢复
    Oracle 基于用户管理恢复的处理
    SYSTEM 表空间管理及备份恢复
    SYSAUX表空间管理及恢复
    Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
    RMAN 概述及其体系结构
    RMAN 配置、监控与管理
    RMAN 备份详解
    RMAN 还原与恢复
    RMAN catalog 的创建和使用
    基于catalog 创建RMAN存储脚本
    基于catalog 的RMAN 备份与恢复
    RMAN 备份路径困惑
    使用RMAN实现异机备份恢复(WIN平台)
    使用RMAN迁移文件系统数据库到ASM
    linux 下RMAN备份shell脚本
    使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
    Oracle 表空间与数据文件
    Oracle 密码文件
    Oracle 参数文件
    Oracle 联机重做日志文件(ONLINE LOG FILE)
    Oracle 控制文件(CONTROLFILE)
    Oracle 归档日志
    Oracle 回滚(ROLLBACK)和撤销(UNDO)
    Oracle 数据库实例启动关闭过程
    Oracle 10g SGA 的自动化管理
    Oracle 实例和Oracle数据库(Oracle体系结构)

免责声明: 除非特别声明,文章均为投稿或网络转载,仅代表作者观点,与大数据中国网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。如果本文内容有侵犯你的权益,请发送信息至ab12-120@163.com,我们会及时删除

最新评论

关闭

站长推荐上一条 /1 下一条

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-11-24 12:59 , Processed in 0.119783 second(s), 23 queries .

返回顶部