文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

    数据迁移后,使用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命令时,除要正确配置必要的环境变量外,还要给予命令执行所涉及到的必须的权限。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯