转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
Oracle 10g Release2新功能之变化通知         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:690 更新时间:2009/4/22 22:02:33
  引言

  在.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.


[系统软件]EXP-00008: ORACLE error 904 encountered的解决方…  [常用软件]PB7 连接 Oracle 的配置方法
[Web开发]oracle Export and Import 简介  [Web开发]ADO访问Oracle结果集的心得
[JAVA开发]JDBC+Hibernate将Blob数据写入Oracle  [JAVA开发]J2EE应用中与Oracle数据库的连接
[JAVA开发]Oracle Application Serve_  [其他]HP-UXrx2600B.11.22Uia64安装oracle9i9.2foria64手…
[其他]在RedhatEnterpriseserver3上安装oracle9iR2的注意…  [其他]PROC++批量导入导出ORACLE数据库表
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台