本文檔主要是用來解決物理備庫的性能監控問題。我們都知道,當物理備庫出現問題的時候,由於備庫是只讀模式的,所以無法在備庫上使用AWR/Statspack/ash/addm等性能報告來分析。因此,在故障分析和調優應用的時候,只能手動收集相關的統計數據信息,這樣給我們的工作帶來了巨大的不變。隨著Oracl ...
本文檔主要是用來解決物理備庫的性能監控問題。我們都知道,當物理備庫出現問題的時候,由於備庫是只讀模式的,所以無法在備庫上使用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_<db_unique_name>_<instance_name>.snap
生成備庫統計信息報告
執行腳本如下
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