Oracle警報系統

llnnmc發表於2017-10-25

一、警報條件監視和通知


警報系統在空間管理方面,預設的配置是在考慮自動擴充套件和內容本質的情況下,當表空間達到全滿的85%時,將引發警告性報警。當表空間達到全滿的97%時,將發出嚴重報警。


警報有兩種形式,有狀態警報基於持久儲存且可以修復的條件。如表空間的使用、掛起的會話數量,或執行完SQL語句需要的平均時間。無狀態警報基於事件,事件發生後又消失了。如查詢因快照過舊而失敗,或兩個形成死鎖的事務。


要配置警報系統,使用者需要設定閾值,閾值儲存在AWR中。此後MMON後臺程式將實時監視資料庫和例項,並將當前狀態和閾值對比,如果超出閾值,就引發警報,而引發警報的機制就是將條目放在警報佇列中。佇列是一個可供其他程式讀取的訊息表。下一步對警報訊息的處理方式的預設行為是Enterprise Manager讀取訊息使訊息出列,並顯示在資料庫主頁中。也可以配置在發現警報時傳送電子郵件或SMS訊息。


可以透過查詢檢視dba_outstanding_alerts檢視警報資訊:

col creation_time for a20

col host_id for a20

col object_name for a20

col object_type for a20

col reason for a100

col suggested_action for a50

col message_group for a20

select to_char(creation_time, 'yyyy-mm-dd hh24:mi:ss') creation_time, host_id, instance_name, object_name, object_type, reason, metric_value, suggested_action, message_type, message_group, message_level from dba_outstanding_alerts;



有狀態警報的預設通知機制僅僅是在Enterprise Manager的資料庫主頁上顯示警報,並將它們寫入dba_outstanding_alerts檢視,在消除之前,警報一直可見。在警報清除時,系統將警報從dba_outstanding_alerts檢視中刪除,並轉入dba_alert_history檢視。而無狀態警報(如重做生成率等與活動相關的警報)可能在活動減少時自動清除,其被直接寫入歷史檢視,不會記錄到dba_outstanding_alerts中。


透過檢視dba_alert_history檢視歷史警報資訊:

col creation_time for a20

col host_id for a20

col object_name for a20

col object_type for a20

col reason for a100

col suggested_action for a50

col message_group for a20

select to_char(creation_time, 'yyyy-mm-dd hh24:mi:ss') creation_time, host_id, instance_name, object_name, object_type, reason, metric_value, suggested_action, message_type, message_group, message_level, resolution from dba_alert_history order by creation_time desc;



二、閾值的設定


可設定警告閾值的指標記錄在v$metricname檢視中,這樣的指標有200多個,不一一列出:

col group_name for a35

col metric_name for a50

col metric_unit for a45

select * from v$metricname;



要檢視AWR當前設定的閾值,可查詢檢視dba_thresholds:

col metrics_name for a50

col object_name for a20

col warning_value for a20

col critical_value for a20

select metrics_name, object_name, status, warning_value, critical_value from dba_thresholds;



透過程式包dbms_server_alert中的過程set_threshold可以設定閾值。


以下舉例說明閾值的使用:


1)建立表空間:

create tablespace tbs1 datafile 'd:\oradata\mes\tbs1.dbf' size 10m;


2)檢視當前關於表空間管理方面的指標和閾值,此時存在預設的針對所有使用者表空間的85%97%的閾值設定:

select * from v$metricname t where t.metric_name like 'Tablespace%';



select metrics_name, object_name, status, warning_value, critical_value from dba_thresholds where metrics_name like 'Tablespace%';


3)設定表空間TBS1的閾值,空間使用比例大於88%時發出警告,大於98%時發出嚴重警告:

begin

    dbms_server_alert.set_threshold(metrics_id              => dbms_server_alert.tablespace_pct_full,

                                    warning_operator        => dbms_server_alert.operator_gt,

                                    warning_value           => 88,

                                    critical_operator       => dbms_server_alert.operator_gt,

                                    critical_value          => 98,

                                    observation_period      => 1,

                                    consecutive_occurrences => 1,

                                    instance_name           => null,

                                    object_type             => dbms_server_alert.object_type_tablespace,

                                    object_name             => 'TBS1');

end;

/


4)檢視新的閾值設定,可以看到增加了單獨針對表空間TBS1的閾值設定:

select metrics_name, object_name, status, warning_value, critical_value from dba_thresholds where metrics_name like 'Tablespace%';


5)在TBS1上建立表,並模擬空間資料量的增長:

create table cmes.t1 tablespace tbs1 as select * from all_objects;


6)檢視警報記錄:

select creation_time, host_id, instance_name, object_name, object_type, reason, metric_value, suggested_action, message_type, message_group, message_level from dba_outstanding_alerts;



三、其它通知方法


如果需要除預設通知外的其他通知,就必須在Enterprise Manager中進行設定。Enterprise Manager通知系統要求三個級別的配置:

  • 配置通知方法。其他通知方法包括:作業系統命令或指令碼、PL/SQL過程或SNMP陷阱。
  • 建立規則來捕獲事件。
  • 使使用者訂閱規則。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2146337/,如需轉載,請註明出處,否則將追究法律責任。

相關文章