网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何使每个用户有独立的cgi-bin目.
.用正则表达式函数验证身份证号码.
.[技术]sql 调优整理.
.Oracle Database 10g:自动共享内.
.虚拟主机(Web/Mail)的设定摘要.
.利用角色增强应用系统安全性.
.详细讲解如何将数据模型转换成数.
.连接到oracle数据库(一).
.g数据库软件“Oracle8i”存在有安.
.Oracle并行服务器(OPS)经典FAQ.
.嵌入式 Linux 系统图形及图形用户.
.通过JDBC操纵Oracle数据库LOB字段.
.查出任一年月所含的工作日.
.Oracle 8(8.0.5)标准版安装指南.
.oracle trunc()函数的用法.
.关于回滚机制的一些测试.
.关于SGA设置的一点总结.
.sga中的名词解释.
.处理Oracle数据库中一张有效的Dr.
.全面剖析Oracle数据库中的分区功.

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

发表日期:2008-2-9


引言

  在.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.
上一篇:recover database in time point 人气:781
下一篇:什么叫做裸设备 人气:667
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐