数据库更改通知是否优于触发器?

时间:2015-04-08 04:02:30

标签: c# .net oracle wcf asp.net-web-api

我正在使用Oracle数据库和WCF / WebAPI服务开发应用程序。该服务应该知道如何更改数据库中的某个表。我在网上浏览并在Oracle RDBMS中找到了一个名为“数据库更改通知”的技术,我认为这是我在这种情况下所需要的。但是我的团队领导让我为此目的使用触发器。

有人可以解释每种技术的优缺点,以通知服务有关表格更改吗?

我想跟踪表上的insertupdatedelete操作,我计划通知服务的方式是使用UTL_HTTP包来调用服务的方法。

提前致谢!


更新:应尽快发送通知。因此,任何定期工作的方式(例如,将通知放入队列并每隔1分钟使用oracle作业处理它们)就不适合。

3 个答案:

答案 0 :(得分:1)

数据库触发器适用于复杂的默认值或复杂的数据验证。不要将它们用于发送消息等应用程序逻辑。当http连接出现任何问题时,您将无法更改数据。 无论如何,您可以创建通知队列(使用例如新表或Oracle Queue)并使用触发器填充它,这可能是安全的。然后编写一个作业,它将查询此队列并发送通知。

当您查看数据库更改通知概念(请参阅http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm#BGBDBAIJ,图13.2)时,您会看到它使用相同的方法。

所以我投票支持数据库更改通知。您不需要使用触发器,只需注册对象并编写通知程序代码。

答案 1 :(得分:1)

听起来你的团队负责人正在考虑DBMS_ALERT,它使用触发器发送表事件信号。这可能适用于您的场景(假设我们不知道您尝试实现的细节)。 Find out more

但是,数据库更改通知也会起作用。您已标记了问题C#。如果您使用ODP,您一定要考虑利用其内置支持。 Find out more

在这种情况下,最佳解决方案将是意见问题。你们比我们更了解你的情况。我建议你和你的团队负责人讨论一下。请记住,如果你想要一个不同的解决方案,那么你就有责任让它发挥作用;如果您的团队主管具有实施基于触发器的解决方案的先前经验,那么这可能是更安全的选择。

答案 2 :(得分:0)

数据库更改通知的一个可能的缺点是从数据库到应用程序层的回调。如果您有防火墙规则,安全区域等,通常会允许从应用程序到db层的流-而不是数据库更改通知所需的另一种方法。因此,您可能正在处理安全异常以允许这种回流。在我看来就像牺牲安全性来提高性能(减少网络数据库查询)