【问题标题】:SSIS: FTP task - concurrent connectionsSSIS:FTP任务-并发连接
【发布时间】:2015-06-26 20:03:15
【问题描述】:

我创建了一个用于从 FTP 服务器下载文件的 SSIS 包。 当我调试包时,一切正常。但是当我将包作为 Job 步骤进行处理时,它有时会无法连接。 该作业被安排为每 4 小时重复一次,并且平均每隔一次运行都会失败,并出现错误:0xC002918F - 登录请求被拒绝

连接是匿名的,不需要密码

我已经测试了几个小时,发现了一些信息:

  • 在 FileZilla 中进行测试时,我发现服务器拒绝尝试下载文件的第二次连接。 将最大并发连接数设置为 1 使其在 FileZilla 中工作
  • 命令行中的 FTP 命令工作正常。可能是因为它在每次成功命令后都会关闭连接
  • 在 FTP 连接管理器中,我没有找到限制连接数的选项

我无法看到 FTP 服务器的设置。 最让我困惑的是,一些已安排的任务可以正常工作,而有些则失败了。我没有发现任何规律。

到目前为止我所做的尝试:

  • 主动/被动模式
  • 将 FTP 连接管理器中的重试次数限制为 1
  • 改变调度时间,因此它不会与尝试从服务器下载的任何其他(旧)任务发生冲突
  • 将 FTP 任务设置为 ASCII 模式(服务器告诉 FileZilla,它只接受 ASCII 字符)

到目前为止没有运气。还是有的尝试成功,有的没有。

编辑:

FTP 服务器在 Simatic 设备上。

本周,我每隔 1 小时进行一次调度,并每隔 30 秒对设备进行一次 ping 操作。仍然有一些 SSID 尝试没有成功,并且每次都 ping 通:-/

【问题讨论】:

  • 我也试过调整块大小无济于事。
  • 您能检查一下包裹的保护级别属性吗?请将保护级别属性设置为“依赖服务器存储和角色进行访问控制”。
  • @Jacks,我没有该选项,因为它托管在 SSIS 目录中
  • 来自 SSIS 的@MattiPrice 日志将是有益的。
  • @MattiPrice 你能告诉我你如何调试 SSIS 包的过程吗?

标签: sql-server concurrency ssis ftp connection


【解决方案1】:

我认为您必须接受在这种情况下仅使用解决方法,也许将 SQL 代理 SSIS 作业步骤设置为在 X 秒延迟后重试(SQL 作业步骤的高级选项卡)。当使用 SSIS 连接到易碎的云 API 时,我们经常这样做。

或者也许你的包中的一个 for 循环容器在失败时继续并在成功时中断 - 也许尝试 3 次连接?

对不起,如果这对你来说已经很明显了。

【讨论】:

  • 感谢您的回答。我已将作业设置为每小时运行一次,并且要求数据最长为 4 小时。该作业在 50% 的尝试中成功,因此已足够。如果有人可以解决问题的原因,我会保持这个问题活跃。
【解决方案2】:

我会将标准 SSIS FTP 任务替换为执行进程任务,并调用 WinSCP。

https://winscp.net/eng/docs/guide_automation

我发现 WinSCP 更加可靠和灵活。您可以将使用表达式构建的命令行传递给它,以涵盖 SSIS FTP 任务的所有功能等等。

【讨论】:

  • 在我的案例中使用 FTP 任务的部分原因是能够在成功发送文件后删除文件。我可能会尝试这个,但我担心它可能无法解决我遇到的问题,因为我不知道这是由于同时登录多个还是只是快速连续打开和关闭这么多连接。
  • 嗯,这可能正是我当时正在寻找的。我得去看看。
【解决方案3】:

在黑暗中拍摄,您介意尝试更新包并设置 DelayValidation=True 吗?

验证例程建立连接以测试它们。也许验证例程是另一个并发连接?值得一试吗?

【讨论】:

  • 试过了,对我没用,但想法不错。在本地运行它时我似乎没有问题,但是当部署到托管它并按计划运行它的服务器时,它似乎通过几个文件而不是中断。我的问题可能与 OP 的问题有些不同,但连接重叠似乎是根本原因。
【解决方案4】:

根据我的经验,有时 FILE LOCKDB CONNECTION 即使在结束包执行后也不会终止。

我建议您使用Script Task 并使用 C# 代码进行上传,并确保最后关闭 FTP 连接。

【讨论】:

  • 或从脚本任务中使用 filezilla,您可以在其中控制超时和自动重试等。关键是您不依赖于 SSIS 中内置的 ftp 对象。就像 Mike Honey 在下面建议的那样。
  • 我只是想尽可能避免使用外部可执行文件;)
【解决方案5】:

以前该错误被称为:

'0xC002918F',-1073573489,'DTS_E_FTPTASK_UNABLETOCONNECTTOSERVER','无法使用“__”连接到 FTP 服务器。'

FTP 任务在操作执行结束时显式关闭连接,因此如果连接保持打开状态,则它一定与您的服务器有关。

CozyRockPragmaticWorks 都为 SSIS 提供了出色的 FTP 任务。

Microsoft 网站上列出的指南

https://support.microsoft.com/en-us/kb/925880

https://technet.microsoft.com/en-us/library/bb794745.aspx

除了防火墙/权限/限制检查 FTP 凭据,或者确切地说它们是如何保存/检索的。这种情况下的经验法则是依赖 SQL Server,即使用“依赖服务器存储和访问控制角色”包保护级别。这种方法应该完全消除所有 FTP 凭据问题(不包括当然是错字)。

然而,这是使用Project Deployment Model to store packages in the SSISDB catalog which is where the package you noted resides.时应用的默认设置

如上述海报所建议,不要使用 XP_CMDSHELL 并在没有业务需要的情况下调用外部程序。启用 CMDSHELL 存在重大安全风险。

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多