我正在尝试将特定文件夹中的所有.zip移动到另一个文件夹。源文件夹位于另一台服务器上,目前我正在使用
EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\'
GO
如果我登录到两个服务器,哪个有效,但目标是自动化此过程VIA sql server作业代理。我试过了
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上的文件名每天都会更改名称和数量。
答案 0 :(得分:2)
我强烈建议......不要使用xp_cmdshell。它会在您的表面区域打开大型安全整体,让您容易受到攻击。应该禁用xp_cmdshell!
相反,如果您想使用服务器代理自动执行此操作,则有2个选项。我的首选是编写一个带有文件系统任务的简单SSIS包,并使用服务器代理安排此包。 SSIS没有充分利用这种任务,但实际上相当不错。
或者重写您的脚本以使用Server Agent CmdExec作业步骤。这不需要启用xp_cmdshell并减少攻击面。
答案 1 :(得分:2)
我发现以下内容对我有用;
在命令提示符下,键入services.msc,这将打开服务器上所有服务的列表。
- 醇>
在服务列表中,查找SQL Server代理,右键单击 - >属性。转到登录选项卡
将登录更改为在两台服务器上都具有访问权限的用户。然后重新编写脚本以使用Server Agent CmdExec作业步骤(谢谢Pete Carter)