.手工创建一个快照
SQL> select * from dba_hist_snapshot order by 1 desc;
SQL> exec dbms_workload_repository.create_snapshot;
2.手工删除指定范围的快照
SQL> select * from sys.wrh$_active_session_history order by snap_id desc;
SQL> select * from dba_hist_snapshot order by 1 desc;
SQL> execute dbms_workload_repository.drop_snapshot_range(low_snap_id=> 26, high_snap_id=> 44, dbid=> 1236598332);
SQL> select * from sys.wrh$_active_session_history order by snap_id desc;
3.修改采集时间和统计信息保留时间(默认的的收集间隔为1小时,保存时间为1周)
SQL> select * from dba_hist_wr_control;
SQL> execute dbms_workload_repository.modify_snapshot_settings(interval=>10,retention=> 60*24*7);
--修改快照的收集间隔为10分钟,保存时间为1周。
SQL> select * from dba_hist_wr_control;
4.设置基线
基线(baseline)是一种机制,这样你可以在重要时间的快照信息集做标记。一个基线定义在一对快照之间,快照通过他们的快照序列号识别.每个基线有且只有一对快照。
SQL> select * From dba_hist_baseline;
SQL> select * from sys.wrm$_baseline;
SQL> exec dbms_workload_repository.create_baseline(45, 46, 'base_line_test_1');
这一操作将快照从 45 到 46 编号,作为上面指定的基准线的一部分。查看现有的基准线:
SQL> select * From dba_hist_baseline;
SQL> select * from sys.wrm$_baseline;
在一些调整步骤之后,我们可以创建另一个基准线 — 假设名称为 apply_interest_2,然后只为那些与这两条基准线相关的快照比较量度。
SQL> exec dbms_workload_repository.create_baseline(46, 47, 'base_line_test_2');
5.删除基线
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'base_line_test_1', cascade=>false);
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'base_line_test_2', cascade=>true);
说明:cascade=>false,只删除基线,不删除快照;cascade=>true基线、快照都删除。
6.生成报表
可以使用脚本awrrpt.sql或awrrpti.sql来查看AWR报告,这两个脚本都在目录$ORACLE_HOME/rdbms/admin中。Awrrpt.sql脚本可以显示指定快照id范围的诊断信息,报告可以保存为文本文件或HTML文件;awrrpti.sql脚本与awrrpt.sql类似,唯一的不同就是在awrrpti.sql脚本中,你可以指定数据库ID和实例ID(作为参数)。
SQL> @D:\oracle\product.1.0\db_1\RDBMS\ADMIN\awrrpt.sql;
注意看提示,一步步操作。
7.将AWR数据导出并迁移到其它数据库以便于以后分析(Oracle10g Release2提供两个新工具来完成导出和迁移,需要在sys用户下)
SQL> execute DBMS_SWRF_INTERNAL.AWR_EXTRACT(dmpfile=> 'awr_data', dmpdir=> 'UTL_DIR', bid=> 32, eid=> 35 ,dbid=> 1233305016 );
8.迁移AWR数据文件到其他数据库(Oracle10g Release2提供两个新工具来完成导出和迁移,需要在sys用户下)
SQL> exec DBMS_SWRF_INTERNAL.AWR_LOAD(SCHNAME=> 'EDW', dmpfile=> 'awr_data', dmpdir=> 'UTL_DIR');
把AWR数据转移到SYS模式中:
SQL> exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME=> 'TEST');
通过awr特性我们可以随时从数据库提取awr报告。通过报告可以了解一个系统的整个运行情况,生成的报告包括多个部分。下面用shell脚本来收集每天开始时间6点,结束时间20点的awr报告并存储在/home/oracle/awr/report/目录下
目录:mkdir -p /home/oracle/awr/report
脚本:/home/oracle/awr/awr.sh
执行用户:oracle
vi /home/oracle/awr/awr.sh
#!/bin/bash # ******************************** # * awr.sh # ******************************** export ORACLE_SID=nwppdb export ORACLE_BASE=/home/oracle/app/oracle export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 #the big snap_id m=(`sqlplus -S "/ as sysdba" << EOF set pagesize 0 feedback off verify off heading off echo off select max(snap_id) from dba_hist_snapshot where begin_interval_time>to_date(to_char(sysdate,'YYYY-MM-DD')||' 06 ','YYYY-MM-DD HH24') and end_interval_time<=to_date(to_char(sysdate,'YYYY-MM-DD')||' 20','YYYY-MM-DD HH24'); EOF`) #the small snap_id n=(`sqlplus -S "/ as sysdba" << EOF set pagesize 0 feedback off verify off heading off echo off select min(snap_id) from dba_hist_snapshot where begin_interval_time>to_date(to_char(sysdate,'YYYY-MM-DD')||' 06 ','YYYY-MM-DD HH24') and end_interval_time<=to_date(to_char(sysdate,'YYYY-MM-DD')||' 20','YYYY-MM-DD HH24'); EOF`) name=(`sqlplus -S "/ as sysdba" << EOF set pagesize 0 feedback off verify off heading off echo off select instance_name from v\\\$instance; EOF`) date=(`sqlplus -S "/ as sysdba" << EOF set pagesize 0 feedback off verify off heading off echo off select to_char(sysdate,'yyyymmddhh24') from dual; EOF`) sqlplus -S "/ as sysdba" <<EOF @$ORACLE_HOME/rdbms/admin/awrrpt.sql; html 1 $n $m /home/oracle/awr/report/awrrpt_1_${name}_${date}.html EOF
这里大家注意根据需要修改ORACLE_SID、ORACLE_BASE、ORACLE_HOME参数
chmod u+x awr.sh
./awr.sh
执行过程如下:
拷贝html到本地后查看awr报告:
crontab -e 设置每天晚上23:30自动执行脚本收集awr报告
30 23 * * * sh /home/oracle/awr/awr.sh
关于用shell脚本自动生成awr报告的内容就介绍到这了,大家也可以自己根据需要对脚本做调整。后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!!
*请认真填写需求信息,我们会在24小时内与您取得联系。