Metric-Based Alerts vs. DBMS_ALERT: Choosing a Noise-Control Strategy for Oracle 19c
0 reputation · 27 Oct 2025, 07:39 UTC
0 reputation · 27 Oct 2025, 07:39 UTC
Establish an alerting approach that surfaces critical database conditions — such as tablespace exhaustion or sustained CPU saturation — without flooding operators with repeated notifications for the same underlying issue.
Metric-based alerts configured through DBMS_SERVER_ALERT or EM Express aggregate repeated threshold breaches into a single active alert until the metric returns to normal, reducing noise by design. However, they only expose a predefined set of system metrics and clear automatically once the condition subsides, potentially hiding intermittent spikes unless supplemental logging is enabled. In contrast, DBMS_ALERT provides application-level, point-to-point signaling for custom conditions, but each SIGNALWAITANY or WAITONE.
Enterprise Manager adds suppression policies (repeat interval, escalation after N occurrences) that apply to both mechanisms, yet those policies require specific privileges on MGMT_* views and may not propagate to third-party tools that read the alert log directly. Changing threshold values or repeat intervals can also require a database bounce or EM repository reload in some releases, affecting monitoring continuity.
DBMS_ALERT be throttled effectively at the source, or should a lightweight wrapper table with timestamp-based deduplication be used instead?DBMS_ALERT signals consumed by external monitoring — are they applied before the signal reaches the queue, or only within the EM console?34775 reputation · 27 Oct 2025, 14:24 UTC
For standard system metrics, built-in metric-based alerts provide sufficient noise reduction. For application-specific SLAs, a wrapper table with timestamp-based deduplication is the recommended approach over DBMS_ALERT.
When monitoring common metrics like tablespace usage, CPU saturation, or session counts, DBMS_SERVER_ALERT (and by extension, EM Express) is the optimal choice. These mechanisms use native aggregation: once a threshold is breached, a single active alert is generated. Subsequent breaches of the same threshold do not trigger new notifications until the condition is resolved and the alert is cleared.
You can verify the current state of aggregated alerts by querying the system views:
SELECT alert_name, status, last_modified
FROM v$alert_status
WHERE status = 'OPEN';
DBMS_ALERT is a signaling mechanism for inter-session communication, not a monitoring framework. It lacks native throttling; every SIGNAL call wakes up every session waiting on that signal. To prevent notification storms during a sustained SLA breach, do not rely on DBMS_ALERT alone.
To throttle application alerts, implement a lightweight state table to track the last notification time:
alert_id, last_sent_timestamp, and current_status.(SYSTIMESTAMP - last_sent_timestamp) exceeds your desired suppression interval (e.g., 1 hour).Enterprise Manager (EM) suppression policies are applied at the management console level. They govern how the EM UI displays alerts and how the EM notification engine sends emails or pages.
These policies do not filter the underlying data sources. If an external monitoring tool reads the alert log or listens for DBMS_ALERT signals directly, it will receive every event regardless of the EM suppression settings. To control noise for third-party tools, deduplication must happen at the database source (via the wrapper table method) or within the third-party tool's own logic.
To refine this recommendation, please specify if your external monitoring tool consumes alerts via V$ views, the XML alert log, or a custom API, as this determines where the deduplication logic must reside.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.