我正在使用Oracle数据库和WCF / WebAPI服务开发应用程序。该服务应该知道如何更改数据库中的某个表。我在网上浏览并在Oracle RDBMS中找到了一个名为“数据库更改通知”的技术,我认为这是我在这种情况下所需要的。但是我的团队领导让我为此目的使用触发器。
有人可以解释每种技术的优缺点,以通知服务有关表格更改吗?
我想跟踪表上的insert
,update
,delete
操作,我计划通知服务的方式是使用UTL_HTTP
包来调用服务的方法。
提前致谢!
更新:应尽快发送通知。因此,任何定期工作的方式(例如,将通知放入队列并每隔1分钟使用oracle作业处理它们)就不适合。
答案 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层的流-而不是数据库更改通知所需的另一种方法。因此,您可能正在处理安全异常以允许这种回流。在我看来就像牺牲安全性来提高性能(减少网络数据库查询)