我正在寻找处理 SQL Server 2012 可用性组中计划的 SQL Server 代理作业的最佳实践。也许我错过了一些东西,但是在目前的状态下,我觉得 SQL Server 代理并没有真正与 SQL2012 的这个强大功能集成在一起。
如何让计划的 SQL 代理作业知道节点切换?例如,我有一个在主节点上运行的作业,它每小时加载数据。现在,如果主要服务器出现故障,我如何激活现在成为主要服务器的辅助服务器上的作业?
如果我总是在辅助上安排作业,它会失败,因为辅助是只读的。
sql-server sql-server-2012 sql-server-agent availability-groups
我正在尝试NT Service\SQLSERVERAGENT
根据此问题中的标记答案授予Windows 帐户文件系统访问权限。我相信这是一个虚拟服务帐户,它不会显示在控制面板 -> 用户帐户区域中。
如何授予此服务帐户访问文件系统的权限?具体来说,在 Windows 7 上。
我已经阅读了几种方法,但似乎没有一种方法适合我。我尝试了 PowerShell 方法,但 AD 命令不是有效命令。我什至下载并安装了这些命令所需的 Windows 补丁。我还了解到我应该能够通过 SQL Server 配置管理器或 Management Studio 执行此操作。不过,我似乎无法弄清楚在哪里调整这些权限。
SQL Server 代理进程无法启动,并显示以下错误消息:
Run Code Online (Sandbox Code Playgroud)Login failed for user 'NT SERVICE\SQLSERVERAGENT'. Reason: Failed to open the explicitly specified database 'msdb'. [CLIENT: <local machine>]
根据我的谷歌搜索,它与此帐户的权限有关。
我不确定数据库是否已损坏,但它说数据库处于正常状态。SQL Server 代理登录是sysadmin
和public
组的一部分。
我正在遵循指南 - http://www.sqlchicken.com/2009/07/how-to-create-a-server-side-trace-with-sql-profiler/直到我到达第 8 步
- 现在安排您新创建的脚本。在 SSMS 中连接到要跟踪的服务器。转到您的 SQL Server 代理并展开它,以便您可以看到 Jobs 文件夹。右键单击“作业”文件夹并选择“新建作业”。
我找不到SQL Server Agent
。我在哪里可以使这个SQL Server Agent
可见?我已经给了当前用户所有的访问权限。
什么是显示失败的sql作业的查询,以便我可以通过一个查询获得所有失败的作业信息
如何编写脚本以查看 SQL Server 中正在运行的作业和作业开始时间?
SELECT sj.name,
sja.run_requested_date,
CONVERT(VARCHAR(12), sja.stop_execution_date-sja.start_execution_date, 114) Duration
FROM msdb.dbo.sysjobactivity sja
INNER JOIN msdb.dbo.sysjobs sj
ON sja.job_id = sj.job_id
WHERE sja.run_requested_date IS NOT NULL
ORDER BY sja.run_requested_date desc;
Run Code Online (Sandbox Code Playgroud) 我们有一个 SQL Server 代理作业,它运行维护计划以重新索引服务器上的所有数据库。最近这失败了,但工作历史记录没有提供足够的信息来诊断问题。
在作业历史记录中,它指出作业失败。该作业由用户 foo\bar 调用。运行的最后一步是第 1 步(重建索引)。
在详细信息窗口中有以下形式的多条消息:
Executing query "ALTER INDEX [something] ON [a...".: 0% complete End Progress Progress: 2015-03-15 22:51:23.67 Source: Rebuild Index Task
Run Code Online (Sandbox Code Playgroud)
正在运行的 SQL 语句被截断,我假设语句的输出也被截断,从而使我无法确定哪个特定语句失败以及为什么失败。有没有办法提取这些消息的全文?
我一直在研究 T-SQL 中的代码,以使用 msdb 数据库中的 sp_add_jobschedule proc 向 SQL 代理作业添加新计划。当我添加新计划(通常在特定日期/时间运行一次)并立即查看 sysjobschedules 和 sysschedules 中的值时,我可以看到新计划已添加并与我的 SQL 代理的 job_id 相关联工作。但是,next_run_date 和 next_run_time 的值在其中为 0。当我在 2 或 3 分钟后再次查看它们时,它们仍然显示为 0。但是,当我再过 5 或 10 分钟后再回来时,它现在可以正确显示与下一次计划运行相对应的日期和时间值。
所以我的问题是:
我用来添加新计划的代码示例:
exec msdb.dbo.sp_add_jobschedule @job_id = @jobID
, @name = @JobName
, @enabled = 1
, @freq_type = 1
, @freq_interval = 0
, @freq_subday_type = 0
, @freq_subday_interval = 0
, @freq_relative_interval = 0
, @freq_recurrence_factor = 0
, @active_start_date = …
Run Code Online (Sandbox Code Playgroud) 我有两个 SSIS 包,它们作为更大的 SSIS 部署的一部分在夜间(通过 SQL Server 代理)运行,没有任何问题。一切都使用 Windows 身份验证,计划作业由系统管理员(好吧,我)拥有并作为SQL Server 代理服务帐户运行。
因此,数据基本上在source system ~> transit db ~> staging ~> NDS
一夜之间消失了。
我关心的两个 SSIS 包分别处理一组特定数据的transit db ~> staging
和staging ~> NDS
部分。
域用户(非系统管理员)在 中执行某些操作source system
并将有趣的数据推送到 中transit db
,因此我需要一种方法来在工作时间内获取此更新的数据以更新NDS
:决定此人触发的最简单方法该 ETL 是通过单击启用宏的 Excel 工作簿中的按钮来实现的,该工作簿通过 ODBC(使用 Windows 身份验证)连接到 SQL Server 并执行存储过程。
存储过程如下所示:
create procedure dbo.UpdateMaterialInventory
as
begin
execute msdb.dbo.UpdateMaterialInventory;
end
Run Code Online (Sandbox Code Playgroud)
[msdb] 中的“姐妹”存储过程如下所示:
create procedure dbo.UpdateMaterialInventory
with execute as 'SqlAgentProxy'
as
begin
execute msdb.dbo.sp_start_job …
Run Code Online (Sandbox Code Playgroud) sql-server permissions ssis sql-server-agent sql-server-2014
我发现用于管理代理作业的内置 MS SQL Studio 工具有点令人沮丧。您发现哪些工具有用?
顺便说一句,我想在这样的工具中看到三件事:
编写一个小应用程序来处理这个问题可能很简单,但肯定有人已经这样做了,而且做得更好。
这显然是一个主观问题,所以如果某种 mod 徘徊过去,请随意将其设为 CW。
由于我是一名 DBA(并且在许多情况下,事实上的系统管理员),SQL Server 安装在我必须定期使用的几乎每台服务器上。我最近意识到我在几乎所有情况下都使用 SQL 代理作为作业调度程序,而不是本机 Windows 任务调度程序。
从我的角度来看,SQL Agent 比原生的 Windows 任务计划程序有很多优势:
但是,我无法逃避这是一种不好的做法 - SQL 代理应该只保留用于与数据库相关的任务,并且我应该让操作系统级别的任务在 Windows 任务计划程序中运行,尽管我不喜欢它的可用性。
这样依赖SQL Agent可以吗?如果没有,我是否应该考虑使用第三方 Windows 任务调度程序来获得我正在寻找的某些功能?