2

我正在尝试将特定文件夹中的所有 .zip 移动到另一个文件夹。源文件夹位于另一台服务器上,目前我正在使用

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

如果我登录到两台服务器,这将起作用,但目标是通过 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 上的文件名每天都在更改名称和数量。

4

2 回答 2

2

我强烈建议...不要使用 xp_cmdshell。它在您的表面区域打开了大型安全系统,使您容易受到攻击。xp_cmdshell 应该被禁用!

相反,如果您想使用服务器代理自动执行此操作,您有 2 个选项。我的偏好是编写一个带有文件系统任务的简单 SSIS 包,并使用服务器代理安排这个包。SSIS 在此类任务中未得到充分利用,但实际上非常擅长。

或者,重新编写脚本以使用服务器代理 CmdExec 作业步骤。这不需要启用 xp_cmdshell 并减少攻击面。

于 2012-10-05T07:32:56.390 回答
2

我发现以下内容对我有用;

  1. 在命令提示符下,键入 services.msc,这将打开服务器上所有服务的列表。

  2. 在服务列表中,查找 SQL Server 代理,右键单击 -> 属性。转到登录选项卡

将登录更改为在两台服务器上都具有访问权限的用户。然后重新编写脚本以使用服务器代理 CmdExec 作业步骤(谢谢 Pete Carter)

于 2012-10-05T08:18:46.850 回答