SSIS包停止使用错误代码:0x80004005

时间:2018-01-22 20:45:52

标签: sql-server excel ssis etl

我在去年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返回控制流,此文件将文件从Export文件夹移动到共享驱动器上的最终目标

当我从VS 2015运行它时它工作正常并创建文件。当我从SQL代理作业运行它时,它失败并出现上述错误消息。我唯一能想到的是Data Flow Task Excel Destination File System Task是否在最终 <!-- Header --> <div> <nav id="mainNavbar" class="navbar navbar-expand-lg navbar-light justify-content-end" > <div class="{{config.containerType}}"> <button class="navbar-toggler navbar-toggler-right btn" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" (click)="toggleCollapsed()"> <span class="navbar-toggler-icon"></span> </button> <!--Logo--> <a *ngIf="config.logo" routerLink="{{config.logo.routerLink}}" class="navbar-brand"> <img src="{{config.logo.src}}" alt="Image Description" class="img-fluid img-res" > </a> <!--End Logo--> <div id="navbarSupportedContent" [ngClass]="{'collapse': collapsed, 'navbar-collapse': true}"> <ul *ngIf="config.menu.content" class="navbar-nav text-uppercase" > <li *ngFor="let item of config.menu.content" class="menu-item dropdown "> <a > <span dropdown (onShown)="onShown()" (onHidden)="onHidden()" (isOpenChange)="isOpenChange()"> <a *ngIf="item.routerLink" href dropdownToggle (click)="false" [ngStyle]="item.style" routerLink="{{item.routerLink}}" routerLinkActive="menu-item-active ; selectSlider(item)">{{item.name}}</a> <a *ngIf="!item.routerLink" href dropdownToggle (click)="false" [ngStyle]="item.style">{{item.name}}</a> <div *ngIf="item.submenu"> <ul *dropdownMenu class="dropdown-menu"> <li *ngFor="let choice of item.submenu"> <a [ngStyle]="choice.style" class="dropdown-item" routerLink="{{choice.routerLink}}">{{choice.name}}</a> </li> </ul> </div> </span> </a> </li> </ul> </div> </div> </nav> </div> <!-- End Header --> 尝试复制文件之前释放文件?但如果是这样的话,为什么现在就开始发生呢?

2 个答案:

答案 0 :(得分:0)

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

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

如果它在网络上,可能应该以双反斜杠\\开头

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

或者错过了分区 - &gt;路径不完整

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

同样基于此microsoft article,有两个可能的原因:

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

答案 1 :(得分:0)

Looks like an access issue. Ensure that the Agent Service Account is running with full rights to the network share path. Maybe you can try with your credentials on the Agent Server.

Also, Ensure that your Excel destination connection string supports .xlsx.

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

Changing “Excel 12.0” to “Excel 12.0 Xml” will tell the provider to output in .xslx format instead.