关于统计信息的导入导出

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

2.1、创建统计信息表
SQL> exec dbms_stats.create_stat_table('&OWNER','MY_STATS_TAB');Enter value for owner: HRPL/SQL procedure successfully completed.
SQL>  SELECT COUNT(*) FROM MY_STATS_TAB;  COUNT(*)----------         0
2.2 导出统计信息
SQL> exec dbms_stats.export_table_stats('&OWNER','&SOURCE_TABNAME',NULL,'MY_STATS_TAB');Enter value for owner: HREnter value for source_tabname: EMPLOYEESPL/SQL procedure successfully completed.SQL> SELECT COUNT(*) FROM MY_STATS_TAB;  COUNT(*)----------        63

2.3 删除employees 的统计信息
SQL> exec dbms_stats.delete_table_stats(ownname=>'HR',tabname=>'EMPLOYEES');PL/SQL procedure successfully completed.SQL> select table_name, num_rows from dba_tables where table_name in ('&SOURCE_TABNAME','&TARGET_TABNAME');Enter value for source_tabname: EMPLOYEESEnter value for target_tabname: old   1: select table_name, num_rows from dba_tables where table_name in ('&SOURCE_TABNAME','&TARGET_TABNAME')new   1: select table_name, num_rows from dba_tables where table_name in ('EMPLOYEES','')TABLE_NAME                                                     NUM_ROWS------------------------------------------------------------ ----------EMPLOYEES

2.4 往employees 表中导入统计信息
SQL> exec dbms_stats.import_table_stats('&OWNER','&TARGET_TABNAME',null,'MY_STATS_TAB');Enter value for owner: HREnter value for target_tabname: EMPLOYEESPL/SQL procedure successfully completed.SQL> select table_name, num_rows from dba_tables where table_name in ('&SOURCE_TABNAME','&TARGET_TABNAME');Enter value for source_tabname: Enter value for target_tabname: EMPLOYEESold   1: select table_name, num_rows from dba_tables where table_name in ('&SOURCE_TABNAME','&TARGET_TABNAME')new   1: select table_name, num_rows from dba_tables where table_name in ('','EMPLOYEES')TABLE_NAME                                                     NUM_ROWS------------------------------------------------------------ ----------EMPLOYEES                                                           107


注意:源表和目标表的表名必须相同


0 0
原创粉丝点击