其他分享
首页 > 其他分享> > syspolicy_purge_history作业故障排除

syspolicy_purge_history作业故障排除

作者:互联网

描述

我们有一台数据库服务器windows 2012 r2 上有安装sql server 2012 和sql server 2016双实例,后续又把sql 2016的服务全部停用,即只保留sql 2012 的服务在用。在例行检查数据库的job 运行情况时发现syspolicy_purge_history该自带的job一直是失败的,错误一直停留在step 3,首先先了解一下该job的官方文档说明,发现虽然跟实际在用的功能暂时没有什么关联,但还是觉得有必要修正。

操作步骤

a.查看job的具体报错提示
消息
已以用户 XXXXXXXXX 的身份执行。 作业步骤在 PowerShell 脚本的行 1 中接收到错误。对应行为“import-module SQLPS  -DisableNameChecking”。更正脚本并重新安排作业。PowerShell 返回的错误信息为“未能加载文件或程序集“file:///C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.Management.PSSnapins.dll”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。  ”.  进程退出代码 -1。.  该步骤失败。

 

查看该step 3 代码如下:
if ('$(ESCAPE_SQUOTE(INST))' -eq 'MSSQLSERVER') {$a = '\DEFAULT'} ELSE {$a = ''};
(Get-Item SQLSERVER:\SQLPolicy\$(ESCAPE_NONE(SRVR))$a).EraseSystemHealthPhantomRecords()

 

其中对 ESCAPE_比较困惑,感觉不像是powershell ,查看帮助才知道是sql server agent 的tonkens.
b.在powershell 运行Import-Moduls 语句
还是一样无法加载该文件,那么升级到powhershell 5 能否解决该问题,因涉及到安装可能会重启服务器不确定因素,慎重起见该方案非首先选。竟然是无法加载该文件,那么直接使用sql 2012 对应的文件是不是就可以了,顺着这个思路,那么问题就变成了如何让step 3这步执行的默认去sql 2012的路径找。
c.修改环境变量
默认的内容
%ProgramFiles%\WindowsPowerShell\Modules;%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\

 

修改为
%ProgramFiles%\WindowsPowerShell\Modules;%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\;C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\

 

即把sql 2016和sql 2012 的路径调换一下。
d.重新执行job验证
 

 

       

标签:Files,syspolicy,Modules,Microsoft,purge,sql,2012,PowerShell,history
来源: https://www.cnblogs.com/jil-wen/p/10405227.html