Chinaunix
标题:
当oracle数据库数据变动,不使用触发器如何知道数据发生了变动.
[打印本页]
作者:
foxpro7
时间:
2007-12-06 14:48
标题:
当oracle数据库数据变动,不使用触发器如何知道数据发生了变动.
正在搞一个自动侦查数据变动就调整的一个算法.
最好知道是那个表的那条数据发生了变动.
作者:
zhangyh123
时间:
2007-12-06 14:48
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,当然我们可以通知用户数据发生改变,由他来决定是否进行更新。
作者:
flyhu
时间:
2007-12-08 21:34
1、记录更新时间,需要改应用。
2、分析archivelog。。
作者:
bigmoyo
时间:
2007-12-09 15:23
标题:
——感觉还是触发器好!
——自己搞程序来分析archivelog?不现实!
——更改应用:发生更改,就记录其主键及更改时间于一个表,另一进程不断扫描此表即可知道发生了变动及变动位置,接下来进行调整,并置已经处理标志(已处理则定期移入历史表)。
——我的结论:通过触发器来记录被更改记录的特征如主键即可,应用可以完全不改,由另一进程不断扫描进行“调整”。
作者:
foxpro7
时间:
2007-12-12 14:18
楼上两位的说法我都知道,但总是感觉不想通过改应用,也不想使用触发器。
作者:
zhangyh123
时间:
2007-12-14 17:40
这个属于Oracle 10g Release2的 新功能
作者:
foxpro7
时间:
2007-12-21 13:33
不知道送积分了没有?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2