我已将我场的作业集中在 MSX 中,涵盖大约 70 个 SQL Server 实例。看似随机,至少每周一次,有几个实例将停止接受指令。内MSX窗口管理目标服务器,而不是显示所有实例的标准,它们显示为正常,阻止。我无法弄清楚为什么会发生这种情况。叛逃和重新入伍通常可以治愈这种病,但这意味着必须在任何适当的工作中重新添加该目标,因此我宁愿解决原因而不是忍受变通方法。
有什么建议吗?我想继续使用 SQL Server 的工具进行多服务器管理,但我对其他途径持开放态度。
因此,当我运行该作业时,它失败并显示不允许 NT AUTHORITY\SYSTEM 为 CmdExec 代理 1(我只有一个凭据)的消息。
“无法开始执行 step1(原因:JobOwner NT AUTHORITY\SYStem 没有使用代理 1 的权限”
我已经做了一些谷歌搜索所需的权限,我读到我需要让操作员访问 MSDB 中的 NT AUTHORITY\SYSTEM 登录名。我试过这个,但仍然没有运气。
我在 SQL Server 中遇到过许多不同的作业计划名称,从使用它的作业名称到计划本身的简短回顾。我想给新的作业时间表一个清晰、描述性和一致的名称,这样它就可以很容易地重复使用,并且很容易看出它是什么类型的时间表。
遇到的作业计划名称示例:
Run every night
Every 4 weeks on Monday
Schedule job X
21.00hr
DAILY (which then runs only 6 days a week)
Run Code Online (Sandbox Code Playgroud)
我发现很难想出一个好方法来命名它们。那么:给工作计划起什么聪明、一致的名字?你怎么称呼它们?为什么?
我有一个奇怪的权限问题。最近发生的事情导致配置为以特定用户身份运行的现有 SQL Server 代理作业停止工作。他们以前工作过;他们现在抛出基本权限错误(例如,SELECT 权限被拒绝)。
这是一个特定的测试用例。用户johndoe具有服务器级sysadmin角色。johndoe在 SQL Server Management Studio 中运行时,以下查询工作正常:
select * from TableA into TableB
Run Code Online (Sandbox Code Playgroud)
但是,当我将完全相同的查询放入单步 SQL Server 代理作业中,并将该步骤配置为以用户身份运行时johndoe,我收到以下错误。
以用户身份执行:johndoe。对象“TableA”、数据库“MyDatabase”、架构“dbo”的 SELECT 权限被拒绝。[SQLSTATE 42000](错误 229)。步骤失败。
关于什么可能导致这种看似自发的变化的任何建议?
我想重命名 SQL Server Agent 操作员,即更改它的名称。
这是一件“有效”的事情吗?我注意到尝试通过操作员/属性对话框更改 SSMS 中的名称实际上并没有做任何事情。但是,在对象资源管理器中单击选定的运算符也允许您重命名它并产生所需的结果。
我的另一个担忧是设置为使用旧操作员姓名发送通知的现有作业。我不希望他们无法发送通知,但另一方面又希望避免手动更改所有通知。我查了一下,发现msdb中的dbo.sysjobs表使用的是operator ID,所以看起来应该不是问题。我还在测试作业中尝试了它,在重命名操作员后,一切仍然按预期工作,而且作业属性显示新的操作员名称,而我无需执行任何操作。所以看起来它根本不应该引起任何问题,但我想对此进行一些确认。
在 2014 年使用我的 AD 帐户通过凭据从 SQL Server 代理运行 powershell 脚本。我收到以下错误。
作业步骤在 PowerShell 脚本的第 1 行收到错误。相应的行是“set-executionpolicy RemoteSigned -scope process -Force”。更正脚本并重新安排作业。PowerShell 返回的错误信息是:'Security error.
我在谷歌上搜索,没有发现任何有用的东西。我可以在我的工作站上通过 SSMS 从 Powershell 控制台运行脚本,没有任何问题。
执行策略设置为不受限制
PS C:\WINDOWS\system32> Get-ExecutionPolicy
Unrestricted
Run Code Online (Sandbox Code Playgroud)
错误输出中提到的行必须由 SQL Server 自动添加,因为RemoteSigned -scope process -Force它不在代码中的任何位置。
除了使用 AD 帐户运行作业之外,我还需要在 SQL Server 代理中设置什么吗?
这是来自的powershell行 msdb.dbo.syssubsystems
C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\SQLPS.exe
更新
这是版本
PS SQLSERVER:\SQL\CD000023\CEF_2014_1> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
Run Code Online (Sandbox Code Playgroud)
更新 01/03/2015
此脚本基于中央管理服务器的注册服务器创建表 serverlist。然后它连接到这些服务器中的每一个并识别其侦听的端口。
# connection parameters
Param (
[string] …Run Code Online (Sandbox Code Playgroud) sql-server permissions powershell sql-server-agent sql-server-2014
简而言之:似乎我只收到了 SQL Server 作业历史记录的 PRINT 消息。有效历史输出的定义是什么?
背景:只执行一条像这样的语句UPDATE product SET ...不会在作业历史中留下任何痕迹(无论是否选中“在历史中包含步骤输出”)。在查询分析器中运行相同的语句显示“(X 行受影响)”。
通过创建一个变量并在更新后为它分配@@ROWCOUNT 内容,我可以构建和打印一条包含受影响行数的消息。这将包含在工作历史中。这工作正常,但我想知道Transact-SQL 脚本作业步骤的输出定义(写入历史记录)。除了 PRINTed 字符串之外还包括什么?
人们可能很容易认为历史记录会与 SQL Server Management Studio 的“查询”窗口(以前称为“查询分析器”)的“消息”窗格中显示的完全相同——但事实并非如此。
我找不到有关是否可以备份 SQL Server 中的代理作业的文档。如果没有,我如何备份它们以便在将来发生实例故障时恢复?
我刚刚阅读了这篇文章,该文章提倡使用 sa 帐户来获得 sql server 代理作业的所有权。
http://sqlmag.com/blog/sql-server-tip-assign-ownership-jobs-sysadmin-account
他有一些警告,但没有提供更多细节。
他确实说了以下几点:
...在需要考虑安全性并且最小权限有意义的情况下(例如备份、一致性检查、索引碎片整理等以外的作业),那么您需要查看并利用 SQL Server 代理.
我的问题是 - 为什么最小权限对备份、一致性检查、索引碎片整理等没有意义?可以忽略最小特权时的经验法则是什么?
我正在尝试在 SQL 代理作业 (SQL Server 2016) 中设置 PowerShell 脚本。我正在使用第三方模块 DBATOOLS.psd1,它似乎是我遇到语法错误的地方。目前我的 SQL 作业有一行代码失败:
Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
Run Code Online (Sandbox Code Playgroud)
为什么作业失败并出现以下错误?当我通过 PowerShell ISE 运行它时,此命令工作正常。
Error Message: Unable to start execution of step 1 (reason: line(5): Syntax error). The step failed.
Run Code Online (Sandbox Code Playgroud) sql-server powershell sql-server-agent sql-server-2016 dbatools