SSIS 包停止工作,错误代码:0x80004005

问题描述 投票:0回答:2

去年 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
不会释放文件?但如果是这样的话,为什么现在才开始发生呢?

sql-server excel ssis etl
2个回答
0
投票

我认为文件路径有问题,因为您可以看到文件路径以一个反斜杠开头:

\ServerShare\IT\Reports\Export Templates\YoderReport.xlsx

也许它应该以双反斜杠开头

\\
如果它在网络上

\\ServerShare\IT\Reports\Export Templates\YoderReport.xlsx

或者分区丢失 --> 路径不完整

检查向连接管理器提供文件路径的方式(如果您使用表达式)


还根据这篇微软文章,有两个可能的原因:

  1. 您必须具有读取指定文件中数据的权限才能查看其数据。要更改您的权限分配,请咨询您的系统管理员或表或查询的创建者。
  2. 您尝试以独占方式打开指定的文件,但其他用户已打开该文件。

0
投票

看起来像是访问问题。确保代理服务帐户正在以网络共享路径的完全权限运行。也许您可以尝试在代理服务器上使用您的凭据。

此外,请确保您的 Excel 目标连接字符串支持 .xlsx。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\path\xxx.xlsb;Extended Properties="Excel 12.0;HDR=YES";

将“

Excel 12.0
”更改为“
Excel 12.0 Xml
”将告诉提供者以 .xslx 格式输出。

© www.soinside.com 2019 - 2024. All rights reserved.