SSIS 脚本任务到 FTP 文件:在 SSMS 作业活动监视器和手动执行中执行的不同行为

Posted

技术标签:

【中文标题】SSIS 脚本任务到 FTP 文件:在 SSMS 作业活动监视器和手动执行中执行的不同行为【英文标题】:SSIS Script Task To FTP Files: Different Behavior on execute in SSMS Job Activity Monitor and manual execute 【发布时间】:2014-06-25 15:30:24 【问题描述】:

我在执行带有 ftp 传输文件的脚本任务的 ssis 包时遇到问题。 在由 SQL Server 作业代理执行时,传输的文件具有零字节大小并且完全为空。当我从 sql server 2012 的 ssis 目录中手动执行包时,它工作正常。也可以使用它工作的 SQL 作业代理的帐户。

Localy 在我的 Visual Studio 2012 中,该包也是将完整的文件传输到 ftp 站点。

FTP 的 vb 代码非常简单:

Dim cm As ConnectionManager = Dts.Connections.Add("FTP")
cm.Properties("ServerName").SetValue(cm, Dts.Variables("User::X_exporttargetserver").Value.ToString)
cm.Properties("ServerUserName").SetValue(cm, Dts.Variables("User::X_exportuser").Value.ToString)
cm.Properties("ServerPort").SetValue(cm, "21")
cm.Properties("ChunkSize").SetValue(cm, "1000")
cm.Properties("Retries").SetValue(cm, "1")
ftp.Connect()
 Dim files(0) As String
 files(0) = Dts.Variables("User::X_exportfilename").Value.ToString
 ftp.SendFiles(files, Dts.Variables("User::X_exporttargetfilename").Value.ToString, True, False)
ftp.Close()

有人知道这是脚本任务问题还是 sql 代理问题?

【问题讨论】:

【参考方案1】:

尝试将 TimeOut 值设置为,

cm.Properties("Timeout").SetValue(cm, "0") 'The 0 setting will make it not timeout

您可以启用日志记录,以便在 sql 代理执行作业时更深入地了解数据。 只需使用 Microsoft Network Monitor 检查 FTP 会话期间发生的情况

通过更改来尝试 - 在作业中创建步骤,选择以 32 位模式运行。

【讨论】:

嗨 Vikramsinh,我正在尝试脚本中的 timout 设置。以及作业步骤设置中的 32 位模式。但还是不行。 我认为实现日志功能是值得的。并检查幕后发生的事情,这也将使故障排除更加容易。 这是个好主意。我将实现更多的日志记录...我发现这似乎是一个权限问题。我要 ftp 的文件在这台服务器上的共享上,我像 \\myServer\Sharefolder$\file.csv 一样连接它们。当我使用 D:\Sharefolder\file.csv 它正在工作。我不明白... sqlagent 用户对共享和本地文件夹拥有完全权限【参考方案2】:

我找到了我的问题的解决方案。在本地共享的 UNC 路径上,我为我的用户和 sql 作业代理设置了权限。

通过将 ssis 服务帐户的权限添加到此共享中,包可以正确执行。

【讨论】:

以上是关于SSIS 脚本任务到 FTP 文件:在 SSMS 作业活动监视器和手动执行中执行的不同行为的主要内容,如果未能解决你的问题,请参考以下文章

SSIS - 8.FTP 任务

使用带有 SSIS 的 FTP 上传文件

关于SSIS FTP任务问题

SSIS 脚本任务搜索文本(如果可用) 复制文件

使用 SSIS 加载最新的 Excel 文件:脚本任务调试

使用 SSIS 脚本任务将数据从多个 SQL 表导出到不同的平面文件