微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接到 ms-access 数据库时通过 SQL 作业运行时出现 SSIS 错误意外终止

如何解决连接到 ms-access 数据库时通过 SQL 作业运行时出现 SSIS 错误意外终止

我有一个 OLEDB 任务,它连接到本地文件系统上的 ms-access 数据库并将数据转储到 sql 数据库中。

访问数据库连接字符串为:Data Source=\\my-share\accessdbfile.accdb;Provider=Microsoft.ACE.OLEDB.16.0;

SSIS 包在 Visual Studio 中运行正常。此计算机上安装了 Access 2016 32 位运行时。

部署到 SSIS 目录后,右键单击并执行工作确定。此计算机上安装了 Access 2016 64 位运行时。

当此程序包计划通过 sql 代理作业运行时,使用代理/凭据 [域用户 - 示例:域名\用户 1](对访问 db 文件具有读取权限),则作业将失败。 SSIS 执行报告将错误显示为:意外终止。没有进一步的信息。

假设如果我将代理凭据(域名\用户 1)添加到本地管理员组(在计算机管理中),那么 sql 作业运行正常。有什么办法可以解决这个问题,以便我只能提供所需的最低权限?

解决方法

仅使用提供的信息很难对此进行调试,但总的来说:

运行该作业的用户至少需要对 Access 数据库所在的基础文件夹具有写入和删除权限。这是为数据库生成锁文件所必需的。

如果这是不受欢迎的,因为作业可能会被恶意用户修改,我已经看到这样的部署,其中在具有写访问权限和大小配额的临时文件夹中制作副本,并且该临时文件夹在作业完成,无论作业是否成功。

,

该错误很难调试,因为它在通过 Visual Studio 运行时不会发生。即使部署到 SQL 服务器并从 SSIS 目录运行,执行也能正常工作。仅当包通过 SQL 服务器代理作业(通过凭据/代理)运行时才会发生错误 - SSIS 执行报告不显示任何有用的消息;令人惊讶的是,当将凭据添加为计算机上的本地管理员时,错误得到了解决 - 这是一种不好的做法。

解决方案是分析您使用的是哪种 ms 访问文件,并适当地使用正确的访问运行时版本(2013 年与 2016 年)和连接字符串中正确的提供程序值。

访问运行时:

就我而言,我卸载了 Access 2016 64 位运行时并安装了 Access 2013 64 位运行时。

提供程序版本:

我把provider版本从16.0改成了15.0,如下图-

之前:Data Source=\\my-share\accessdbfile.accdb;Provider=Microsoft.ACE.OLEDB.16.0;

之后:Data Source=\\my-share\accessdbfile.accdb;Provider=Microsoft.ACE.OLEDB.15.0;

注意:

  1. 无需将用户添加到本地管理员组。

  2. 无需使用该帐户登录计算机。

  3. 假设 SSIS 包仅读取 ms access 数据库,则仅读取权限(在 Windows 文件夹安全性下)就足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。