默认安装 SQL Server 2008 R2 后,SQL Server 代理进程似乎设置为手动启动。这是什么原因?出于某种原因,设置为自动是一个坏主意还是毫无意义?
我很好奇如何设置要作为不同 SQL 登录帐户执行的 SQL 作业步骤。看来我需要设置一个需要现有凭据的新代理帐户。创建凭据时,我唯一的选择是使用 Windows 登录凭据。
我正在尝试运行的工作如下。还有其他附加语句,但是当我将作业步骤设置为在 SQL 登录时运行时,它会失败。
insert into [dbo].[TableA]
SELECT
ss.[Ref_ID]
,mm.[studentID]
,mm.[studentPersonID]
,mm.[studentFirstname]
FROM [dbo].[TableB] mm
left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
where ss.Ref_ID is not null;
Run Code Online (Sandbox Code Playgroud)
当它通过 SQL 作业步骤运行时,它会失败。
Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274). The step failed.
Run Code Online (Sandbox Code Playgroud)
当所有这些表都存在于本地数据库中时,我不清楚为什么它会尝试访问远程服务器。
是否可以在 SQL Server 2008 中设置警报,以便在特定类别中的作业失败时发送电子邮件?
我想知道,因为我想在 SSRS 订阅失败时设置电子邮件 - 所有这些订阅都是Report Server类别中的作业。
编辑- 事实证明,当 SSRS 订阅失败时,作业本身不会失败,因此我的问题不适用于 SSRS 订阅监视使用。但是我仍然想知道我们在我们的环境中运行的其他作业
我有几个应该按顺序运行的 SQL Server 代理作业。为了对应该执行的作业有一个很好的概述,我创建了一个主作业,它通过调用EXEC msdb.dbo.sp_start_job N'TEST1'. 在sp_start_job瞬间完成(作业步骤1),但我想我的主要工作要等到工作TEST1已经调用下一个工作之前完成。
所以我写了这个小脚本,它在作业被调用后立即开始执行(作业步骤 2),并强制主作业等待子作业完成:
WHILE 1 = 1
BEGIN
WAITFOR DELAY '00:05:00.000';
SELECT *
INTO #jobs
FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;',
'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'',
@execution_status = 0, @job_aspect = N''JOB''');
IF NOT (EXISTS (SELECT top 1 * FROM #jobs))
BEGIN
BREAK
END;
DROP TABLE #jobs;
END;
Run Code Online (Sandbox Code Playgroud)
这工作得很好。但我觉得更聪明和/或更安全(WHILE 1 = 1?)的解决方案应该是可能的。
我对以下事情很好奇,希望你能给我一些见解:
(我首先在StackOverflow 上发布了这个问题,因为我专注于改进代码。仍然有效。但我的猜测是,这里的人们通常会更聪明地说出为什么我不应该像我那样尝试这样做”我现在就做,或者提供好的替代方案。)
编辑(7 月 25 日)
显然我的脚本没有太多错误,根据指出它问题的答案数量很少:-) 这种脚本的替代方法似乎是使用专为这些设计的工具任务(如 SQL Sentry 事件管理器或...) - …
我已经安装了带有高级服务的 SQL Server 2014 Express 版。我希望尝试使用全文搜索功能。我在这里读到2014 速成版支持全文搜索。但是,在安装并尝试创建全文索引后,我收到一条错误消息,指出此版本的 sql server 不支持全文索引。
是否实际支持全文索引?有没有可能我安装了错误的版本(不是高级服务)?为了确定,我已经卸载并重新安装了两次,但两次都是相同的问题。我很确定我正在使用高级服务安装程序进行安装。
我使用的是 64 位 Windows 7。
安装 CU2 后,我们的 SQL 服务器代理随机停止工作。如果您通过打开作业活动监视器来检查代理的状态,它会出现一段时间的空白,然后抛出错误:
无法检索此请求的数据。(Microsoft.SqlServer.Management.Sdk.Sfc)
如需帮助,请单击:https : //go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&LinkId=20476
- - - - - - - - - - - - - - - 附加信息:
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
当前命令发生严重错误。结果,如果有的话,应该被丢弃。(Microsoft SQL Server,错误:0)
如需帮助,请单击:http : //go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=15.00.4013&EvtSrc=MSSQLServer&EvtID=0&LinkId=20476
任何线索可能导致这种情况?
我想知道 SQL Server 代理作业的所有者的可能用途是什么?
删除,并将其留空,作业仍然成功

sql-server maintenance permissions sql-server-agent maintenance-plans
我需要允许用户在没有任何能力启动其他代理的情况下启动特定的代理作业。为此,我创建了以下过程(简化):
ALTER PROCEDURE [dbo].[RunJob]
@job_name nvarchar(200)
WITH EXECUTE AS 'sysadminaccount'
AS
BEGIN
--SET NOCOUNT ON;
BEGIN TRY
EXEC msdb.dbo.sp_start_job @job_name = @job_name
-- Wait for job to finish
DECLARE @job_history_id AS INT = NULL
DECLARE @job_result AS INT = NULL
WHILE 1=1
BEGIN
SELECT TOP 1 @job_history_id = activity.job_history_id
FROM msdb.dbo.sysjobs jobs
INNER JOIN msdb.dbo.sysjobactivity activity ON activity.job_id = jobs.job_id
WHERE jobs.name = @job_name
ORDER BY activity.start_execution_date DESC
IF @job_history_id IS NULL
BEGIN
WAITFOR DELAY '00:00:01'
CONTINUE
END
ELSE
BREAK …Run Code Online (Sandbox Code Playgroud) 我发现,如果我将 SQL Server 代理作业编写为脚本开头的“创建到”脚本use msdb- 所以我假设作业存储在 msdb 数据库中?
将 SQL Server 作业添加到 Visual Studio 数据库项目的最佳方法是什么?我将 msdb 数据库添加到数据库解决方案中,但这似乎没有对作业的任何引用。
我希望将作业与数据库一起部署/更新......这似乎不可能?
我觉得这是一个愚蠢的问题,但对于我的生活,我无法追踪发生了什么。我刚刚接管了几台服务器的管理工作,并且在所有这些服务器上,工作历史记录仅保留了 5 天。有一个清理维护计划,但它设置为保留 5 周。
EXEC msdb.dbo.sp_syspolicy_purge_history 每天都在运行,但是,历史保留天数设置为 0,所以我的理解是它无论如何都没有做任何事情。
必须有一些非常简单的东西我在这里遗漏了。任何人都可以指出我正确的方向吗?
sql-server-agent ×10
sql-server ×9
maintenance ×1
monitoring ×1
permissions ×1
security ×1
ssrs ×1
t-sql ×1