我正在寻找一种在代理作业完成后或作为代理作业的最后一步自动重新启动 SQL 服务的方法。我发现代理服务依赖于服务器服务,这可能吗?
Microsoft SQL Server 标准版(64 位)2008 R2(10.50.1777.0)
一点背景知识:
这只是一个临时解决办法。
我们有一个 SQL 服务器,它为我们的会计软件分析服务器运行导出作业。运行后,SQL 服务器有时会变得无响应。我假设它是导出作业,因为禁用作业后没有无响应。此作业大约需要 30 分钟才能完成,并在午夜左右启动。手动重新启动 SQL 服务器服务可以修复此问题,并且是一种临时解决方法,直到我们能够找出导出作业导致问题的原因。我想在导出作业完成后先重新启动服务,以免 SQL 变得无响应。
答案1
我同意评论者的观点;我无法理解你为什么要这样做。你想实现什么目标?也许我们可以帮你想出更好的解决方案。
也就是说,您无法在 SQL Agent 作业中执行此操作(至少无法完全执行),因为正如您所指出的,SQL Agent 服务依赖于 SQL Server 服务。停止 SQL Server 会停止 SQL Agent。您最多可以向 SQL Server 服务发送重新启动信号,但您无法获取任何内容的返回状态,如果出现问题,您将失去对情况的控制。
您可以编写一个服务或创建一个计划任务来监视相关作业,并在作业完成后重新启动。
但话说回来,这听起来就像是某种创可贴的补救措施。
编辑:
如果您在下班后有可靠的时间,并且知道工作将完成,那么我只需创建一个计划任务,使用 Powershell 脚本或其他东西重新启动服务(restart-service MSSQLSERVER
或者restart-service -displayname "SQL Server (MSSQLSERVER)
假设您正在谈论默认实例)。
然后找出服务突然停止的原因。运行 SQL Profiler 跟踪,检查性能计数器,手动运行作业运行的程序以隔离问题。
答案2
如果 SQL Agent 作业确实要完成了。(这是一个很大的“如果”),那么该作业的最后一步可以使用 xpcmdshell 来触发 psservice(来自 PSTOOLS 套件)并告诉 SQL Server 服务重新启动。
这真是个糟糕的临时解决方案。但这是可以做到的。