SSIS包循环输入文件。对于每个文件,flatfile解析将记录添加到数据库表,然后重命名/移动文件以进行存档。在所有文件之后,包调用一个sproc来删除所有一年前的记录。
包从visual studio运行OK。放入SSIS包存储,从那里运行,没问题。
创建SQL代理作业以运行包。作业某事大约五分钟,宣布成功,但没有新记录在数据库中,也没有重命名输入文件。
Package使用专用登录获取SQL Server权限。作业以HOSTNAME-SVC运行,它对输入目录和存档目录具有读/写权限。
答案 0 :(得分:1)
您是否已为该软件包设置日志记录?您可以将脚本任务添加到For-Each循环容器中,该容器在每个循环期间运行Dts.Events.FireInformation命令。这可以帮助您跟踪它找到的文件名,它所执行的循环次数,每个循环所需的时间等等。您还可以在最后添加一个记录步骤,以便您知道它至少退出For-Each循环容器成功。
如果您发现程序包运行成功但根本没有遍历任何文件,那么您可能希望使用只读取一个文件的简单程序包进行测试并将其加载到临时表中。如果可行,则进入下一步循环导向器中的所有文件,并仅反复导入一个文件。如果可行,则转到下一步更改文件连接以匹配它在For-Each循环容器文件枚举器任务中找到的文件。
如果软件包没有循环遍历任何文件而您无法看到您测试的一个文件从作业加载,那么请尝试使用您的凭据创建代理帐户并将该作业作为代理帐户运行。如果可以,那么您的服务帐户可能存在权限问题。
如果包甚至没有使用代理帐户导入任何内容,那么您可能希望以服务帐户登录服务器并尝试在BIDS中运行SSIS包。如果可行,那么您可能希望将其部署到服务器并从服务器运行该程序包(它将真正使用您的计算机,但至少它使用服务器中的ssis定义)。如果这样做,那么尝试从代理运行包。
答案 1 :(得分:0)
我不确定我完全理解。该软件包已在多个Windows帐户下进行了全面测试,它确实可以找到所有文件并重命名所有文件。
在代理下,它完全没有任何可见,但需要五分钟才能完成。没有权限错误或任何其他错误。我没有提到早期的尝试DID获得权限错误,因为我们未能给服务帐户访问输入和输出目录。
我无法以服务帐户登录来尝试,因为我没有密码。但是sa是工作所有者所以它应该能够切换到服务帐户 - 我们十天前得到的访问错误表明它可以。包裹本身在这十天内没有改变。我们刚刚删除了这份工作,以便对部署程序进行完整的“彩排”。
因此,我认为,已经改变的是部署过程中的一些细节,遗憾的是,在成功的时候,它并没有在源代码控制中。
答案 2 :(得分:0)
权限似乎有所不同。我们通过允许“everyone”读取生产服务器上的目录来解决问题。由于某些未知原因,我们不必在测试服务器上执行此操作。
当作业尝试获取文件列表时,它没有收到错误(将被记录),而是获得了一个空列表。为什么循环一个空列表花了五分钟仍然是一个谜,因为缺乏权限。但至少发现了所发生的事情。
答案 3 :(得分:0)
我有类似的问题。能够通过设置SQL Server代理作业的日志记录选项来弄清楚发生了什么。
编辑运行程序包的作业中的步骤,转到日志记录选项卡并选择“SQL Server的SSIS日志提供程序”,然后在配置字符串中选择(使用下拉列表)所在的OLEDB连接器包,它碰巧连接到有问题的SQL Server。
然后我能够在该工作的历史中查看更多细节,并确认它没有找到文件。通过更改目录上的权限以匹配sql server代理帐户,程序包最终正确执行。
希望这有帮助。
您可能希望在解决问题后关闭注销,具体取决于程序包运行的频率以及您的案例中提供的信息记录的数量。
此致 贝尔坦