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

SSIS File System Task Error while copying files between servers

我可以在两台服务器(例如服务器 A 和服务器 B)之间手动复制文件,并且我有权访问任何一侧的文件夹。

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

当我的源和目标在服务器内时,包在 visual studio 和 SSISDB 中工作正常。

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

解决这个问题的任何想法。

包 运行 可以很好地使用 SQL Server Agent JoB。这项工作是通过代理帐户运行。

我们可以通过代理帐户将包配置为 运行 的任何方式。

错误截图

您是否查看过域帐户在 MSDB 上的权限。我会按照这些步骤。我遇到过类似的问题

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

2) 确保包已加载并在 SSISDB 下的集成服务目录中可用

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

如果这些都很好,但 SSISDB 中的打包仍然失败,我会尝试使用 CMD (DTEXUI/ File/'Package Path') windows 调度程序任务。如果与 windows 调度程序无关,我们深表歉意。

首先@Nick.McDermaid在评论中提供了一个非常有帮助的link来了解更多Which user credentials does Integration Services Catalog use to execute packages?

建议的解决方案

经过搜索有很多问题可能导致这个问题,所以我会提供很多解决方案可以解决你的问题。

当运行打包SSISDB

1. SQL 服务器帐户权限

为您在指定路径上登录的帐户添加读写权限

2。向网络帐户添加 windows 身份验证

您可以为网络帐户(在 sql 服务器代理中用作代理)和 运行 使用它的包添加一个 Windows 身份验证登录。

当 运行 包裹来自 SQL 代理时

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

1. SQL 服务器帐户权限

为指定路径上的以下帐户添加读写权限:

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

2。设置代理

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

您可以参考以下link之一了解更多:

3。将网络驱动器映射到 SQL 服务器实例

一些文章建议映射您在 SQL 服务器上使用的网络驱动器(而不是 OS)。您可以参考以下 link 之一以了解更多信息:

4。添加系统管理员角色

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

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

其他有类似问题的链接

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

如果包被配置为只使用本地目录,它每次都有效。如果我手动启动它,它可以在不同的机器上运行。但是到了SQLAgent+不同机器的时候就失败了

通过 SQL 日志和 Visual Studio 中的一些脚本,我认为这是本地和 AD 帐户的问题。

我解决了这个问题:

  1. 创建一个我在 SSIS 机器上已经足够 运行 的非交互式用户帐户(在 SQL 服务器上或多或少是 sysadmin,在服务器上只有很少的文件夹访问...适合你的需求)
  2. g运行设置此帐户以访问其他服务器的文件夹(通过 ACL)
  3. 正在更新我的 SQL 代理服务以使用此 "legal" AD 帐户
  4. 完成!

这几乎一年以来每天都在工作,没有出现任何问题。

发布的答案和评论中有很多猜测和转移话题。它与 SQL Agent 代理、映射驱动器、MSDB 或 sysadmin 无关。正如最终从您的问题中收集到的那样,SQL Agent 中的执行很好,只是当您 运行 通过右键单击 Integration Services 目录以交互方式出现问题时。

你问题的最后一部分表明这里理解了根本原因:

Any way we can configure Package to Run through proxy account.

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

仅供确认:如果您在 SSIS 日志中单击 查看上下文,它将显示它 运行 是哪个用户,这将与成功的包不同来自 SQL 特工的处决。

我在目录以及 create_execution sp 中搜索了执行和配置菜单,但我看不出有任何方法可以 运行 它作为不同的用户。

我有两个建议:

  1. 使用 运行 作为启动 SSMS 和 运行 作为不同的用户
  2. 只需将包裹包裹在 SQL 代理中,这样您就可以使用其他帐户 运行 包裹(SQL 代理服务帐户或代理)

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

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

IsSourcePathVariable: 错误 源连接:源文件连接管理器

IsDestinationPathVariable:真 目标变量:DesVariable

然后就通过了

[Move/Copy 文件-文件系统任务属性]

FileSystemTask properties