本文档主要是用来解决物理备库的性能监控问题。我们都知道,当物理备库出现问题的时候,由于备库是只读模式的,所以无法在备库上使用AWR/Statspack/ash/addm等性能报告来分析。因此,在故障分析和调优应用的时候,只能手动收集相关的统计数据信息,这样给我们的工作带来了巨大的不变。随着Oracle 11.1 ADG的出现,被遗忘很久的Statspack有了新的用途,那就是可以用来监控备库性能。
参考资料
MOS文档: Installing and Using Standby Statspack in 11g (文档 ID 454848.1)
安装要求
备库状态为read-only模式
备库状态为正在应用日志的状态
Statspack的安装
主库端安装statspack
执行安装脚本如下:
sqlplus / as sysdba
SQL> @?/rdbms/admin/spcreate.sql
注:如果你的主库已创建perstat用户,此脚本可以跳过。如果你的主库上没有该模式对象,则需要创建。创建的过程中,会要求填写如下信息:
perfstat用户的密码(自定义)
模式对象默认使用的表空间(建议使用SYSAUX)
模式对象默认使用的临时表空间( 建议使用系统,例:TEMP)
主端安装standby statspack
执行安装脚本如下:
sqlplus / as sysdba
SQL> @?/rdbms/admin/sbcreate
注:此脚本在执行过程中会创建standby statspack的模式对象,即stdbyperf,安装过程中会有如下提示信息:
提示输入stdbyperf用户的密码(自定义)
模式对象默认使用的表空间(建议使用SYSAUX)
模式对象默认使用的临时表空间(建议使用系统,例:TEMP)
创建完成之后,会自动调用sbaddins.sql脚本,这个脚本的目的是用来配置Statpack添加第一个备库实例的信息。会提示输入,如下信息:
连接到物理备库的TNS 的本地服务名
需要提供perfstat用户的密码
在Statspack配置信息中手动添加新的实例
使用如下用户登录,执行脚本如下:
SQL> connect stdbyperf/your_password
SQL> @?/rdbms/admin/sbaddins
会提示输入如下信息:
1.连接到物理备库的TNS 的本地服务名
2.需要提供perfstat用户的密码
手动收集备库的性能数据* *
执行脚本如下
SQL> connect stdbyperf/your_password
SQL> exec statspack_
生成备库统计信息报告
执行脚本如下
SQL> connect stdbyperf/your_password
SQL>@?/rdbms/admin/sbreport
删除快照信息
执行脚本如下:
SQL>connect stdbyperf/your_password
SQL>@?/rdbms/admin/sbpurge
删除备库的Statspack的配置
执行脚本如下:
SQL>connect stdbyperf/your_password
SQL> @?/rdbms/admin/sbdelins
删除备库的Statspack
SQL> connect / as sysdba
SQL> @?/rdbms/admin/sbdrop
配置自动收集快照任务
1.查看job
SQL> connect stdbyperf/your_password
SQL>select job,schema_user,last_date,what,instance from user_jobs;
2.查询DB_LINK和PACKAGE_NAME
SQL> col DB_UNIQUE_NAME for a5
SQL> col PACKAGE_NAME for a25
SQL> select * from STATS$STANDBY_CONFIG;
DB_UN INST_NAME DB_LINKPACKAGE_NAME
--- ------------ ---------------- -----------------------
ST wxxrdb STDBY_LINK_st STATSPACK_ST_wxxrdb
3.创建JOB任务
variable jobno number;
variable instno number;
begin
select instance_number into :instno from v$instance@ STDBY_LINK_st;
dbms_job.submit(:jobno, "STATSPACK_ST_wxxrdb.snap;", trunc(sysdate+1/24,"HH"), "trunc(SYSDATE+1/24,""HH"")", TRUE, :instno);
commit;
end;
/
注:红字部分需要根据上一步查询出来的DB_LINK和PACKAGE_NAME的值,时间默认为1个小时,可以自行修改
4.删除JOB任务
SQL>exec dbms_job.remove("job_id");
自动删除快照
执行脚本如下:
stdby_del_snap.sh
注:将此脚本添加到定时任务中即可,建议在系统空闲的时间段执行
脚本存放目录如下及删除规则:
/oracle/script/stdby_del_snap/bin
删除规则:快照保存时间为7天,每天凌晨1点执行一次脚本:
00 1 * * * /oracle/script/stdby_del_snap/bin/stdby_del_snap.sh >>/oracle/script/stdby_del_snap/log/stdby_del_snap.log 2>&1