以作业运行加载Excel数据的SSIS包失败问题求助
解决SSIS包作为SQL Agent作业运行时Excel连接失败的问题
我帮你分析下这个问题——你遇到的是典型的SQL Agent上下文与本地运行的权限/环境差异问题:单独运行包时用的是你本地用户的权限,而SQL Agent作业是用服务账户(这里是NA\SQL_INTDB01$)执行的,两者的权限范围、路径解析逻辑都不一样。结合报错信息里的「创建文件失败」,给你几个针对性的排查和解决步骤:
1. 检查Excel文件路径的权限与访问方式
- 确保SQL Agent服务账户
NA\SQL_INTDB01$对Excel文件所在的文件夹拥有读取+写入权限(哪怕是只读导入,Access Database Engine也可能需要生成临时文件的权限)。 - 避免使用相对路径或映射的网络驱动器(比如
Z:\),改用UNC路径(比如\\文件服务器\共享目录\你的Excel文件.xlsx)——因为SQL Agent服务账户通常没有映射网络驱动器的上下文,无法识别这类路径。
2. 确认32位Access Database Engine的安装与作业配置
- 确保SQL Server所在服务器已经安装了32位的Microsoft Access Database Engine(注意:32位和64位版本不能共存,否则会引发兼容性问题)。
- 检查SQL Agent作业步骤的配置:在作业步骤的「配置」选项卡中,务必勾选使用32位运行时(即使服务器是64位,因为Excel驱动通常只有32位能正常工作)。
3. 排查临时文件目录的权限
Access Database Engine处理Excel文件时会生成临时文件,默认存储在服务账户的%TEMP%目录下(通常是C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp,如果是域账户则对应域用户的临时目录)。
- 确认
NA\SQL_INTDB01$对这个临时目录拥有读写权限,否则会触发「创建文件失败」的错误。
4. 优化Excel连接管理器的配置
打开你的SSIS包,调整Excel连接管理器的设置:
- 把硬编码的本地路径改成配置文件或环境变量,避免路径在不同上下文下失效。
- 勾选延迟验证选项——这样可以避免作业启动时过早验证连接,减少权限上下文不匹配导致的验证失败。
报错信息详情
执行用户:NA\SQL_INTDB01$。 Microsoft (R) SQL Server Execute Package Utility 版本13.0.1601.5(32位) 版权所有 (C) 2016 Microsoft。保留所有权利。 开始时间:上午9:41:48 错误:2018-01-04 09:41:49.36 代码:0xC0202009 来源:STRATImport 连接管理器"Excel Connection Manager" 描述:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80004005。存在OLE DB记录。来源:"Microsoft Access Database Engine" HRESULT:0x80004005描述:"创建文件失败。" 错误结束 错误:2018-01-04 09:41:49.36 代码:0xC020801C 来源:数据流任务1 Excel源[71] 描述:SSIS错误代码DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器"Excel Connection Manager"的AcquireConnection方法调用失败,错误代码0xC0202009。此前可能有错误消息提供更多关于AcquireConnection方法调用失败原因的信息。 错误结束 错误:2018-01-04 09:41:49.36 代码:0xC0047017 来源:数据流任务1 SSIS.Pipeline 描述:Excel源验证失败,返回错误代码0xC020801C。 错误结束 错误:2018-01-04 09:41:49.36 代码:0xC004700C 来源:数据流任务1 SSIS.Pipeline 描述:一个或多个组件验证失败。 错误结束 错误:2018-01-04 09:41:49.36 代码:0xC0024107 来源:数据流任务1 描述:任务验证期间发生错误。 错误结束 DTExec:包执行返回DTSER_FAILURE(1)。 开始时间:上午9:41:48 完成时间:上午9:41:49 耗时:0.438秒。 包执行失败。步骤失败。
内容的提问来源于stack exchange,提问作者BH57
相关产品推荐
相关产品推荐

