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 作业活动监视器和手动执行中执行的不同行为的主要内容,如果未能解决你的问题,请参考以下文章