溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》
  • 首頁 > 
  • 教程 > 
  • 數(shù)據(jù)庫 > 
  • SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

發(fā)布時(shí)間:2020-08-08 16:58:05 來源:網(wǎng)絡(luò) 閱讀:3446 作者:lengfei0905 欄目:數(shù)據(jù)庫

    數(shù)據(jù)遷移后,使用SQL Server 2012 備份數(shù)據(jù)庫,備份完成后自動壓縮成rar文件,以前執(zhí)行沒有問題的語句現(xiàn)在只能做備份,而不能自動壓縮并刪除備份,說明問題出在執(zhí)行備份后壓縮時(shí)出現(xiàn)問題。將語句復(fù)制到查詢分析器執(zhí)行報(bào)錯(cuò),提示“RAR.EXE不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”。

SQL語句如下:

/*自動壓縮文件,并在壓縮完成后刪除原文件*/

declare @sqlPathB  varchar(150)   ---數(shù)據(jù)路徑

set @sqlPathB='RAR.EXE  a -dw -ep E:\EFBackup\EFNETSYS\EFNETSYS'+rtrim(convert(varchar(20),getdate(),112))+'.rar '  --創(chuàng)建壓縮文件及存放路徑,-df或-dw表示壓縮后即刪除原文件,-ep表壓縮包內(nèi)不帶路徑

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

exec xp_cmdshell @sqlPathB



    首先,檢查環(huán)境變量。

    自動壓縮需調(diào)用WinRar的Rar.exe,我的WinRar安裝在D盤,上面的SQL語句執(zhí)行時(shí),需使用WinRar安裝目錄下的Rar.exe,因此,環(huán)境變量中必須添加WinRra安裝路徑。經(jīng)檢查發(fā)現(xiàn),因?yàn)閿?shù)據(jù)庫遷移,環(huán)境變量忘記添加。按以下順序添加(以Win server 2008為例):

1、桌面上右鍵【計(jì)算機(jī)】,找到【屬性】,點(diǎn)擊【高級系統(tǒng)設(shè)置】,調(diào)出【系統(tǒng)屬性】對話框,并找到【環(huán)境變量】

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

2、點(diǎn)開【環(huán)境變量】,在【系統(tǒng)變量】里,找到并選中【Path】變量,點(diǎn)擊【編輯】以打開【編輯系統(tǒng)變量】對話框

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

3、在打開的對話框里,將WinRar的安裝路徑放在【變量值】的最后,我這里是D:\Program Files\WinRAR,這里要注意,新放置的路徑,與其他路徑要用半角分號進(jìn)行分隔。

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

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

5、測試是否正常,在CMD中,執(zhí)行“rar.exe”,回車,窗口列出命令用法,說明設(shè)置成功。

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”


設(shè)置完成后,應(yīng)該可以正常使用,誰知,執(zhí)行SQL語句后依然不能正常進(jìn)行壓縮,問題仍未解決,既然在DOS命令窗口rar.exe可以正常執(zhí)行,說明問題與壓縮命令沒有關(guān)系,繼續(xù)查找原因。


其次,檢查SQL Server設(shè)置。

因?yàn)橹皇窃赟QL中調(diào)用xp_cmdshell組件,現(xiàn)在rar.exe在DOS命令窗口可以正常運(yùn)行,現(xiàn)在只好從SQL Server入手查找原因。因?yàn)閿?shù)據(jù)庫壓縮備份是利用SQL Server代理來自動執(zhí)行的,現(xiàn)從這里入手:

1、打開SQL Server配置管理器,找到SQL Server服務(wù),查看SQL Server代理服務(wù)

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”2、突然發(fā)現(xiàn)SQL Server代理的登錄身份為LocalService。

想到以前也有一次是因?yàn)榈卿浬矸輰?dǎo)致SQL使用問題,后來改成LocalSyste就可以正常使用,懷疑是登錄身份的權(quán)限不足,導(dǎo)致無法正常調(diào)用rar.exe導(dǎo)致的。

3、修改SQL Server代理的登錄身份為LocalSystem。

在SQL代理服務(wù)上右鍵,選擇屬性,打開SQL代理屬性對話框,并在登錄身份為的內(nèi)置賬戶下接菜單,將Local Service更為Local System,之后點(diǎn)擊確定。

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”

系統(tǒng)提示因帳戶變更,SQL代理服務(wù)重啟,點(diǎn)擊是重啟服務(wù)即可。

SQL Server使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序 或批處理文件”


設(shè)置完成后,再次執(zhí)行SQL語句,發(fā)現(xiàn)壓縮成功。



總結(jié):

xp_cmdshell在執(zhí)行cmd命令時(shí),除要正確配置必要的環(huán)境變量外,還要給予命令執(zhí)行所涉及到的必須的權(quán)限。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI