我正在使用SQL Server 2017,正在尝试将链接服务器设置为Oracle数据库。我安装了ODAC并更新了PATH,以包括ODAC安装中的Oracle根目录。
一切看起来都很好,并且可以在设置服务器时为OLE DB选择Oracle Provider,但是当我保存配置时,出现以下错误:
==================================
已创建链接服务器,但连接测试失败。您要保留链接服务器吗?
==================================
在执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
程序位置:
在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery中的(字符串sqlCommand,ExecutionTypes执行类型,布尔重试) 在Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(String cmd,布尔重试) 在Microsoft.SqlServer.Management.Smo.LinkedServer.TestConnection() 在Microsoft.SqlServer.Management.SqlManagerUI.LinkedServerProperties.DoPreProcessExecution(RunType runType,ExecutionMode&executionResult)
==================================
无法为链接服务器“ UDW”创建OLE DB提供程序“ OraOLEDB.Oracle”的实例。 (.Net SqlClient数据提供程序)
服务器名称:localhost 错误号:7302 严重程度:16 状态:1 过程:sp_testlinkedserver 行号:1
程序位置:
在Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql中的(ExecuteTSqlAction操作,对象execObject,数据集fillDataSet,布尔值catchException) 在Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(字符串sqlCommand,ExecutionTypes执行类型,布尔重试)
此错误消息并非完全有帮助,如果您单击Microsoft链接,它将重定向到Microsoft主页(感谢Microsoft!)
有没有一种方法可以测试这是在Oracle服务器上找不到TNSNAMES还是某种防火墙问题的问题?
我能够在同一网络中的另一个数据库上设置LinkedServer,因此我可以确认TNSNAMES完全相同,并且所使用的凭据有效。
答案 0 :(得分:0)
此问题的关键是此行:
无法为链接服务器“ UDW”创建OLE DB提供程序“ OraOLEDB.Oracle”的实例。 (.Net SqlClient数据提供程序)
解决方案是转到提供程序选项,然后选中“允许进程内”。如下所示:
我无法确切解释其作用,但是this guy做得很好。