sql-server – SQL Server:如何在不阻止触发触发器的事务的情况下获得触发器的响应能力?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了sql-server – SQL Server:如何在不阻止触发触发器的事务的情况下获得触发器的响应能力?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2148字,纯文字阅读大概需要4分钟。
内容图文
在a thread today我想要在插入记录时立即执行代码而不是求助于轮询.
触发器是强大的工具,但却是放置实际代码的危险场所,因为如果代码很慢或阻塞,事务将会阻塞,并且它可能成为一个真正的问题.
就我的目的而言,民意调查是不可行的.当记录显示??时,我真的需要我的代码立即执行. Windows应用程序正在将数据插入表中.我没有应用程序的来源,也无法更改它.我有完全访问SQL Server的权限.
但是,将严格的代码置于触发器中确实是一种不好的做法.
所以问题就出现了:触发器的替代方法是什么,与触发器一样响应? (或几乎同样响应…… 1-5秒的延迟就可以了,但是30秒的轮询周期真的很不愉快.运行的代码需要0-3秒才能完成.)
约束:
>我只能访问数据库,而不是应用程序
> SQL Server 2005和2008
>可行.我们不打算发明一些疯狂的东西,添加大量的基础设施或大型新系统.我们有一个应用程序.它与SQL Server对话.添加更多图层概率是不可能的.
>实现另一个服务器应用程序(如msg队列服务器等)对于此项目是不可行的.这件事每天只会发射一到十五次.
手头的工具(不全面):
– .NET
– Python
– C#
如果可能的话,想避免使用xp_cmdshell.
解决方法:
您可能可以使用服务代理,但这可能是过度的,正如您所述.
或者,如果您不想为此需求安装/管理额外服务,则可以使用xp_cmdshell或基于CLR的触发器在需要时进行外部调用,以异步方式启动所需进程的程序(因此,在调用触发器的事务之外并立即返回.我会更加警惕这一点,而不是简单地在触发器中放入一些复杂的代码 – 至少,触发任何好的SQL Server DBA人员都可以在你不在的时候支持代码而不需要其他特定的编程经验.
当你说轮询根本不是一个选项,因为“长达30秒”的延迟是不可接受的,是否有理由不能更频繁地进行轮询?如果关注的是轮询将在服务器上传递的负载,那么有很多方法可以使轮询保持非常轻量级.无论你需要什么触发器(或其他东西)来决定是否在插入行时需要动作 – 如果你在一个触发器中做出这个决定并简单地在一个简单的状态表中记下它然后你可以轮询每一个等待更新状态标记的二分之一(数据库每秒命中一次以执行简单查找,例如每隔几秒(或甚至每秒一次,或更频繁地)执行一次,不会产生重大负载,除非您正在使用一些通过查询向您收费的云数据库服务).同样,这远非理想,但对我来说似乎比xp_cmdshell选项更安全.
无论你做什么,都要小心确保过程中的失败得到恰当的标记.当您从主事务中提取额外的处理时,您不能依赖现有的异常处理来告诉您由于某种原因它失败了 – 因此,您可能不知道您的数据一致性问题日益严重.触发器的关键优势在于,通过保持相同的事务,您知道您的数据保持一致,因为如果另一半失败,则不会提交一半.
内容总结
以上是互联网集市为您收集整理的sql-server – SQL Server:如何在不阻止触发触发器的事务的情况下获得触发器的响应能力?全部内容,希望文章能够帮你解决sql-server – SQL Server:如何在不阻止触发触发器的事务的情况下获得触发器的响应能力?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。