【问题标题】:SSIS File System Task Error while copying files between servers在服务器之间复制文件时出现 SSIS 文件系统任务错误
【发布时间】:2017-06-09 11:37:26
【问题描述】:

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

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

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

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

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

该包使用 SQL Server 代理作业运行良好。该作业通过代理帐户运行。

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

错误截图

【问题讨论】:

  • 您是否为 SQL 代理作业配置了代理帐户来运行?您是否为该代理帐户分配了远程服务器上的权限?
  • 在 Visual Studio 中工作正常,但在 SSISDB 中包失败。它表示访问被拒绝 99% 确定该问题与帐户相关 - 这里没有什么惊天动地的。我很难理解它失败的条件。不同服务器在什么情况下会失败(Visual Studio、SSISDB、SQL Agent)。检查日志以查看它在谁下运行。
  • 您的最后一条语句“使用 SQl 服务器代理作业的程序包运行良好” - 使用不同的服务器时,它在 SQL 代理作业中也运行良好吗?
  • @ManojNayak 你能添加完整的错误信息(截图或文字)吗?

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


【解决方案1】:

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

建议的解决方案

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

运行包 SSISDB 时

1. SQL Server 帐户权限

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

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

您可以为网络帐户(在 sql server 代理中用作代理)添加 Windows 身份验证登录并使用它运行包。

从 SQL 代理运行包时

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

1. SQL Server 帐户权限

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

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

2。设置代理

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

您可以参考以下链接之一了解更多信息:

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

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

4.添加系统管理员角色

将系统管理员角色添加到以下帐户:

  • NT SERVICE\SQLSERVERAGENT
  • NT SERVICE\MSSQLSERVER

其他有类似问题的链接

【讨论】:

  • 感谢您的链接。我们通过通过代理帐户设置单独的调度程序并每隔 5 分钟运行一次以复制输入来复制文件。通过Package直接在服务器之间复制文件似乎不起作用。
【解决方案2】:

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

1) 在服务器中部署包(就像你已经完成的那样)

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

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

如果这些都正常,仍然包在 SSISDB 中失败,我会尝试使用 CMD(DTEXUI/文件/'包路径')的 windows 调度程序任务。抱歉,如果谈论 Windows 调度程序不相关。

【讨论】:

    【解决方案3】:

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

    如果包被配置为只使用本地目录,它每次都能工作。如果我手动启动它,它可以在不同的机器上工作。但是当涉及到 SQL Agent + 不同的机器时,它就失败了。

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

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

    1. 创建一个我在 SSIS 机器上授予足够多的非交互式用户帐户(SQL Server 上的或多或少的系统管理员,服务器上的少数文件夹访问...适合您的需要)
    2. 授予此帐户访问其他服务器文件夹的权限(通过 ACL)
    3. 更新我的 SQL 代理服务以使用此“合法”AD 帐户
    4. 完成!

    自从将近一年以来,它每天都在工作,没有出现任何问题。

    【讨论】:

      【解决方案4】:

      在发布的答案和 cmets 中有很多猜测和红鲱鱼。它与 SQL 代理代理、映射驱动器、MSDB 或系统管理员无关。最终从您的问题中了解到,SQL 代理中的执行很好,只是当您通过右键单击集成服务目录以交互方式运行它时,才会出现问题。

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

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

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

      仅用于确认:如果您在 SSIS 日志中单击 查看上下文,它将向您显示它以哪个用户身份运行,这与 SQL 代理成功执行包不同。

      我翻遍了目录中的执行和配置菜单以及create_execution sp,但我没有看到任何以其他用户身份运行它的方法。

      我有两个建议:

      1. 在启动 SSMS 时使用 Run As 并以其他用户身份运行
      2. 只需将包包装在 SQL 代理中,这样您就可以使用其他帐户来运行包(SQL 代理服务帐户或代理)

      【讨论】:

      • 我同意这一点,我的回答很笼统,因为在被问及在编辑之前问题过于宽泛。之后我没有编辑我的答案。我编辑了我的答案以更清楚。谢谢你的评论。还 +1 以获得良好的解释
      【解决方案5】:

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

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

      IsSourcePathVariable: 假 源连接:源文件连接管理器

      IsDestinationPathVariable:真 目的地变量:DesVariable

      然后它通过了

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

      FileSystemTask properties

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多