SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”
admin
2023-06-04 08:41:37
0

    数据迁移后,使用SQL Server 2012 备份数据库,备份完成后自动压缩成rar文件,以前执行没有问题的语句现在只能做备份,而不能自动压缩并删除备份,说明问题出在执行备份后压缩时出现问题。将语句复制到查询分析器执行报错,提示“RAR.EXE不是内部或外部命令,也不是可运行的程序 或批处理文件”。

SQL语句如下:

/*自动压缩文件,并在压缩完成后删除原文件*/

declare @sqlPathB  varchar(150)   ---数据路径

set @sqlPathB='RAR.EXE  a -dw -ep E:\EFBackup\EFNETSYS\EFNETSYS'+rtrim(convert(varchar(20),getdate(),112))+'.rar '  --创建压缩文件及存放路径,-df或-dw表示压缩后即删除原文件,-ep表压缩包内不带路径

+'E:\EFBackup\EFNETSYS\EFNETSYS'+rtrim(convert(varchar(20),getdate(),112))+'0000.bak'  --取被压缩文件及路径

exec xp_cmdshell @sqlPathB



    首先,检查环境变量。

    自动压缩需调用WinRar的Rar.exe,我的WinRar安装在D盘,上面的SQL语句执行时,需使用WinRar安装目录下的Rar.exe,因此,环境变量中必须添加WinRra安装路径。经检查发现,因为数据库迁移,环境变量忘记添加。按以下顺序添加(以Win server 2008为例):

1、桌面上右键【计算机】,找到【属性】,点击【高级系统设置】,调出【系统属性】对话框,并找到【环境变量】

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”

2、点开【环境变量】,在【系统变量】里,找到并选中【Path】变量,点击【编辑】以打开【编辑系统变量】对话框

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”

3、在打开的对话框里,将WinRar的安装路径放在【变量值】的最后,我这里是D:\Program Files\WinRAR,这里要注意,新放置的路径,与其他路径要用半角分号进行分隔。

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”

4、添加完后,一路确定返回即可。

5、测试是否正常,在CMD中,执行“rar.exe”,回车,窗口列出命令用法,说明设置成功。

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”


设置完成后,应该可以正常使用,谁知,执行SQL语句后依然不能正常进行压缩,问题仍未解决,既然在DOS命令窗口rar.exe可以正常执行,说明问题与压缩命令没有关系,继续查找原因。


其次,检查SQL Server设置。

因为只是在SQL中调用xp_cmdshell组件,现在rar.exe在DOS命令窗口可以正常运行,现在只好从SQL Server入手查找原因。因为数据库压缩备份是利用SQL Server代理来自动执行的,现从这里入手:

1、打开SQL Server配置管理器,找到SQL Server服务,查看SQL Server代理服务

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”2、突然发现SQL Server代理的登录身份为LocalService。

想到以前也有一次是因为登录身份导致SQL使用问题,后来改成LocalSyste就可以正常使用,怀疑是登录身份的权限不足,导致无法正常调用rar.exe导致的。

3、修改SQL Server代理的登录身份为LocalSystem。

在SQL代理服务上右键,选择属性,打开SQL代理属性对话框,并在登录身份为的内置账户下接菜单,将Local Service更为Local System,之后点击确定。

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”

系统提示因帐户变更,SQL代理服务重启,点击是重启服务即可。

SQL Server使用xp_cmdshell提示“不是内部或外部命令,也不是可运行的程序 或批处理文件”


设置完成后,再次执行SQL语句,发现压缩成功。



总结:

xp_cmdshell在执行cmd命令时,除要正确配置必要的环境变量外,还要给予命令执行所涉及到的必须的权限。

相关内容

热门资讯

闻泰科技起诉安世荷兰:索赔至少... 【文/观察者网 阮佳琪】据彭博社报道,5月22日晚,中国闻泰科技股份有限公司发布重大诉讼公告称,已在...
伊朗民航局否认近期曾发布任何涉... 伊朗民航局发言人当地时间23日称,伊朗民航局近期并没有发布任何新的航行警告,网上流传的相关限飞文件纯...
山西事故煤矿给出的图纸与实际不... 昨晚,山西留神峪煤矿发生瓦斯爆炸。目前,爆炸点附近出现了积水,救援人员正在紧急制定新的救援方案。记者...
特朗普变卦前,接到电话警告“会... 【文/观察者网 王一】美国总统特朗普原计划于当地时间5月21日签署一项将赋予其政府更多人工智能(AI...
5岁女童被马缰绳拖行致死,仅“... 一个幼小生命被马缰绳绕颈拖行致死,令人痛心。据纵览新闻报道,5月12日傍晚,两匹受惊的马闯入贵阳市白...
回响∣AI的奇豫记 【编者按】由中共河南省委宣传部、河南广播电视台联合制作的理论宣传系列微视频《回响·第四季》正式上线!...
央媒看河南丨积极融入服务全国统... 5月21日晚上8点,河南省许昌市胖东来生活广场人来人往。“五一”假期,许昌、新乡两地胖东来商超接待顾...
航拍山西矿难:矿口停满救护车 5月22日19时29分,山西长治市沁源县山西通洲集团留神峪煤业有限公司井下发生瓦斯爆炸事故,造成重大...
视频丨神二十三乘组确定:朱杨柱... 今天(5月23日)上午,神舟二十三号载人飞行任务新闻发布会在酒泉卫星发射中心召开。
专家解读|强化伦理安全标准 引... 当前,人工智能技术加速演进,正从内容生成、智能交互向行业应用、公共服务、知识生产、社会治理等领域持续...