Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL xp\u cmdshell在服务器之间复制文件_Sql_Sql Server_Sql Agent Job_Xp Cmdshell - Fatal编程技术网

SQL xp\u cmdshell在服务器之间复制文件

SQL xp\u cmdshell在服务器之间复制文件,sql,sql-server,sql-agent-job,xp-cmdshell,Sql,Sql Server,Sql Agent Job,Xp Cmdshell,我正在尝试将特定文件夹中的所有.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

我正在尝试将特定文件夹中的所有.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_帐户时出错。可能的原因:提供的帐户无效或无法创建“##xp#u cmdshell_proxy#u account##”凭据。错误代码:“0”


也不确定这是否是我的解决方案。请帮助我如何做到这一点。server1上的文件名每天都会更改名称和数量。

我强烈建议…不要使用xp\u cmdshell。它在你的表面区域打开了一个大的安全整体,使你容易受到攻击。应禁用xp\u cmdshell

相反,如果您想使用server agent自动执行此操作,您有2个选项。我的首选方案是编写一个带有文件系统任务的简单SSIS包,并使用server agent计划此包。SSIS在这类任务中没有得到充分利用,但实际上相当擅长


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

我强烈建议…不要使用xp\u cmdshell。它在你的表面区域打开了一个大的安全整体,使你容易受到攻击。应禁用xp\u cmdshell

相反,如果您想使用服务器代理自动执行此操作,则有两个选项。我的首选方案是编写一个带有文件系统任务的简单SSIS包,并使用server agent计划此包。SSIS在这类任务中没有得到充分利用,但实际上相当擅长


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

我发现以下几点对我有效:

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

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


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

    我发现以下方法对我有效:

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

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

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