首页 > 数据库 > Oracle > 正文

Oracle系统包——dbms_alert用法

2024-08-29 13:54:33
字体:
来源:转载
供稿:网友
Oracle内部提供的在数据库内部和应用程序间通信的方式有以下几种:1.警报,就是DBMS_ALERT包提供的功能;2.管道,由DBMS_PipE提供;3.高级队列,这个就很复杂,当然提供的功能也是很高级的。当然还可以使用外部过程,比如用PL/SQL封装外部的基于C的DLL或java也能实现数据库和应用程序间的通信。 要使用这些功能,必须知道各个功能的特点,根据需要选用。 警报和事务相关的,是异步发送的;管道是与事务无关的,是同步发送的。dbms_alert用于生成并传递数据库预警信息。使用包DBMS_ALERT,则必须以SYS登陆,为该用户授予执行权限。sql>conn sys/oracle as sysdbasql>grant execute on dbms_alert to scott;1.register:用于注册预警事件示例如下:sql>exec dbms_alter.register('alter1');2.remove:用于删除会话不需要的预警事件.3.removeall:用于删除当前会话所有已注册的预警事件语法如下:dbms_alter.removeall;4.set_defaults用于设置检测预警事件的时间间隔,默认时间间隔为5秒5.signal:用于指定预警事件所对应的预警消息.6.waitany:用于等待当前会话的任何预警事件,并且在预警事件发生时输出相应信息.在执行该过程之前,会隐含地发出COMMIT.语法如下:dbms_alter.waitany (    name out varchar2,    message out varchar2,    status out integer,    timeout in number default maxwait);注:status用于返回状态值,返回0表示发生了预警事件,返回1表示超时;timeout用于设置预警事件的超时时间.7.waitone:用于等待当前会话的特定预警事件,并且在发生预警事件时输出预警消息.语法同上警报的使用:简单来说,警报是在服务器端发出,然后在客户端接收,这就需要在客户端有一个线程来监听警报。现在拿SQLPLUS做个例子,打开两个SQLPLUS,分别用提示符SQL1和SQL2表示。1、首先应先授予用户使用DBMS_ALERT的权限。登录到SYS用户下,执行一下语句:conn sys/oracle as sysdbagrant execute on dbms_alert to scott; 2、发送进程(服务器端发出)SQL1>DECLARE  V_ALERTNAME VARCHAR2(30) := 'alert1';BEGIN  DBMS_ALERT.SIGNAL(V_ALERTNAME, 'hello, this   is   sending   PRocess!');  COMMIT; --必须COMMIT,警报才会真正被发出END;/ 3、接受进程(客户端接收)SQL2>set serveroutput ON;SQL2>DECLARE  V_ALERTNAME VARCHAR2(30) := 'alert1';  V_STATUS    NUMBER;  V_MSG       VARCHAR2(100);BEGIN  DBMS_ALERT.REGISTER(V_ALERTNAME);  --注册要接收信息的警报器   DBMS_ALERT.WAITONE(V_ALERTNAME, V_MSG, V_STATUS);  IF V_STATUS != 0 THEN    DBMS_OUTPUT.PUT_LINE('error');  ELSE    DBMS_OUTPUT.PUT_LINE(V_MSG);  END IF;END;/ 注意:接收者要接收警报必须执行等待过程,等待警报的到来,否则不会得到任何警报的。用二种方法测试一下:方法一:先执行步骤2,再执行步骤3。这时可以获得警报方法二:先执行步骤3,再执行步骤2。这时不能获得任何警报,执行步骤3的session处于等待状态,当下一时间点再次执行步骤2时,就可以获得警报。警报可以是一对一,也可以是一对多的,即一个警报可以同时被多个接收者接收。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表