DBMS_ALERT内置包提供了注册、发送和接收告警的能力。
DBMS_ALERT子程序总览
子程序 | 说明 |
REGISTER Procedure | 从指定的告警接收消息。 |
REMOVE Procedure | 取消指定告警的通知。 |
REMOVEALL Procedure | 从注册列表中删除此会话的所有告警。 |
SET_DEFAULTS Procedure | 设置轮询时间间隔。 |
SIGNAL Procedure | 发送告警信号。 |
WAITANY Procedure | 在到达超时时间之前等待接收来自会话注册的告警的消息。 |
WAITone Procedure | 在到达超时时间之前等待接收来自指定告警的消息。 |
REGISTER Procedure
该存储过程用于为当前会话注册指定的告警。
语法
DBMS_ALERT.REGISTER (
name IN VARCHAR2,
cleanup IN BOOLEAN DEFAULT TRUE);
参数说明
参数 | 说明 |
name | 被注册的告警名称。 |
cleanup | (可选参数)指定是否对DBMS_ALERT包使用的任何现存的孤立管道进行清理。此清理仅在第一次调研REGISTER时为每个包实例化执行。默认值是TRUE。 |
示例
该示例展示了如何进行指定告警的注册。
EXEC DBMS_ALERT.REGISTER('alert', TRUE);
REMOVE Procedure
该存储过程用于取消指定告警的通知。
语法
DBMS_ALERT.REMOVE (
name IN VARCHAR2);
参数说明
参数 | 说明 |
name | 待从注册列表中删除的告警名称。 |
示例
该示例展示了如何删除指定的告警名称。
EXEC DBMS_ALERT.REMOVE('alert');
REMOVEALL Procedure
该存储过程用于从注册列表中删除此会话的所有告警。
语法
DBMS_ALERT.REMOVEALL;
示例
该示例展示了如何使用该存储过程。
EXEC DBMS_ALERT.REMOVEALL;
SET_DEFAULTS Procedure
该存储过程用于设置轮询时间间隔。
语法
DBMS_ALERT.SET_DEFAULTS (
sensitivity IN NUMBER);
参数说明
参数 | 说明 |
sensitivity | 轮询的时间间隔,单位为秒。 |
示例
该示例展示了如何设置轮询的时间间隔。
EXEC DBMS_ALERT.SER_DEFAULTS(0.0001);
SIGNAL Procedure
该存储过程用于产生一条指定名称的告警
语法
DBMS_ALERT.SIGNAL (
event IN VARCHAR2,
message IN VARCHAR2);
参数说明
参数 | 说明 |
event | 发送消息的告警的名称。 |
message | 告警的具体消息。 |
示例
该示例展示了如何发送一个告警消息。
EXEC DBMS_ALERT.SIGNAL('alert' ,'This is a alert message.');
WAITANY Procedure
该存储过程用于在到达超时时间之前等待接收来自会话注册的告警的消息。
语法
DBMS_ALERT.WAITANY (
name OUT VARCHAR2,
message OUT VARCHAR2,
status OUT INTEGER,
timeout IN NUMBER DEFAULT MAXWAIT);
参数说明
参数 | 说明 |
name | 消息所在的告警的名称。 |
message | 告警的具体消息。 |
status | 返回的状态码。取值如下:
|
timeout | 等待产生告警的时间。单位为秒。 |
示例
该示例展示了两个会话之间传输告警信息的过程。
-- SESSION A: register an alert and wait any
DECLARE
name VARCHAR2;
msg VARCHAR2;
status INTEGER;
BEGIN
DBMS_ALERT.REGISTER('alert', TRUE);
DBMS_ALERT.WAITANY(name, msg, status, 10);
-- Alert name is: alert
-- Alert message is: a message from tests
-- Alert status is: 0
DBMS_OUTPUT.PUT_LINE('Alert name is: ' || name);
DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;
-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');
WAITONE Procedure
该存储过程用于在到达超时时间之前等待接收来自指定告警的消息。
语法
DBMS_ALERT.WAITONE (
name IN VARCHAR2,
message OUT VARCHAR2,
status OUT INTEGER,
timeout IN NUMBER DEFAULT MAXWAIT);
参数说明
参数 | 描述 |
name | 消息所在的告警的名称。 |
message | 告警的具体消息。 |
status | 返回的状态码。取值如下:
|
timeout | 等待产生告警的时间。单位为秒。 |
示例
该示例展示了在指定的告警名称没有消息的情况下的输出结果,有消息的情况的输出示例请参考WAITANY。
-- SESSION A: register an alert and wait any
DECLARE
name VARCHAR2;
msg VARCHAR2;
status INTEGER;
timeout INTEGER;
BEGIN
DBMS_ALERT.REGISTER('alert', TRUE);
DBMS_ALERT.WAITONE('alert', msg, status, 10);
-- Alert message is: a message from tests
-- Alert status is: 0
DBMS_OUTPUT.PUT_LINE('Alert message is: ' || msg);
DBMS_OUTPUT.PUT_LINE('Alert status is: ' || status);
END;
-- SESSION B: send signal
EXEC DBMS_ALERT.SIGNAL('alert', 'This is a alert message.');