我正在尝试通过 PostgreSQL 的链接服务器和 ODBC 驱动程序设置从 MS SQL Server 2012 到 PostgreSQL 9.3 的链接服务器。一切正常,直到给定查询调用 MSDTC,此时我在 SQL Server 计算机上收到类似这样的错误,并且查询完全失败:
> The XA Transaction Manager attempted to load the XA resource manager
> DLL. The call to LOADLIBRARY for the XA resource manager DLL failed:
> DLL=C:\Program Files\psqlODBC\0905\bin\pgxalib.dll, HR=%3, File=%2
> Line=%3.%0
DLL 实际上就是那个位置,所以注册表似乎指向了正确的文件。ODBC 驱动程序是 64 位的,我的操作系统也是。“File=%2”指向 d 驱动器上的某些内容,这对我来说没有意义,因为 d 驱动器是 DVD。MSDTC 正在运行……我错过了什么?
我已将链接服务器属性“为 RPC 启用分布式事务的提升”切换为“真”和“假”,这不会改变问题,也不会产生不同的错误。
否则,我在网上淘了一无所获。
最后要指出的是,我的查询实际上并没有进行任何更新——它只是在提取数据。所以我不确定为什么首先调用 MSDTC ...
我通过更改 Postgresql ODBC 驱动程序文件夹的文件夹权限并授予对网络服务的读取/执行访问权限来解决该问题。因为 MS DTC 在网络服务下运行,我通过查看服务属性确认了这一点。
那摆脱了错误!