Oracle统计数据的迁移

如题所述

第1个回答  2022-11-02

  自从 iR 开始 可以利用DBMS_STATS对统计数据进行数据库间的迁移 如果要迁移schema或database级别的统计数据 还需要DBA权限

   G开始 Oracle默认情况下可以自动保存最近 天的统计数据 Table级的统计数据存储在[DBA|ALL|USER]_TAB_STATS_HISTORY视图中 而schema database级的统计数据保存在DBA_OPTSTAT_OPERATIONS视图中 当STATISTICS_LEVEL参数设置成ALL或TYPICAL时 Oracle会在最近一次的统计数据收集时自动删除旧的统计数据 也可以通过DBMS_STATS PURGE_STATS手动清楚指定时间之前的历史数据 (统计数据的保存周期用DBMS_STATS ALERT_STATISTICS_HISTORY_RETENTION进行调整)

  记录一下 统计数据的导出过程

   源库导出统计数据

  创建保存统计数据的中间表

  中间表用来存储要迁移的统计数据 统计数据都存储在数据字典中 所以在迁移前必须导出到一张中间表 中间表的创建用DBMS_STATS CREATE_STAT_TABLE

  BEGIN

  DBMS_STATS CREATE_STAT_TABLE(ownname=> SYSTEM stattab=> STAT_TAB tblspace=> TOOLS );

  DBMS_OUTPUT PUT_LINE( Create table plete! );

  END;

  /

  导出统计数据到中间表

  用DBMS_STATS EXPORT_*_STATS系列方法导出统计数据 这里演示导出一个schema的统计数据

  BEGIN

  dbms_stats export_schema_stats(ownname=> IQUEWEB stattab=> STAT_TAB statid=> IQUEWEB_ statown=> SYSTEM );END;

  /

  将iqueweb的统计数据导出中间表system stat_tab表中

  Export表STAT_TAB

  用exp或expdp导出STAT_TAB

  expdp system/****@**** tables=(stat_tab) directory=export dumpfile=expdat dmp logfile=iqueweb_stat _e log

  将导出的expdat dmp文件传入远程的目标数据库

   目标库导入统计数据

  Import STAT_TAB

  导入传入的expdat dmp文件 这里注意权限 用system导入

  impdp system/****@**** tables=(stat_tab) directory=dbaexport dumpfile=expdat dmp logfile=import log

  Import 统计数据

  从STAT_TAB表中Import iquewb统计数据到数据字典 这里要用到DBMS_STATS IMPORT_SCHEMA_STATS

  BEGIN

  dbms_stats import_schema_stats(ownname=> IQUEWEB stattab=> STAT_TAB statid=> IQUEWEB_ statown=> SYSTEM force=>FALSE);

  END;

  /

  这个导入过程是这样的 首先会将导入的统计数据保存在DBA_OPTSTAT_OPERATIONS视图中 同时让数据库应用最新的统计数据 也就是说这个Import完成后 我们因该看到iqueweb下的表应用了刚才导入的新统计数据

  查看新的统计

  确认新的统计数据是否导入

  alter session set nls_timestamp_tz_format= yyyy mm dd hh :mi:ss ;

  col start_time format a

  col end_time format a

  col operation format a

  col target format a

  set linesize

  select operation target start_time end_time from dba_optstat_operations;

  gather_database_stats(auto)                                   : :

   :           :

  OPERATION                      TARGET                         START_TIME     END_TIME

  

  import_schema_stats            IQUEWEB                        : :

   :           :

  统计数据已经导入了 同时去看看具体的iqueweb下的表有没有应用新的统计数据

  select table_name num_rows blocks empty_blocks avg_row_len last_ *** yzed from dba_tables where owner= IQUEWEB ;

lishixinzhi/Article/program/Oracle/201311/18490

相似回答