【问题标题】:How do I look at SQL Agent Job without starting SQL Agent?如何在不启动 SQL 代理的情况下查看 SQL 代理作业?
【发布时间】:2021-08-19 15:21:57
【问题描述】:

我刚刚在新服务器上设置了一个新的 SQL Server 实例,并移动了我们的应用程序以使用新服务器。所以我不得不关闭旧服务器上的 SQL 代理——打开它会启动调度程序并开始发送电子邮件并运行不应再运行的东西。

但是,我需要仔细查看旧服务器上的 SQL 代理作业,最好对代码进行逆向工程以重新创建它,以便我可以对其进行修改并将其应用于新服务器。

如何在不打开 SQL 代理的情况下在旧服务器上为该作业生成代码? 谢谢

【问题讨论】:

  • 断开网络连接并重新打开代理,然后检查作业和计划以及您需要的任何其他内容。启动代理后,可能会禁用所有作业,因此它不会做任何事情。
  • exec sp_help_jobstep 也许?
  • SMor:感谢您的建议,断开它与网络的连接可能会很棘手 - 我远程工作,禁用所有作业会花费太长时间。但感谢您的建议。我认为使用 DMV 可能会奏效。

标签: sql-server sql-agent-job sql-agent


【解决方案1】:

即使 SQL Server 代理未运行,您也可以通过查看以下系统 DMV 来了解作业和计划是如何设置的。

msdb.dbo.sysjobs_view 
msdb.dbo.sysjobs
msdb.dbo.sysjobschedules
msdb.dbo.sysschedules

我使用预设脚本来创建独立于服务器的所有作业和计划。这是创建回收日志作业的示例脚本。你可以修改它或使用任何你认为合适的部分。

DECLARE @sql nvarchar(max)
BEGIN TRY
    IF EXISTS (SELECT job_id 
                FROM msdb.dbo.sysjobs_view 
                WHERE name = N'Cycle SQL log')
    EXEC msdb.dbo.sp_delete_job @job_name=N'Cycle SQL log'
                                , @delete_unused_schedule=1
    EXEC msdb.dbo.sp_add_job  
        @job_name = N'Cycle SQL log',
        @description = N'This job forces SQL to start a new error log (In the Managment node of SSMS)',
        @owner_login_name = N'your_sql_login' ;     

    EXEC msdb.dbo.sp_add_jobstep  
        @job_name = N'Cycle SQL log',  
        @step_name = N'sp_cycle_errorlog', 
        @subsystem = N'TSQL',  
        @command = N'exec sp_cycle_errorlog'  --put your executable code here
  
    --These next two lines set the target server to local, so that the job can be modified if necessary
    SET @sql = 'EXEC msdb.dbo.sp_add_jobserver @job_name=N''Cycle SQL Log'', @server_name = N''' + @@SERVERNAME + ''''
    EXEC sys.sp_executesql @stmt = @sql
END TRY
BEGIN CATCH
    PRINT 'Uh-oh.  Something bad happened when creating the Cycle SQL Log job.  See the following error.'
    PRINT CAST(ERROR_MESSAGE() AS NVARCHAR(1000))
END CATCH

您可以使用代码根据您从上面列出的 DMV 中提取的值自动添加时间表。

【讨论】:

  • 这很有帮助,但并不能完全满足我的需要。我在旧服务器和新服务器上(手动)创建了相同的工作我试图弄清楚它们之间的区别是什么,因为它在新服务器上不起作用。但这是朝着正确方向迈出的一步。谢谢
  • 您能否比较两个系统上的 DMV 并注意任何差异?如果不是,则可能存在许多系统配置差异。
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2010-11-05
  • 2014-10-02
相关资源
最近更新 更多