标签: sql-server-agent

Agent XPs 自动禁用

在其中一台 SQL Server 2012 服务器中,代理 Xps 会自动禁用。没有固定的模式,问题突然开始。通过探查器发现名为的应用程序SQL AGent- Enable\disable Agent Xps正在禁用 XP。后者是通过 SQL Agent-Initial BootProbe 启用的。

sql-server sql-server-2012 sql-server-agent

5
推荐指数
1
解决办法
1万
查看次数

SQL 代理作业日志 - 无法获取错误日志

我想将一些日志提取到报告中,以便获取夜间运行的 SQL_Agent_Jobs 状态。如果作业失败,那么我想在表中接收错误日志。我试图通过以下查询获取该信息:

DECLARE @job_id UNIQUEIDENTIFIER

SELECT 
    @job_id = job_id FROM msdb.dbo.sysjobs 
WHERE 
       [name] like '%JOB_1%'
    OR [name] like '%JOB_2%'
    OR [name] like '%JOB_3%'
    OR [name] like '%JOB_4%'
    OR [name] like '%JOB_5%'

;WITH Error_Output (job_id, error_log) AS
(
    SELECT 
        JS.job_id,
        CASE
        WHEN JSL.[log] IS NULL THEN JH.[Message]
        ELSE JSL.[log]
        END AS LogOutput
    FROM 
        msdb.dbo.sysjobsteps JS 
        INNER JOIN msdb.dbo.sysjobhistory JH 
            ON JS.job_id = JH.job_id AND JS.step_id = JH.step_id 
        LEFT OUTER JOIN msdb.dbo.sysjobstepslogs JSL
            ON JS.step_uid = JSL.step_uid
    WHERE 
        INSTANCE_ID >
        (SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent log

5
推荐指数
1
解决办法
5210
查看次数

在标记化作业步骤中处理“找不到变量”

我有一个代理作业,通常由 WMI 事件触发。该作业中有一个令牌,它会自动从 WMI 事件中获取一个值并将其替换为该步骤的 Powershell 代码,例如:

$alert_wmi_state = '$(ESCAPE_SQUOTE(WMI(State)))';
Run Code Online (Sandbox Code Playgroud)

SQL 代理配置为选中所有作业响应警报设置的替换令牌,因此,当 WMI 事件触发时,替换会正常发生,并且运行的代码为:

$alert_wmi_state = '7';
Run Code Online (Sandbox Code Playgroud)

但是,该作业有可能手动运行(即右键单击,在步骤中启动作业...),并且我希望我的步骤代码能够优雅地处理此问题,因此我在步骤中进一步采用了以下逻辑:

if ($alert_wmi_state -eq ('$' + '(ESCAPE_SQUOTE(WMI(State)))')) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

...理论是,$从 中分离(ESCAPE_SQUOTE...将合理地意味着这不被识别为令牌,因此不会被替换,因此测试将按字面意思读取:

if ($alert_wmi_state -eq '$(ESCAPE_SQUOTE(WMI(State)))') {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,手动运行作业时,在运行我的任何代码之前,SQL 代理总是会在该步骤中出错(无论它是配置为CmdExec作业步骤类型还是PowerShell作业步骤类型),并显示错误Variable WMI(State) not found

我的猜测是,这是因为替换ESCAPE_SQUOTE发生步骤代码实际解析/加载之前,因此代理永远不会运行该步骤。

我希望我可以有两个步骤,一个带有令牌,一个没有,并且让标记化步骤的失败操作启动非标记化步骤,但是步骤代码的重复是不可取的。

所以,我的问题是,有什么方法可以优雅地处理步骤代码中不存在步骤令牌的情况吗?

sql-server powershell sql-server-agent

5
推荐指数
1
解决办法
890
查看次数

用户“NT AUTHORITY\ANONYMOUS LOGON”登录 SSIS 失败

我有一个 SSIS 包,它在 MySQL 数据库和 SQL Server 数据库之间执行数据迁移。当我从 Visual Studio 或 SQL Server Management Studio 手动运行它时,它运行成功。但是当我使用 SQL Server 代理作业安排它时,会发生错误。

描述:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。来源:.Net SqlClient 数据提供程序

这是什么错误?为什么只有在预定时才会发生这种情况?如何克服这个问题呢?

sql-server etl ssis sql-server-agent

5
推荐指数
1
解决办法
2万
查看次数

Sql Server 代理无法启动

我无法启动 Sql Server 代理来创建作业。谁能帮我?. 我使用的是 Windows 7 Ultimate ,Sql server 2008 Rc2

看这个图片:

在此处输入图片说明

在此处输入图片说明

sql-server sql-server-2008-r2 sql-server-agent

4
推荐指数
2
解决办法
2万
查看次数

我的服务器中所有数据库上的预定存储过程

在 SQL Server 2012(非速成版)上,我想每小时安排一次存储过程的执行。

在同一台服务器上,我有很多结构相同的数据库,并且我不断添加新的数据库。

如何安排在所有数据库上执行相同的存储过程(如果数据库中存在)?

sql-server stored-procedures sql-server-agent jobs

4
推荐指数
1
解决办法
142
查看次数

如何有条件地指定 SQL Server 维护计划中的任务?

我有一个每周和每晚的 SQL Server 代理作业,分别执行每周和每晚的维护计划。

这些每周(周日)和每晚(一周的其他 6 个晚上)维护计划仅在第一个任务中与总共连续六个步骤不同。也就是说,在夜间/每日维护计划中,第一步是“重新组织所有用户数据库上的索引”,而在每周/周日维护计划中,第一步是“重建所有用户数据库上的索引”。

是否有可能以及如何仅运行一个(而不是两个)维护计划,一周的所有 7 个晚上,条件是在 6 天内第一步是一个(重组索引),而在一周的其余 1 天,第一步是另一个(重建索引)?

日常维护计划

Windows Server 2008 R2 上的 SQL Server 2012 R2

sql-server ssis sql-server-2012 sql-server-agent maintenance-plans

4
推荐指数
1
解决办法
3628
查看次数

维护计划的 Windows 身份验证对哪个用户进行身份验证?在谁面前,为什么,为了什么?

我有一个配置了 Windows 身份验证的维护计划

维护计划中的 Windows 身份验证

由具有所有者的 SQL Server 代理作业运行 sa

在此处输入图片说明

维护计划的 Windows 身份验证向谁进行身份验证,为谁和为了什么 - 为什么需要它和/或如何使用它?我应该向哪个用户授予访问备份(在维护计划中规定)目录位置的权限?

考虑到所有者sa具有 SQL Server 身份验证,SQL Server 代理作业的所有者如何参与所有这些工作?

sql-server permissions sql-server-agent maintenance-plans

4
推荐指数
1
解决办法
7536
查看次数

执行一定小时数后停止代理作业

我有一个每晚运行的预定工作。无论是否完成,我都希望它在早上 07:00 自行停止。
我在网站上看到了一些重复内容,但它们并没有完全解决问题。谢谢。

sql-server-2008 sql-server sql-server-2008-r2 sql-server-agent

4
推荐指数
1
解决办法
5359
查看次数

脚本无法作为 SQL Server 代理作业运行,从 SSMS 运行时成功完成

我有两个 T-SQL 脚本,它们计划每天运行一次。两者都清理不同表中的一些旧数据。两个脚本都以同一用户身份在同一数据库上运行。

脚本 A 将在 SQL Server Management Studio 和作为作业启动时成功执行,但脚本 B 将仅在 SQL Server Management Studio 中成功执行,即使以设置为在 SQL Server 下运行脚本的同一用户登录代理人。

脚本 B 失败并出现以下错误:

以用户 [username] 身份执行。
DELETE 失败,因为以下 SET 选项的设置不正确:“QUOTED_IDENTIFIER”。

验证 SET 选项是否正确用于计算列上的索引视图和/或索引和/或过滤索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。

[SQLSTATE 42000](错误 1934)。步骤失败。

我在尝试清理的表之一上确实有一个过滤索引,但为什么它会通过 SSMS 工作?

sql-server ssms sql-server-agent sql-server-2014

4
推荐指数
1
解决办法
1344
查看次数