1

通过 DTEXEC.EXE 从 Web 应用程序调用 SSIS 包。该包使用文件系统任务来制作 Excel 模板文件的副本以用作 Excel 目标文件。然后,数据流任务将记录从 OLE DB 源发送到 Excel 目标。然后将 Excel 目标文件流式传输回 Web 应用程序用户的浏览器。

当 Web 应用程序池标识是本地管理员帐户时,这可以正常工作。当 Web 应用程序池身份是一个碰巧也以交互方式登录的受限用户时,它也可以工作。

当 Web 应用程序池身份是未同时登录的受限用户时,会遇到问题。仍然正确返回小型 Excel 文件(几百行)。那里没问题。大型 Excel 文件(几万行)返回为空。返回给用户浏览器的流文件中没有行。写入服务器的目标文件也是空的。

SSIS 包没有发现错误,并报告数万条记录通过数据流。这不是 SQL Server 端的权限问题。当用户帐户被赋予 SQL Server 系统管理员时,它仍然无法将任何行写入更大的 Excel 目标文件。

这看起来像是 Windows 端的权限问题,可能涉及将缓冲区写入磁盘,这就是为什么只处理几百行时不会出现问题的原因。

希望可以通过增加DefaultBufferMaxRows (10,000 rows) 和 DefaultBufferSize (10 MB)的数据流任务设置来避免磁盘缓冲。但是,不幸的是,这不起作用。

这是一个已解决的问题,发布以帮助可能遇到类似问题的任何人。

4

2 回答 2

2

使用进程监视器显示 ISServerExec.exe 正在尝试将缓冲区保存到 C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files。当受限用户帐户在 C:\Users\Default 下获得访问和权限时,一切正常。

这解释了为什么交互式登录用户或本地管理员帐户能够将数据流记录写入 Excel 文件,但常规批量登录却不能这样做。这是 SSIS Excel Destination的不良行为。

于 2014-05-07T17:02:46.393 回答
0

SSIS 包在 BIDS 中工作正常,可以加载超过 5000 行的 excel 文件,但是当同一包在代理帐户下的 SQL Server 代理作业中运行时失败。主要原因是对于大文件 SSIS 进程使用 C:\Users\Default 位置来缓冲数据。因此代理帐户需要对此文件夹位置的写入权限。在此之后,包在 JOB 中也可以正常工作......</p>

于 2016-09-14T17:46:48.147 回答