Oracle 10g Release2新功能之变化通知

引言

在.NET应用程序中,我们有很多方法实现对Oracle数据库的访问。 但是从功能和性能上来分析,Oracle Data Provider for .NET(ODP.NET)无疑是我们最好的选择,它是Oracle专门为基于.NET的应用程序设计的一套接口,它的访问速度要远远快于其它方法。

本文将介绍Oracle Database的新功能之一:Change Notification。为了能更好的说明这个新功能,我将用例程的方式来介绍它的定义和使用方法。

Database Change Notification的产生背景

在现在的程序开发过程中,我们经常考虑的一个提高性能的方法就是用data cache。Data cache 避免了我们每次需要数据的时候都去访问数据库,这样节省了大量的时间。但是这样就出现了一个问题,当我们用data cache的时候,如果在数据库中的数据发生了改变,那么我们data cache 中的数据就和数据库的数据不一致了,这样将会导致错误。为了解决这个问题,我们一般常用两种方法。

1. 让用户手动的更新data cache的内容,例如提供一个更新按钮。

2. 让我们的程序间隔一定的时间自动去更新data cache的内容。

不难看出,这两种方法都有相当的局限性。

第一种方法用户必须记住经常的去更新数据,如果数据库中的数据改了但是用户并没有去更新数据,这样将导致错误。第二种方法的局限性是我们没有办法设置一个恰好的时间间隔使数据库数据变化的时候保证data cache的数据也发生变化。

Database Change Notification就是为了解决这个难题。

Database Change Notification 的基本概念

Database Change Notification的作用就是当数据库中的数据发生变化的时候,自动发出一个通知。

用Database Change Notification有三个步骤:

1. 注册: 指定数据库要监听的查询。ODP.NET自动注册基于这个查询的监听事件。数据库可以监听DML(Data Manipulation Language)事件,DDL(Data Definition Language)事件,和global 事件(例如关闭数据库)。

2. 通知:一旦数据库中的数据发生变化,数据库将自动发出通知,我们要在我们的程序中定义事件处理操作。

3. 响应:在我们的程序中,一旦收到通知,我们一般情况下会自动更新data cache,当然我们可以通知用户数据发生改变,由他来决定是否进行更新。

举例:

在ODP.NET中使用Database Change Notification很简单,请看下面的例程。这个例程用HR数据库用户。

static void Main(string[] args)
{
 string sql = "select first_name, last_name, salary from employees where employee_id = 149";
 string constr = "User Id=hr;Password=hr;Data Source=oramag;Pooling=false";
 OracleConnection con = new OracleConnection(constr);
 con.Open();
 OracleCommand cmd = new OracleCommand(sql, con);
 OracleDependency dep = new OracleDependency(cmd);
 dep.OnChange += new OnChangeEventHandler(OnDatabaseNotification);
 cmd.ExecuteNonQuery();
 while (notificationReceived == false)
 {
  Console.WriteLine("Waiting for notification...");
  System.Threading.Thread.Sleep(2000);
 }
 cmd.Dispose();
 con.Dispose();
 Console.WriteLine("Press ENTER to continue...");
 Console.ReadLine();
}
public static void OnDatabaseNotification(object src, OracleNotificationEventArgs args)
{
 Console.WriteLine("Database Change Notification received!");
 DataTable changeDetails = args.Details;
 Console.WriteLine("Resource {0} has changed.", changeDetails.Rows[0]["ResourceName"]);
 notificationReceived = true;
}

HR一定要有change notification 权限,我们用下面的命令。

grant change notification to hr;

在你的电脑上安装ODP.NET,添加下面的using statement在你的代码刚开始的地方。

using System.Threading;
using System.Data;
using Oracle.DataAccess.Client;

现在你就可以运行这段例程了。输出如下:

Waiting for notification...

这个时候去修改你的数据库,例如用下面的命令,

update employees set salary = salary+10
where employee_id = 149;
commit;

可以看到有如下的输出,

Database Change Notification received!
Resource HR.EMPLOYEES has changed.

时间: 2024-10-26 16:41:30

Oracle 10g Release2新功能之变化通知的相关文章

Oracle 10g Release2新功能之Ref Cursor

Ref Cursor就是我们定义在服务器端的结果集的reference. 当我们打开一个Ref Cursor的时候,没有任何的数据返回到客户端,相反,数据在服务器上的地址将会被返回到客户端.这样用户就可以自己决定什么时间和以那种方式通过Ref Cursor去取数据. 在以前版本的ODP.NET中,我们可以通过Ref Cursor取数据,但是我们不能把Ref Cursor作为一个Input参数传递给PL/SQL的存储过程和存储函数.但是在Oracle Database 10g Release2,我

Oracle 10g R2新特性之备份和可用性特性

Oracle 的自身备份 到现在为止,许多开发人员已经认识到 RMAN 的潜力以及它作为数据库备份工具的实用性. 您可能还记得 RMAN 可以将数据直接备份到磁盘和磁带. 当涉及磁带解决方案时,RMAN 使用名为介质管理库 (MML) 的 API 来操纵磁带子系统. 此 MML 特定于所涉及的磁带管理系统和硬件. (例如,如果涉及 Tivoli Storage Manager,则必须使用特定的 MML - Tivoli Data Protector,RMAN 需要它来通过 Tivoli 管理磁带

Safari 7.0.3新功能:带来通知推送功能增强

苹果于本周二发布了Mac版Safari浏览器的一个更新,并且为OS X 10.9 Mavericks用户带来了增强的通知推送功能.在Safari 7.0.3中,通知推送迎来了更大的控制权,因为在此前的版本中,它需要对每个网站都进行管理. 在最新的版本中,用户可以简单地取消"允许网站请求发送推送通知的许可"复选框,轻松禁用所有传入尝试.此外,本次更新还修复了一个"或许会阻止收到推送通知"的bug. 其它方面,包括支持.cab和.clothing等新出现的顶级域名(此前

iOS 7有哪些新功能和变化

下星期我们将看到的正式版将和WWDC上看到的大不相同.苹果六月份发布了全新版本的iOS操作系统--这是从2007年首次发布以来的最大的一次调整和改进.这次的改变招致许多批评.许多设计师在网站上晒出了他们自己的"改进版"iOS 7,还撰写文章批评苹果公司在iOS 7上所使用字体.图标和毛玻璃效果的半透明设计. 经过3个月.6个测试版的改进,苹果公司已做好准备,发布两款全新的.内置iOS 7的iPhone手机,与此同时,亦准备好向所有iPhone 4.iPad 2及以上版本的用户推送iOS

Oracle ASM 11g的新功能

一.什么是ASM ASM全称为Automated Storage Management,即自动存储管理,它是自Oracle10g这个版本Oracle推出的新功能.这是Oracle提供的一个卷管理器,用于替代操作操作系统所提供的LVM,它不仅支持单实例配置,也支持RAC这样的多实例配置.将给Oracle数据库管理员带来极大的方便,ASM可以自动管理磁盘组,并提供数据冗余和优化.特别是对于企业极的大型数据库管理员来说,可以使管理员可以从管理成百上千个数据文件这些琐碎的日常事务中解脱开来,以便处理其它

OS X Yosemite 10.10正式版新功能

  OS X Yosemite 10.10正式版新功能介绍在今天早上终于正式发布了,这是 OS X系统历史上变化最大的一次,OS X终于全面的走向了扁平化. 在这个时候我们自然是想要尽快的体验到正式版的乐趣,怎么办呢?方法一:打开你的 Mac App Store ,在首页的幻灯片里面就有 OS X 10.10 的下载地址,直接下载更新即可.方法二:在PC6苹果网下载 OS X 10.10 完整版固件然后再安装更新.然后再验证更新即可. S X Yosemite 安装应用中 InstallESD.

Oracle 10G First Release的新特性简介(下)

oracle Oracle 10G First Release的新特性简介(下) By Fenng 2003-07-10 注:近日Oracle已经正式宣布该版本的Oracle命名为10G,其中的G为Grid之意.特此更正. 高可用性的加强 1.缩短应用和数据库升级的宕机时间 通过使用standby数据库.允许在不同版本的standby和产品数据库间切换.现有的联机重定义功能能够支持一步克隆所有相关的数据库对象. 2.回闪(Flashback)任何错误 该版本的Oracle也扩展了Flashbac

Oracle 10G 新特性——RMAN

Oracle 10G 新特性--RMAN 作者:fuyuncat 来源:http://www.hellodba.com/ RMAN增量备份方案.增量备份的离线恢复.恢复预览.从resetlogs中恢复.文件压缩等被重新设计后变得更加强大了. 大多数人都赞同RMAN就是Oracle事实上的数据库备份工具.尽管早期版本的RMAN已经很强大,但是人们对它的期待还是有很多.很多DBA对于一些很希望有但实际上没有的特性很烦恼.很幸运,在10g中解决了很多问题并且增加了很多受期待的特性,下面就一起看一下.

Oracle 10G First Release的新特性简介(上)

oracle Oracle 10G First Release的新特性简介(上)   By Fenng 2003-6-8   Oracle(www.oracle.com)公司早已经宣称,Oracle 9i数据库只是一个过渡性的产品,真正的技术革新很可能在下一版,也就是通常说的10i(内部可能的版本号是2003,以下简称10i,估计在正式发行的时候会有一个新的名字)中体现出来.很多技术人员可能都会比较关心Oracle 10i究竟能有哪些新功能,是否能提供一些激动人心的新特性?我们在这里对Oracl