空Excel文件权限问题:SSIS Excel目标通过c: users default缓冲区大型记录集



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

当web应用程序池身份是本地管理员帐户时,此操作可以正常工作。当web应用程序池身份是一个碰巧以交互方式登录的有限用户时,它也有效。

当web应用程序池标识是一个没有并发登录的受限用户时,遇到问题。小的Excel文件(几百行)仍然可以正确返回。没问题。大型Excel文件(几万行)返回空。流文件中没有返回到用户浏览器的行。在服务器上写入的目标文件也是空的。

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

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

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

这是一个已经解决的问题,用来帮助任何可能遇到类似问题的人。

使用进程监视器显示ISServerExec.exe正试图将缓冲区保存到c:用户默认 appdata 本地微软 windows 临时Internet文件。当有限的用户帐户在C:UsersDefault下被授予访问和权限时,一切都工作了。

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

SSIS包在加载超过5000行excel文件的BIDS中工作正常,但当相同的包在代理帐户下的SQL server Agent Job中运行时失败。主要原因是对于大文件SSIS进程使用c: users 默认位置来缓冲数据。因此代理帐户需要对这个文件夹位置进行写访问。

最新更新