在服务器之间复制文件时出现SSIS文件系统任务错误

时间:2017-06-09 11:37:27

标签: sql sql-server ssis etl ssis-2012

我可以在两个服务器之间复制文件,比如手动说服务器A和服务器B,并且我对两边的文件夹都有权限。

我正在使用文件系统任务来复制文件。

当我的源和目标位于服务器中时,包在Visual Studio和SSISDB中都能正常工作。

当我的源和目标位于不同的服务器中时,包在Visual Studio中工作正常但SSISDB中的包失败。它说访问被拒绝。我的帐户已映射到SSISDB。

任何解决此问题的想法。

使用SQL Server代理JoB可以正常运行包。该作业通过代理帐户运行。

我们可以将Package配置为通过代理帐户运行。

错误屏幕截图

enter image description here

6 个答案:

答案 0 :(得分:6)

首先,@ Nick.McDermaid在评论中提供了一个非常有用的链接,以便了解有关Which user credentials does Integration Services Catalog use to execute packages?

的更多信息

建议的解决方案

搜索后有许多问题可能会导致此问题,因此我将提供许多可以解决您问题的解决方案。

运行包SSISDB时

<强> 1。 SQL Server帐户权限

添加阅读&amp;将权限写入您在指定路径上登录的帐户

<强> 2。将Windows身份验证添加到网络帐户

您可以为网络帐户添加Windows身份验证登录名(在sql server agent中用作代理),然后使用它运行该程序包。

从SQL代理运行包时

这不是你的情况,但这些信息可能会有所帮助

<强> 1。 SQL Server帐户权限

添加阅读&amp;在指定路径上写入以下帐户的权限:

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

<强> 2。设置代理

您可以为SSIS包设置代理,并使用该代理帐户运行作业。

您可以参考以下链接之一了解详情:

第3。将网络驱动器映射到SQL Server实例

有些文章建议映射您在SQL Server(而不是操作系统)上使用的网络驱动器。您可以参考以下链接之一了解更多信息:

<强> 4。添加SysAdmin角色

将SysAdmin角色添加到以下帐户:

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

具有类似问题的其他链接

答案 1 :(得分:1)

您是否查看了MSDB对您的域帐户的权限。我会按照这些步骤。我有类似的问题

1)在服务器中部署软件包(正如您已经完成的那样)

2)确保在SSISDB下的Integration Services目录中加载并可用包

3)重新部署项目并尝试。

如果这些都很好,仍然在SSISDB中失败,我会尝试使用CMD的Windows调度程序任务(DTEXUI / File /&#39; Package Path&#39;)。如果谈论Windows调度程序是不相关的,请道歉。

答案 2 :(得分:1)

前段时间我遇到了类似的问题:在加载文件之前,我必须将文件从服务器复制到执行SSIS的文件。

如果程序包配置为仅使用本地目录,则每次都有效。如果我手动启动它,它可以使用不同的机器。但是当谈到SQL Agent +不同的机器时,它失败了。

我认为通过在Visual Studio中爬行SQL日志和一些脚本来解决本地和AD帐户的问题。

我通过以下方式解决了这个问题:

  1. 创建一个我在SSIS计算机上足够授权的非交互式用户帐户(在SQL Server上或多或少的sysadmin,在服务器上访问的文件夹很少......符合您的需求)
  2. 授予此帐户访问其他服务器的文件夹(通过ACL)
  3. 更新我的SQL代理服务以使用此“合法”AD帐户
  4. 完成!
  5. 这几乎每年都在工作,没有一个问题。

答案 3 :(得分:1)

在答案和评论中发布了很多猜测和红色鲱鱼。它与SQL代理代理,映射驱动器,MSDB或sysadmin无关。最终从您的问题中收集到,SQL Agent中的执行很好,只需通过右键单击Integration Services目录以交互方式运行它即可。

问题的最后部分表明了根本原因:

  

我们可以将Package配置为通过代理帐户运行。

交互式用户(右键单击目录)没有权限,您需要一种从目录中作为具有权限的其他用户运行的方法。

只是为了确认:如果您在SSIS日志中单击查看上下文,它将显示它运行的用户,这将与SQL Agent成功执行的包执行不同。

我挖掘了目录中的执行和配置菜单以及create_execution sp,我没有看到任何方式以不同的用户身份运行它。

我有两点建议:

  1. 启动SSMS时使用“运行方式”并以其他用户身份运行
  2. 只需将程序包打包到SQL代理中,即允许您使用其他帐户运行程序包(SQL代理服务帐户或代理)

答案 4 :(得分:1)

我遇到了类似的错误。尝试使用文件系统任务将文件从一个文件夹移动到另一个文件夹,并得到以下错误消息和

解决方案: 创建连接管理器以指向源文件位置,然后 创建一个名为“ DesVariable”的变量以显示目标文件路径(例如C:\ abc)。在文件系统中,任务属性设置以下内容

IsSourcePathVariable:否 SourceConnection:SourceFileConnectionManager

IsDestinationPathVariable:True DestinationVariable:DesVariable

然后经历了

[移动/复制文件-文件系统任务属性]

FileSystemTask properties

答案 5 :(得分:0)

我有一个类似的错误。在遵循上面Hadi的回答之后,我得到了部分解决方案。文件系统任务可以从NT SERVICE \ SQLSERVERAGENT作为调用者使用,但不能使用我的用户帐户。所以我想这还是许可问题。

一个不相关的问题,可能只是我,是我不小心使用了Projection.Connections而不是Package.Connections,但我只部署了软件包,而不是整个项目。修复了该问题,并且SQL Server代理作业有效。