设为首页 收藏本站
查看: 1632|回复: 0

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

[复制链接]

尚未签到

发表于 2018-10-21 07:26:35 | 显示全部楼层 |阅读模式
  数据迁移后,使用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、桌面上右键【计算机】,找到【属性】,点击【高级系统设置】,调出【系统属性】对话框,并找到【环境变量】
DSC0000.png

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

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

  4、添加完后,一路确定返回即可。
  5、测试是否正常,在CMD中,执行“rar.exe”,回车,窗口列出命令用法,说明设置成功。
DSC0003.png

  设置完成后,应该可以正常使用,谁知,执行SQL语句后依然不能正常进行压缩,问题仍未解决,既然在DOS命令窗口rar.exe可以正常执行,说明问题与压缩命令没有关系,继续查找原因。
  其次,检查SQL Server设置。
  因为只是在SQL中调用xp_cmdshell组件,现在rar.exe在DOS命令窗口可以正常运行,现在只好从SQL Server入手查找原因。因为数据库压缩备份是利用SQL Server代理来自动执行的,现从这里入手:
  1、打开SQL Server配置管理器,找到SQL Server服务,查看SQL Server代理服务
DSC0004.png 2、突然发现SQL Server代理的登录身份为LocalService。

  想到以前也有一次是因为登录身份导致SQL使用问题,后来改成LocalSyste就可以正常使用,怀疑是登录身份的权限不足,导致无法正常调用rar.exe导致的。
  3、修改SQL Server代理的登录身份为LocalSystem。
  在SQL代理服务上右键,选择属性,打开SQL代理属性对话框,并在登录身份为的内置账户下接菜单,将Local Service更为Local System,之后点击确定。
DSC0005.png

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

  设置完成后,再次执行SQL语句,发现压缩成功。
  总结:
  xp_cmdshell在执行cmd命令时,除要正确配置必要的环境变量外,还要给予命令执行所涉及到的必须的权限。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624249-1-1.html 上篇帖子: sql2005 express 允许网络访问 下篇帖子: zabbix_server 启动错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表