【问题标题】:The OLE DB provider "OraOLEDB.Oracle" for linked server "PROD" reported an error.链接服务器“PROD”的 OLE DB 提供程序“OraOLEDB.Oracle”报告错误。
【发布时间】:2017-01-16 10:27:00
【问题描述】:

消息 7399,级别 16,状态 1,第 1 行链接服务器“PROD”的 OLE DB 提供程序“OraOLEDB.Oracle”报告错误。提供商报告了意外的灾难性故障。消息 7330,级别 16,状态 2,第 1 行无法从链接服务器“PROD”的 OLE DB 提供程序“OraOLEDB.Oracle”获取行。

由于我已禁用“Allow InProcess”并再次启用,问题仍然存在。

【问题讨论】:

    标签: sql-server-2012


    【解决方案1】:

    我找到了this blogger 发布的解决方案。试试看!

    Sysinternals/Mark Russinovich 的这个工具是最好的,那天我唯一的遗憾是没有早点启动它,而不是搜索谷歌并发疯。 我将 Procmon 限制为 sqlservr.exe,因为加载/处理提供程序的是 SQL 服务本身,而不是 ssms.exe。另外值得注意的是 sqlservr.exe 是一个 64 位进程,而管理工作室仍然只是 32 位。由于服务端服务正在加载提供者,并且服务进程是 64 位的,所以提供者也必须是 64 位格式的。

    ODAC112021Xcopy_x64.zip 已安装到 C:\Oracle。 然而,Procmon 向我展示的是 sqlservr 正试图在除他的文件夹之外的任何文件夹中找到 oci.dll! (它遍历 %Path% sysvariable)。当它最终放弃查找 dll 时,SQL 服务处于不稳定状态,停止该服务的唯一方法是通过 taskmgr/procexp 将其杀死。 很明显,我可以看到“xcopy”部署——虽然没有给我任何错误消息——它也没有设置 PATH 变量! 这就是这篇文章的真正意义……将 C:\Oracle 和 C:\Oracle\Bin 添加到 Path 变量中,或者可能是关于 在流程的早期使用调查工具,而不是依赖您的搜索引擎技能。

    sqlservr.exe 现在可以找到相关的 DLL。根目录中的 OCI.DLL 和 Bin 子文件夹中的 OraOLEDB11.DLL。 此时我可以查询数据库了!如果您按照上述步骤操作,但仍然遇到相同的错误,我强烈建议您像我一样使用 Procmon.exe,而不是跳转到下一个搜索结果。

    完整的帖子是here,并提供更多详细信息。

    【讨论】:

    • 试着用你自己的话解释为什么这些链接可以工作,不管你是否测试过它们,而不是复制和粘贴它们。
    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多