您好,登錄后才能下訂單哦!
數據遷移后,使用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、桌面上右鍵【計算機】,找到【屬性】,點擊【高級系統設置】,調出【系統屬性】對話框,并找到【環境變量】
2、點開【環境變量】,在【系統變量】里,找到并選中【Path】變量,點擊【編輯】以打開【編輯系統變量】對話框
3、在打開的對話框里,將WinRar的安裝路徑放在【變量值】的最后,我這里是D:\Program Files\WinRAR,這里要注意,新放置的路徑,與其他路徑要用半角分號進行分隔。
4、添加完后,一路確定返回即可。
5、測試是否正常,在CMD中,執行“rar.exe”,回車,窗口列出命令用法,說明設置成功。
設置完成后,應該可以正常使用,誰知,執行SQL語句后依然不能正常進行壓縮,問題仍未解決,既然在DOS命令窗口rar.exe可以正常執行,說明問題與壓縮命令沒有關系,繼續查找原因。
其次,檢查SQL Server設置。
因為只是在SQL中調用xp_cmdshell組件,現在rar.exe在DOS命令窗口可以正常運行,現在只好從SQL Server入手查找原因。因為數據庫壓縮備份是利用SQL Server代理來自動執行的,現從這里入手:
1、打開SQL Server配置管理器,找到SQL Server服務,查看SQL Server代理服務
2、突然發現SQL Server代理的登錄身份為LocalService。
想到以前也有一次是因為登錄身份導致SQL使用問題,后來改成LocalSyste就可以正常使用,懷疑是登錄身份的權限不足,導致無法正常調用rar.exe導致的。
3、修改SQL Server代理的登錄身份為LocalSystem。
在SQL代理服務上右鍵,選擇屬性,打開SQL代理屬性對話框,并在登錄身份為的內置賬戶下接菜單,將Local Service更為Local System,之后點擊確定。
系統提示因帳戶變更,SQL代理服務重啟,點擊是重啟服務即可。
設置完成后,再次執行SQL語句,發現壓縮成功。
總結:
xp_cmdshell在執行cmd命令時,除要正確配置必要的環境變量外,還要給予命令執行所涉及到的必須的權限。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。