我有两个不同应用程序使用的数据库。 Application1将执行数据库中的所有操作。我们无法控制此应用程序
当从表中添加,修改或删除记录时,需要提醒Application2。 但我们不能在sql中编写一些触发器。
示例:有一个计费软件,它将账单添加到账单表中,客户表中的相应记录将使用从账单中获得的新点进行更新。 现在我们有了一个不同的分析软件,它从customers表中检索数据并动态地向它们发放一些凭证。我不能经常循环或查询数据库,除非它是唯一剩下的选项。
我还想知道数据库引擎中是否有功能。
请提出任何建议..
答案 0 :(得分:5)
您可以查看following article。
答案 1 :(得分:3)
App1在数据库操作之前/之后向App2发送消息。
答案 2 :(得分:0)
您能否给我们一些背景信息,例如应用程序是什么,更改是什么等?它只是被禁止的触发器吗? (这是为什么?)。
您可能会在循环中轮询数据库,检查SELECT MAX(id) FROM table
以查看ID是否大于上次(即有新内容)。没有触发器,您无法看到修改或删除,除非您编写了App1并且可以同时写入审计表,记录所有操作。
答案 3 :(得分:0)
“但我们不能在sql中编写一些触发器。”
这是唯一可行的方法,如果您希望系统可靠,并且您希望系统始终向其用户提供正确的信息(如果有可能的话,请进一步查看) )。
有人回答“App1向App2发送一条消息”,该评论的评论是“不符合ACID”。这句话是正确的(给出了对'ACID'一词的一些合理解释)。关键是,你的app2只想接收插入通知,在绝对确定插件确实发生的位置。只有当 DBMS 成功提交这样的插入时,才能确定这一点。
因此,您需要的触发器是一种在成功提交后运行的触发器(存在这些触发器吗?)。
然后问题变成了,如果提交触发器因任何原因失败,应该怎么做?您的数据已提交,您的app1认为一切正常,但您的app2仍未收到应该收到的通知。
这个问题的解决方案是你的app1,你的DBMS和你的app2都准备参与两阶段提交。我毫不怀疑,既然你“无法对app1做任何事情”,那么你也不可能让它参与2PC。
“数据库监听器”模式简单明了,设计有缺陷。至少如果你珍惜“绝对一致性”。
答案 4 :(得分:0)
您可以通过以下链接中提供的建议跟踪这些更改:
https://msdn.microsoft.com/en-us/library/bb933994.aspx
https://msdn.microsoft.com/en-us/library/cc305322(v=sql.110).aspx
或尝试使用以下内容在Google中进行切换: 谁来跟踪更改数据库mssql