2

SSIS 包循环输入文件。对于每个文件,平面文件解析将记录添加到数据库表中,然后重命名/移动文件以进行归档。在所有文件之后,包调用 sproc 来删除所有年前的记录。

包从 Visual Studio OK 运行。放入SSIS包商店,从那里运行,没问题。

创建 SQL 代理作业以运行包。Job 做了大约五分钟的事情,宣布它成功,但数据库中没有新记录,也没有重命名输入文件。

包使用 SQL Server 权限的专用登录。作业作为 HOSTNAME-SVC 运行,它对输入目录和存档目录具有读/写权限。

4

4 回答 4

3

您是否为软件包设置了日志记录?您可以将脚本任务添加到在每个循环期间运行 Dts.Events.FireInformation 命令的 For-Each 循环容器。这可以帮助您跟踪它找到的文件名、它执行的循环数、每个循环需要多长时间等。您还可以在最后添加一个日志记录步骤,以便您知道它至少退出 For-Each 循环容器成功。

如果您发现包运行成功但根本没有循环任何文件,那么您可能希望使用一个更简单的包进行测试,该包只读取一个文件并将其加载到临时表中。如果可行,则进行下一步循环遍历 director 中的所有文件,并且一遍又一遍地只导入一个文件。如果可行,则进行下一步更改文件连接以匹配它在 For-Each 循环容器文件枚举器任务中找到的文件。

如果包没有遍历任何文件,并且您甚至无法看到您测试从作业加载的一个文件,那么请尝试使用您的凭据创建一个代理帐户并将作业作为代理帐户运行。如果可行,那么您的服务帐户可能存在权限问题。

如果包即使使用代理帐户也没有导入任何内容,那么您可能希望以服务帐户身份登录服务器并尝试在 BIDS 中运行 SSIS 包。如果可行,那么您可能希望将其部署到服务器并从服务器运行包(这将真正使用您的机器,但至少它使用服务器中的 ssis 定义)。如果可行,请尝试从代理运行包。

于 2010-09-13T23:09:29.840 回答
0

我不确定我是否完全理解。该软件包已经在多个 Windows 帐户下进行了彻底测试,它确实找到了所有文件并重命名了所有文件。

在 Agent 下,它绝对不会做任何可见的事情,但需要五分钟才能完成。没有权限错误或任何其他错误。我没有提到较早的尝试 DID 获得权限错误,因为我们未能授予服务帐户访问输入和输出目录的权限。

我无法以服务帐户身份登录以尝试该操作,因为我没有密码。但是 sa 是作业所有者,所以它应该能够切换到服务帐户——我们十天前得到的访问错误表明它可以。在这十天里,包裹本身没有改变。我们刚刚删除了这项工作,以便对部署程序进行完整的“彩排”。

因此,我认为发生了变化的是部署过程中的一些细节,不幸的是,在它成功的时候,它并没有在源代码控制中。

于 2010-09-14T17:32:55.487 回答
0

权限似乎有所不同。我们通过允许“每个人”读取生产服务器上的目录来解决问题。由于某种未知的原因,我们不必在测试服务器上这样做。

当作业尝试获取文件列表时,它没有收到错误(将被记录),而是得到一个空列表。为什么遍历一个空列表需要 5 分钟仍然是一个谜,因为缺少权限也是一个谜。但至少已经确定了发生的事情。

于 2012-06-19T18:53:04.830 回答
0

我有一个类似的问题。通过设置 SQL Server 代理作业的日志记录选项,能够弄清楚发生了什么。

编辑运行包的作业中的步骤,转到日志记录选项卡并选择“SQL Server 的 SSIS 日志提供程序”,然后在配置字符串中,我选择(使用下拉菜单)包中的 OLEDB 连接器,它碰巧连接到有问题的 SQL Server。

然后,我能够查看该作业历史记录中的更多详细信息,并确认它没有找到文件。通过更改目录的权限以匹配 sql server 代理帐户,包最终正确执行。

希望这可以帮助。

解决问题后,您可能希望关闭日志记录,具体取决于您的程序包运行的频率以及日志记录在您的案例中提供的信息量。

问候, 贝尔廷

于 2013-12-10T19:08:23.797 回答