我有一个通过 SQL Server 代理(运行 SQL Server 2012 Enterprise)运行的 SQL 作业。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在文件夹的名称(文件夹是版本号),所以我使用 PowerShell 来查找它:
set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
Run Code Online (Sandbox Code Playgroud)
如果我在 SQL Server 上打开一个 PowerShell 窗口,那么它工作正常。当我在 SQL Server 代理中运行它时,出现以下错误:
A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
Run Code Online (Sandbox Code Playgroud)
我认为这可能是权限问题,所以我尝试在我的凭据下运行 SQL Server 代理(它是测试服务器,而不是生产服务器),但我仍然遇到相同的错误。我还尝试将网络驱动器映射到共享文件夹而不是 UNC 路径,但出现相同的错误。
谁能建议我如何连接到这个文件夹?
每隔一段时间(例如~几个月),SQL Server 代理每小时作业将开始报告错误 15404 并继续这样做直到被干预。
[298] SQLServer 错误:15404,无法获取有关 Windows NT 组/用户“DOMAIN_NAME\SomeDomainAccount”的信息,错误代码 0x6e。[SQLSTATE 42000] (ConnIsLoginSysAdmin)
有时,在手动重新启动 SQL Server 引擎和 SQL Server 代理服务后会立即发生第一次失败。可以通过重新启动机器来清除问题。
作业所有者是错误消息中列出的名称,并且是 SQL Server 管理员。
SQL Server 引擎服务帐户看起来是一个服务帐户(我相信它是默认安装帐户(比通用 NetworkService 好一个档次,以防止引擎/代理实例之间的干扰):
NT Service\MSSQL$INSTNAME
Run Code Online (Sandbox Code Playgroud)
如果作业总是失败,那将是一回事,但由于作业在重新启动后成功,这让我认为像这样的服务帐户应该可以正常工作,并且存在一些 A/D 计时问题或可能存在错误。当 IT 被问及 A/D 配置时,回答通常是“没有任何变化”。
在过去的一个月里,我的一台服务器遇到了 SQL Server 代理问题。它会自动停止并出现以下错误,这是随机发生的:
Sql 代理输出文件
[097] 检测到内存泄漏 [204 字节]
在文件 e:\sql9_sp2_t\sql\komodo\src\core\sqlagent\src\alerter.cpp 的第 403 行捕获到异常 5。SQLServerAgent 启动自我终止
我用谷歌搜索了这个错误,但没有得到太多关于它的信息。SQL Server 和代理都使用相同的域帐户运行;但是,问题仅与 SQL Server 代理服务有关。
我也无法在 SQL Server 配置管理器中看到 SQL Server 代理服务。我检查了 SQL Server 错误日志和 Windows 事件查看器日志,但没有看到任何可疑活动。
我的内存设置配置正确。服务器有 32GB RAM,SQL Server 被分配使用 26GB 的最大内存。
系统详情:
我也检查了msdb数据库。运行 checkdb 并成功完成,没有任何错误。我需要你的帮助来解决两件事:
我在 AlwaysOn 可用性组中设置了 2 个 SQL Server。
我还设置了针对数据库运行的作业。在故障转移期间,我如何确保作业将继续在辅助服务器上运行?我是否需要在两台机器上安装作业和 SSIS 包并在辅助机器上手动禁用它们...然后在故障转移的情况下手动启用它们?或者是否有内置功能来处理这个问题?
sql-server sql-server-2012 sql-server-agent availability-groups
我在 SQL Server 代理中设置了一个作业来运行更新查询。我希望这项工作在每晚午夜和凌晨 5 点之间执行,并且我希望在该时间段内每 5 分钟重复一次。但我只希望在 CPU 空闲时实际执行作业,即 CPU 利用率低于 20%。我知道我可以设置时间表,也可以单独设置 CPU Idle 要求。有没有办法让我设置它,以便两个“时间表”都必须为真才能运行作业?
谢谢
我运行了Brent Ozar 的 sp_blitz 脚本,它抱怨的一件事是我的 SQL Server 代理帐户具有系统管理员权限。我删除了 sysadmin 权限,但是代理无法启动。(见下图)。事件日志中没有什么值得注意的。当我恢复系统管理员权限时,代理可以毫无困难地启动。

我的帐户是托管服务帐户。我使用的其他托管服务帐户(一个用于运行报告服务,另一个用于运行 SQL 服务)都没有 sysadmin 权限。
实际上是否需要 sysadmin 权限?如果没有,此帐户需要的最低权限是多少?
我们有一个运行 PowerShell 的 SQL 代理作业,它创建了一个很长的输出(它有 robocopy 输出等)。
在 SQL 代理作业历史记录中,我们只能看到此输出的前 1,000 个字符左右。
SQL Server 2014 标准版。
我们有一个运行时间为 20-40 分钟的工作。我们只希望此作业的一个实例运行,但我们不希望运行之间存在巨大差距。
因此,每 60 分钟安排一次并不理想,因为可能会有 30-40 分钟的空闲时间。理想情况下,我们将每 30 分钟安排一次,因为这将使我们达到每 10 分钟运行一次或背靠背运行的理想状态。
在 Windows 操作系统计划任务上,有一些设置可以控制在作业仍在运行时如何处理作业实例化。
如何获得对 SQL Server 的一些控制?我如何达到我的理想(或接近它)?
有没有办法跟踪对 SQL Server 代理作业所做的更改?
如果您有理由相信有人在玩弄您的工作设置。您将如何继续跟踪是谁做的以及从哪里对单个工作进行了更改?
我正在考虑扩展事件的思路。
在 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