【发布时间】:2018-01-22 20:45:51
【问题描述】:
我在去年 12 月得到了这个 SSIS 包。它只在星期五早上运行。上周五它失败并显示以下错误消息:
包:错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft Access 数据库引擎”Hresult:0x80004005 描述:“Microsoft Access 数据库引擎无法打开或写入文件 '\\ServerShare\IT\Reports\Export Templates\YoderReport.xlsx'。它已被另一个独占打开用户,或者您需要查看和写入其数据的权限。”。
我检查了其他几个类似的问题,但他们没有回答我的问题。我已检查以确保没有人打开该文件。
有问题的文件是一个模板,它被复制然后填充,所以没有人应该打开它,开始。
我尝试将RetainSameConnection 更改为True,但没有区别。我已经在调试模式下运行它,它工作正常。
有人知道如何清除它以使其再次自动运行吗?
更新
经过更多测试,文件似乎正在获取数据,但没有被复制。这是我的设置:
- 我有一个
File System Task,它从我的模板中复制了一个模板 文件夹到我的导出文件夹。 - 然后我有一个
Data Flow Task - 从运行 SQL 脚本以提取数据的 OLE DB 源开始
- 运行
Data Conversion将几个字段更新为正确的格式
- 运行
-
Excel Destination用于输出。 (这是复制到导出文件夹的模板
-
- 还有一个
Flat File Destination,以防万一出现错误
- 还有一个
- 然后使用另一个
File System Task返回控制流,这个将文件从导出文件夹移动到共享驱动器上的最终目的地
当我从 VS 2015 运行它时,它可以正常工作并创建文件。当我从 SQL 代理作业运行它时,它会失败并显示上述错误消息。我唯一能想到的是,在Data Flow Task 中,Excel Destination 没有在最终的File System Task 尝试复制文件之前释放文件?但如果是这样的话,为什么现在才开始发生呢?
【问题讨论】:
-
您是否使用任何脚本组件将数据写入 Xlsx?如果是,则确保关闭文件。
-
@Kalyan 我没有使用脚本。这是在 Visual Studio 2015 中构建的,然后保存为 .dtsx 包。
-
也许有人在你不注意的情况下更改了权限。很容易检查。登录或以该用户身份运行,看看您是否可以打开该文件。要尝试的另一件事是复制文件并尝试打开副本。最后用windows工具确认没有人打开
-
@Nick.McDermaid 没有其他人可以更改权限,我是管理员,没有其他人有权限这样做。我将尝试复制文件的其他建议,看看会发生什么。
标签: sql-server excel ssis etl