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

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

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有措勤免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

SQL語(yǔ)句如下:

/*自動(dòng)壓縮文件,并在壓縮完成后刪除原文件*/

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)境變量。

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

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

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

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

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

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

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

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

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

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

設(shè)置完成后,應(yīng)該可以正常使用,誰(shuí)知,執(zhí)行SQL語(yǔ)句后依然不能正常進(jìn)行壓縮,問(wèn)題仍未解決,既然在DOS命令窗口rar.exe可以正常執(zhí)行,說(shuō)明問(wèn)題與壓縮命令沒(méi)有關(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ù)庫(kù)壓縮備份是利用SQL Server代理來(lái)自動(dòng)執(zhí)行的,現(xiàn)從這里入手:

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

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

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

3、修改SQL Server代理的登錄身份為L(zhǎng)ocalSystem。

在SQL代理服務(wù)上右鍵,選擇屬性,打開(kāi)SQL代理屬性對(duì)話框,并在登錄身份為的內(nèi)置賬戶下接菜單,將Local Service更為L(zhǎng)ocal 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語(yǔ)句,發(fā)現(xiàn)壓縮成功。

總結(jié):

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

當(dāng)前名稱:SQLServer使用xp_cmdshell提示“不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件”
文章出自:http://muchs.cn/article40/jpdgho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站內(nèi)鏈網(wǎng)站設(shè)計(jì)公司、網(wǎng)站制作云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)