ASH、AWR及AWR信息库备份与加载
ASH和AWR
oracle 10g中,ASH利用MMNL进程以每秒钟一次的频率,从内存中收集active session信息。session的信息可以从v$session视图查到,处于等待事件的信息被复制到v$session_wait中。
备份、加载AWR负载库
通过AWR收集的信息,可以能够方便的判断系统的负载情况,对数据库做出诊断,利用这些数据还可以对数据库一段时间内运行情况的趋势变化进行分析。由于默认情况下只保留7天,如果想增加保留时间,则要么更改默认保留策略,要么将数据导出。
更改AWR默认保留策略:
1、查看AWR保留策略
select * from dba_hist_wr_control;
2、调整AWR保留策略,比如:调整为30分钟收集一次,保留5天
exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
导出AWR负载库数据:
oracle提供了两种方式对AWR负载库进行备份:
- 利用脚本 $ORACLE_HOME/rdbms/admin/awrextr.sql
- 利用DBMS_SWRF_INTERNAL.AWR_EXTRACT
备份时,需要先创建一个目录:
SQL>create or replace directory DUMP as '/data/dump';
执行脚本:
SQL>@?/rdbms/admin/awrextr.sql
或者
Begin
DBMS_SWRF_INTERNAL.AWR_EXTRACT (
dmpfile => 'awr_data',
dmpdir => 'DUMP',
bid => 1,
eid =>18);
end;
/
备份后在DUMP目录生成一个以dmp为后缀的备份文件和一个log文件,通过日志可以看出导出了201个WRH$开头的表(10.2.0.1版本),而导出文件格式也是和数据泵导出的文件一羊的。
导入AWR负载库
同样,备份后在其他数据库中加载时也可以有两种方式,利用脚本awrload.sql或者利用DBMS_SWRF_INTERNAL。
导入分两个过程,首先将数据导入到一个临时的schema中,然后将导入的数据转移到sys schema中。
当利用脚本awrload的时候,执行过程中会要求输入临时schema的名称和数据表空间及临时表空间,然后脚本自动创建临时schema、导入数据、迁移数据到sys、最后自动删除临时schema。
而利用dbms_swrf_internal时,则需要手动执行这两个两个步骤,比如:
导入数据到hr这个临时schema:
begin
DBMS_SWRF_INTERNAL.AWR_LOAD (
SCHNAME => 'HR',
dmpfile => 'awr_data',
dmpdir => 'DUMP');
end;
然后迁移数据到sys:
exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'HR');
同样导入也在相应的目录下生成一个.log文件。导入过程中可以看到,最终将临时schema中数据迁移到sys schema下时,用的是append,不同数据库的awr 负载库信息用dbid区分。
这样就可以利用awrrpti脚本指定要生成报告的DBID,在本地很方便的生成和分析其他数据库的awr报告了。
注意,不可将awr负载库信息导出后再导入到原数据库中,相同的DBID导入不允许的,当然如果实验的话,也可以用nid修改dbname和dbid,从而实现导入。
