对数据库更改执行.net操作
本文关键字:net 操作 执行 数据库 | 更新日期: 2023-09-27 18:10:52
我们有一个进程,当Oracle中特定的数据库表发生变化时,需要触发该进程。目前已经开发了一个类似的过程,使用触发器和触发触发器时发生的一系列后续数据库操作。
然而,在这个解决方案中,当数据库表中的一行或几行发生变化时,我们希望调用。net组件(很可能是服务)。现在,您可以实现一种轮询机制,它将定期检查表中是否有这些修改,然后在发现任何修改时实例化服务。然而,我更喜欢事件驱动的方法。
我想这是在其他地方做过的事情,所以我想知道其他人用什么方法来处理这样的需求?
Thanks in advance
Edit:当底层数据发生变化时触发的进程本质上是使用一些相关数据对外部web服务的调用。我开始考虑这个调用是否应该作为将数据提交到数据库的同一过程的一部分发生,而不是由数据更改本身触发
你应该看看。net的Oracle数据库扩展。
从链接的文章:
Oracle Database Extensions for .NET提供以下功能:
- Oracle数据库的公共语言运行时(CLR)宿主
- 通过Oracle数据提供程序访问。net类的数据
- Oracle部署向导
你仍然会使用触发器来检测数据库的变化,但不是触发你所描述的所有db端逻辑,你现在可以从一个。net模块执行该逻辑。
如果你正在使用Oracle的。net驱动程序,你可以使用Oracle的连续查询通知(CQN)来做到这一点。
你只需要给它一个普通的SELECT查询,当查询的结果集发生变化时,它会在你的应用中触发一个回调。
我知道的一个注意事项是,当它最初运行查询以订阅连续通知时,它暂时需要一个排他锁。通常这不是什么大问题,因为您只需在启动时执行一次,因此同一表上的任何其他DB查询将被阻塞几分之一秒。
这听起来可能,但可能需要一些跑腿的工作。我想你应该调查一下Oracle访问管理器http://download.oracle.com/docs/cd/E12530_01/oam.1014/e10355/toc.htm
这与保罗的相似;但不假设您在Windows机器上安装了Oracle。
您可以使用dbms_scheduler创建一个将调用外部进程的作业。
您可以直接从Oracle调用远程外部作业(这需要安装Oracle Scheduler Agent,但不需要其他)
它需要一些跑腿的工作来设置身份验证等,但这是可行的。
则使用事件来启动作业(从触发器调用)。
这样,你实际上可以利用很多你已经编码的东西,只需要oracle调度程序来处理其余的。
Oracle提供了两种机制来处理以一种相当好的方式描述的内容…在DB端,你实现触发器来检测变化或任何应该在。net端导致动作的东西…
对于通信,您使用基于Oracle内置队列技术(称为高级队列技术,AQ)的发布/订阅机制-一个很好的例子,请参阅http://www.devart.com/dotconnect/oracle/docs/AQ.html(不关联,只是一个快乐的客户)。
另一个选择是使用内置的DBMS_ALERTER
包进行事务性和异步通信-参见示例http://www.devart.com/dotconnect/oracle/docs/Devart.Data.Oracle~Devart.Data.Oracle.OracleAlerter.html
说明一下:
上述技术(DBMS_ALERTER和AQ)是Oracle内置的技术,不针对任何第三方库…你只需要一个ADO。. NET提供程序支持它们…
EDIT - after the EDIT from OP:
如果你可以控制代码或调用触发数据变化的代码(WebService?),那么它确实是处理它的最好方法,纯粹是在。net方面的事情…这也有助于处理这样的更改遇到错误等情况。