rzu*_*ech 15 sql-server sql-server-2008-r2
我们有一个 3rd 方供应商试图集成 2 个不同的应用程序,其中两个数据库都驻留在我们的 SQL Server 实例上与 150 多个其他数据库,并且他们想要创建一个 MSDB 作业以每 5 分钟“同步”2 个不同的应用程序(起初他们想每分钟运行一次)。
我最初的预感是,他们应该在应用程序层中以某种方式使用 Windows 计划作业,或者甚至是一个可怕的触发器(我们通常在这种情况下使用)来执行此操作。
我更喜欢为 DBA 任务保留尽可能多的 MSDB 作业以减少那里的混乱,并且在查看具有这样的超级活跃作业的作业历史记录时也会遇到 MSDB 的缓慢查询(这也会淹没和丢弃重要的作业历史记录)更重要的事情,如备份历史)。但话又说回来,也许我的偏好是错误的,我需要为 MSDB 中的应用程序层腾出一些空间,卷起袖子,解决工作历史需要永远加载的问题,当我需要保留更多历史条目来捕获重要的东西,如备份(或清除超活跃作业条目)。
我遇到的另一个问题是,现在我需要在供应商通过 GUI 执行升级时为其数据库授予“系统管理员”权限,而不仅仅是“dbo”权限,并希望他们不会炸毁我的关键任务实例DB 是(整合的缺点之一)。
我想我可以把它们放在另一个“分离”的情况下,我们把所有的不玩好供应商,但这时我们就需要重新配置应用程序以指向新的SQL实例(叹可惜在这种情况下,不平凡的)。
供应商已经反驳了我关于触发器有多糟糕的担忧。因此,我对此进行了“谷歌搜索”,但结果是空的。有没有人在那里看到任何“权威性的”链接,认为这是一个坏主意,我可以向他们推荐吗?还是我应该接受他们的方法?
我不相信我在寻求帮助之前曾在 sql 论坛上发过帖子,所以希望我的查询得到了正确的框架。
编辑:我们正在运行 SQL Server 2008 Enterprise R2 x64 SP1(感谢您指出我忘记提及版本!)。嗯,希望他们在我们升级到更新版本时不需要更改他们的 MSDB 升级脚本。
谢谢你的时间!富有的
Rem*_*anu 13
IMO 您的供应商实际上走在正确的轨道上。
应用层作业需要他重做许多开箱即用的 SQL 代理功能(例如,不运行已在运行的作业的逻辑,提出安全和凭据存储解决方案,将作业结果与SQL 等中的错误报告和结果跟踪等)。而且,最重要的是,为调度提供备份/HA/DC 解决方案。您不希望您的灾难恢复故事是“在您完成备用服务器的恢复后,创建这 50 个 NT 调度程序任务”。所以他反对使用系统调度程序是正确的,它没有代理具有的特性和功能。
他在反击触发器方面更是如此。用同步触发器替换周期性作业会增加请求延迟,增加内聚性和耦合性(想想模式更改...),由于同步问题(触发器错误-> 应用程序错误与作业错误-> 修复并稍后重试)增加了停机风险,大大增加了死锁问题(由于被跟踪/被跟踪者之间的交叉更新)并且有更多的问题。
最简单的解决方案确实是代理工作,msdb
绝不是为 DBA 保留的。一个更奇特的解决方案是使用对话计时器和内部激活,这比代理作业有一些优势,主要是由于包含(一切都在应用程序数据库内,想想镜像故障转移场景),但我完全可以理解你的供应商是否是不愿意尝试需要非常具体的专业知识的东西。顺便说一句,我确实希望您的意思不是每个 DB每 5 分钟一份工作。
至于系统管理员权限:游戏的名称是代码签名。您可以通过使用您的私人证书签署特定程序来授予由您检查和验证的特定程序的任何权限。