IT忍者神龟之oracle系统包——dbms_alert用法
来源:互联网 发布:清除网络一切痕迹 编辑:程序博客网 时间:2024/06/05 03:25
oracle内部提供的在数据库内部和应用程序间通信的方式有以下几种:
1.警报,就是DBMS_ALERT包提供的功能;
2.管道,由DBMS_PIPE提供;
3.高级队列,这个就很复杂,当然提供的功能也是很高级的。
当然还可以使用外部过程,比如用PL/SQL封装外部的基于C的DLL或JAVA也能实现数据库和应用程序间的通信。 要使用这些功能,必须知道各个功能的特点,根据需要选用。 警报和事务相关的,是异步发送的;管道是与事务无关的,是同步发送的。
dbms_alert用于生成并传递数据库预警信息。使用包DBMS_ALERT,则必须以SYS登陆,为该用户授予执行权限。
sql>conn sys/oracle as sysdba
sql>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时,就可以获得警报。
警报可以是一对一,也可以是一对多的,即一个警报可以同时被多个接收者接收。
- IT忍者神龟之oracle系统包——dbms_alert用法
- oracle系统包——dbms_alert用法
- oracle系统包——dbms_alert用法
- Oracle系统包——dbms_alert用法
- IT忍者神龟之oracle系统包 dbms_output用法
- IT忍者神龟之oracle系统包——dbms_job用法(oracle定时任务)别用etl了
- IT忍者神龟之Oracle 中 decode 函数用法
- IT忍者神龟之oracle connect by用法回顾
- IT忍者神龟之关于oracle with as用法终结
- IT忍者神龟之oracle存储过程——面向对象编程
- IT忍者神龟之oracle常用日期计算
- IT忍者神龟之oracle高级CRUD
- IT忍者神龟之 oracle行转列、列转行
- IT忍者神龟之oracle 集合的使用
- IT忍者神龟之Oracle查询树形结构
- IT忍者神龟之Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
- 使用系统包DBMS_ALERT监视表
- IT忍者神龟之查看、修改oracle字符集,查看oracle版本
- IT忍者神龟之oracle系统包——dbms_job用法(oracle定时任务)别用etl了
- Tomcat8源码编译及导入Eclipse中研究
- Oracle SQL 优化
- 第十五章 15.5节练习
- NYOJ 题目585取石子(六)(nim博弈)
- IT忍者神龟之oracle系统包——dbms_alert用法
- 数学分支
- Struts2 拦截器
- eclipse 使用Heap检测和分析Android应用内存
- linux系统调用和库函数调用的区别
- Collection of algorithm for sorting. 常见排序算法集(二)
- Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)
- IT忍者神龟之oracle存储过程中is和as区别描述
- Struts 标签