自从9iR2开始,可以利用DBMS_STATS对统计数据进行数据库间的迁移,如果要迁移schema或database级别的统计数据,还需要DBA权限。
10G开始,Oracle默认情况下可以自动保存最近31天的统计数据。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进行调整)。
记录一下统计数据的导出过程:
1、源库导出统计数据
创建保存统计数据的中间表
中间表用来存储要迁移的统计数据,统计数据都存储在数据字典中,所以在迁移前必须导出到一张中间表。中间表的创建用DBMS_STATS.CREATE_STAT_TABLE。
BEGIN DBMS_STATS.CREATE_STAT_TABLE(ownname=>'SYSTEM',stattab=>'STAT_TAB',tblspace=>'TOOLS'); DBMS_OUTPUT.PUT_LINE('Create table complete!'); END; / |
导出统计数据到中间表
用DBMS_STATS.EXPORT_*_STATS系列方法导出统计数据。这里演示导出一个schema的统计数据。
BEGIN dbms_stats.export_schema_stats(ownname=>'IQUEWEB',stattab=>'STAT_TAB',statid=>'IQUEWEB_20100526',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_stat20100526_e.log |
将导出的expdat.dmp文件传入远程的目标数据库。