2012-10-05 63 views
1

我正在嘗試將特定文件夾中的所有.zip移動到另一個文件夾。源文件夾位於另一臺服務器上,目前我使用SQL xp_cmdshell在服務器之間複製文件

EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\' 
GO 

如果我登錄到了服務器這是工作,但我們的目標是使該過程自動化通過SQL服務器作業代理。我試過

EXECUTE sp_xp_cmdshell_proxy_account 'domain\useracc','pass' 
GO 
EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\' 
GO 

但我收到以下錯誤;

錯誤sp_xp_cmdshell_proxy_account的執行過程中發生。可能的原因:提供的帳戶無效或無法創建「## xp_cmdshell_proxy_account ##」憑證。錯誤代碼:'0'。

而且也不知道這是我的解決方案。請幫助我如何實現這一目標。 server1上的文件名稱每天更改名稱和數量。

回答

1

我發現以下工作適合我;

  1. 在命令提示符下,鍵入services.msc,這將打開服務器上的所有服務列表。

  2. 在服務列表中,查找SQL Server代理,右鍵單擊 - >屬性。轉到登錄選項卡

更改登錄到用戶與兩個服務器上的訪問。然後重新編寫腳本以使用服務器代理CmdExec作業步驟(謝謝皮特卡特)

2

我強烈建議...不要使用xp_cmdshell。它在你的表面區域打開了大量的安全整體,使你容易受到攻擊。 xp_cmdshell應該被禁用!

相反,如果你想用服務器代理自動化這個,你有2個選項。我的首選是使用文件系統任務編寫一個簡單的SSIS包,並使用服務器代理調度此包。 SSIS沒有充分利用這種任務,但實際上相當不錯。

或者重新編寫腳本以使用Server Agent CmdExec作業步驟。這不需要啓用xp_cmdshell並減少攻擊面。