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

2016-02-19 16:48 7 1 收藏

下面图老师小编要跟大家分享Oracle 10g Release2新功能之变化通知,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

  引言

  在.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 的基本概念

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

  用Database Change Notification有三个步骤:

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

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  举例:

  在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+10where employee_id = 149;commit;

  可以看到有如下的输出,

  

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

来源:http://www.tulaoshi.com/n/20160219/1613192.html

延伸阅读
     在前面的文章,我为大家介绍了如何使用Oracle 10g的虚拟私有数据库特征(VPD)掩藏某列数据TechRepublic的成员BrooklynPennyPincher建议我写一篇关于VPD与关系视图的比较文章。      前面文章中小技巧的任务是假如department_id的值等于60,那么掩藏报告中的salary和commission_pct列。因为谓词...
    Oracle 10g的最优秀功能之一是顾问框架(Advisory Framework),它是一个优化顾问集合,可帮助您充分利用数据库。其中的一个顾问——SQL访问顾问(Access Advisor)——建议对模式中的索引和物化视图进行改变来提高性能。      但是,由于顾问框架(Advisory Framework)被一般化,以支持各种不同的顾...
在linux下安装oracle是一件令人生畏的事情,其复杂程度远远超过安装linux操作系统本身。如果能够进行成功的安装oracle,那么同时也就顺便掌握了linux一些技术。本文介绍在redhat linux 下安装oracle 10g 的方法。在这里说明一下,Oracle 10g的g是grid 的缩写,意为网格,目前较为前沿的网络计算技术。 Oracle 10g 对软硬件的要求都非常的高,...
在具有许多活跃用户的繁忙生产环境中,跟踪SQL会话是费时且十分复杂的,因为在任何使用连接池的多层系统中处理SQL语句可能要涉及多个进程,或者甚至是不同的实例。 利用Oracle数据库10g,Oralce通过一个新的内置软件包DBMS_MONITOR合理化了SQL的跟踪,这个软件包中包含以前无书面记载的跟踪工具(如DBMS_SUPPORT软件包)的功能。现在...
当数据存储在一个普通表中的时候,这些记录将以插入到数据库时的顺序物理地保存到分配的块中。 例如,假如有一个用于存储员工信息的表,那么员工姓名将会按照插入到表的顺序存储在表中。 假如员工记录非常多的话,那么数据表的响应速度就会逐渐变慢。你可以通过选择值相对等分布的一列(如员工的部门编号)并建立一个簇表来提高查询员工的速度...

经验教程

198

收藏

15
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部