dbms_stats导入导出schema级别统计信息
在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据。这些统计信息通常包括列级、表级、索引、系统级别的统计信息等。所有的这些统计信息都可以被备份,导入导出也可以被锁定与解锁。因此相应地,我们可以导出列级、表级、索引、系统级别的统计信息。通过导出导入统计信息,可以在测试环境来模拟产生环境进行数据库性能优化,SQL调优等。本文主要描述了基于schema级别导出导入统计信息到不同的数据库。
1、导入导出统计信息的情形或作用
a、可以把生产环境的统计信息导入到测试环境使得执行计划的产生能极大程度上等同于生产环境
b、通过导入导出可以冻结执行计划,即控制与对比不同环境中的执行计划
c、统计信息可以在重新易做图yze schema之前进行备份,防止易做图yze后性能下降
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级别进行收集统计信息的例子
[sql]
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
[sql]
--下面将数据库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_易做图yzed 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的统计信息