Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库更改通知是否优于触发器?_C#_.net_Oracle_Wcf_Asp.net Web Api - Fatal编程技术网

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

C# 数据库更改通知是否优于触发器?,c#,.net,oracle,wcf,asp.net-web-api,C#,.net,Oracle,Wcf,Asp.net Web Api,我正在使用Oracle数据库和WCF/WebAPI服务开发一个应用程序。服务应该知道如何更改数据库中的某些表。我在网上冲浪,在Oracle RDBMS中发现了一种名为“数据库更改通知”的技术,我认为这正是我在这种情况下所需要的。但我的团队领导要求我为此使用触发器 有人能解释一下每种通知服务表更改的技术的优缺点吗 我想跟踪表上的insert,update,delete操作,我计划通知服务的方式是使用UTL\uhttp包调用服务的方法 提前谢谢 更新:应尽快发送通知。因此,任何定期工作的方法(例如

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

有人能解释一下每种通知服务表更改的技术的优缺点吗

我想跟踪表上的
insert
update
delete
操作,我计划通知服务的方式是使用
UTL\uhttp
包调用服务的方法

提前谢谢



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

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

当您查看数据库更改通知概念(见图13.2)时,您会发现它使用了相同的方法


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

听起来您的团队负责人正在考虑DBMS\u ALERT,它使用触发器发送表事件信号。这可能在您的场景中起作用(因为我们不知道您试图实现的目标的细节)

不过,数据库更改通知也会起作用。您已将问题标记为
C.
。如果你正在使用ODP,你绝对应该考虑利用它的内置支持…
在这种情况下,最好的解决方案将取决于意见。你们比我们更了解你们的情况。我建议你和你的团队领导商量一下。只要记住,如果你推动一个不同的解决方案,你就有责任让它发挥作用;如果您的团队负责人以前有实施基于触发器的解决方案的经验,那么这可能是更安全的选择。

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

感谢您的回复!我忘了提到服务应该尽快从数据库接收通知。因此,我认为您使用通知队列处理作业的方法(正如我预期的那样)不适合这种需要?如果您的应用程序位于数据库服务器的同一个本地网络中,那么这应该不会是一个问题。但当您的应用程序部署在外部服务器(例如云)上时,这确实是一个需要考虑的问题