自从iR开始可以利用DBMS_STATS对统计数据进行数据库间的迁移如果要迁移schema或database级别的统计数据还需要DBA权限
G开始Oracle默认情况下可以自动保存最近天的统计数据Table级的统计数据存储在[DBA|ALL|USER]_TAB_STATS_HISTORY视图中而schemadatabase级的统计数据保存在DBA_OPTSTAT_OPERATIONS视图中当STATISTICS_LEVEL参数设置成ALL或TYPICAL时Oracle会在最近一次的统计数据收集时自动删除旧的统计数据也可以通过DBMS_STATSPURGE_STATS手动清楚指定时间之前的历史数据(统计数据的保存周期用DBMS_STATSALERT_STATISTICS_HISTORY_RETENTION进行调整)
记录一下 统计数据的导出过程
源库导出统计数据
创建保存统计数据的中间表
中间表用来存储要迁移的统计数据统计数据都存储在数据字典中所以在迁移前必须导出到一张中间表中间表的创建用DBMS_STATSCREATE_STAT_TABLE
BEGIN
DBMS_STATSCREATE_STAT_TABLE(ownname=>SYSTEMstattab=>STAT_TABtblspace=>TOOLS);
DBMS_OUTPUTPUT_LINE(Create table complete!);
END;
/
导出统计数据到中间表
用DBMS_STATSEXPORT_*_STATS系列方法导出统计数据这里演示导出一个schema的统计数据
BEGIN
dbms_statsexport_schema_stats(ownname=>IQUEWEBstattab=>STAT_TABstatid=>IQUEWEB_statown=>SYSTEM);END;
/
将iqueweb的统计数据导出中间表systemstat_tab表中
Export表STAT_TAB
用exp或expdp导出STAT_TAB
expdp system/****@**** tables=(stat_tab) directory=export dumpfile=expdatdmp logfile=iqueweb_stat_elog
将导出的expdatdmp文件传入远程的目标数据库
目标库导入统计数据
Import STAT_TAB
导入传入的expdatdmp文件这里注意权限用system导入
impdp system/****@**** tables=(stat_tab) directory=dbaexport dumpfile=expdatdmp logfile=importlog
Import 统计数据
从STAT_TAB表中Import iquewb统计数据到数据字典这里要用到DBMS_STATSIMPORT_SCHEMA_STATS
BEGIN
dbms_statsimport_schema_stats(ownname=>IQUEWEBstattab=>STAT_TABstatid=>IQUEWEB_statown=>SYSTEMforce=>FALSE);
END;
/
这个导入过程是这样的首先会将导入的统计数据保存在DBA_OPTSTAT_OPERATIONS视图中同时让数据库应用最新的统计数据也就是说这个Import完成后我们因该看到iqueweb下的表应用了刚才导入的新统计数据
查看新的统计
确认新的统计数据是否导入
alter session set nls_timestamp_tz_format=yyyymmdd hh:mi:ss;
col start_time format a
col end_time format a
col operation format a
col target format a
set linesize
select operationtargetstart_timeend_time from dba_optstat_operations;
gather_database_stats(auto) : :
: :
OPERATION TARGET START_TIME END_TIME
import_schema_stats IQUEWEB : :
: :
统计数据已经导入了同时去看看具体的iqueweb下的表有没有应用新的统计数据
select table_namenum_rowsblocksempty_blocksavg_row_lenlast_analyzed from dba_tables where owner=IQUEWEB;
如果发现表还是保持了以前的统计数据那么必须先删除表上旧的统计数据然后重新Import因为Oracle在Import的时候如果发现表以上也有统计数据会直接skipped