消息7399,级别16,状态1,行1链接服务器“PROD”的OLE DB提供程序“OraOLEDB.Oracle”报告错误。该提供商报告了意外的灾难性故障。消息7330,级别16,状态2,行1无法从OLE DB提供程序“OraOLEDB.Oracle”获取链接服务器“PROD”的行。
由于我已禁用“允许InProcess”并再次启用,因此问题仍然存在。
答案 0 :(得分:0)
我找到了this blogger发布的解决方案。试试吧!
来自Sysinternals / Mark Russinovich的这个工具是最好的,我唯一的遗憾是那天没有推出它而不是淘到谷歌并且疯了。 我将Procmon限制为仅仅sqlservr.exe,因为它是加载/处理提供程序而不是ssms.exe的SQL服务本身。另外值得注意的是,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,其中包含更多详细信息。