SQL 与 Oracle 数据库链接的服务器

SQL Server Linked with Oracle Database

我正在使用 SQL Server 2017,我正在尝试为 Oracle 数据库设置 linked 服务器。我安装了 ODAC 并更新了我的 PATH 以包含来自 ODAC 安装的 Oracle 根目录。

一切看起来都很好,我可以在设置服务器时选择 Oracle Provider for OLE DB,但是当我保存我的配置时,出现以下错误:

===================================

The linked server has been created but failed a connection test. Do you want to keep the linked server?

===================================

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)


Program Location:

at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType, Boolean retry) at Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(String cmd, Boolean retry) at Microsoft.SqlServer.Management.Smo.LinkedServer.TestConnection() at Microsoft.SqlServer.Management.SqlManagerUI.LinkedServerProperties.DoPreProcessExecution(RunType runType, ExecutionMode& executionResult)

===================================

Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "UDW". (.Net SqlClient Data Provider)


For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=13.00.5081&EvtSrc=MSSQLServer&EvtID=7302&LinkId=20476


Server Name: localhost Error Number: 7302 Severity: 16 State: 1 Procedure: sp_testlinkedserver Line Number: 1


Program Location:

at Microsoft.SqlServer.Management.Common.ConnectionManager.ExecuteTSql(ExecuteTSqlAction action, Object execObject, DataSet fillDataSet, Boolean catchException) at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType, Boolean retry)

这条错误消息并不是很有帮助,如果您关注 Microsoft link,它会将您重定向到 Microsoft 主页(感谢 Microsoft!)

有没有办法测试这是否是找不到 TNSNAMES 的问题还是 Oracle 服务器上的某种防火墙问题?

我能够在同一网络中的另一个数据库上设置一个 LinkedServer,这样我就可以确认 TNSNAMES 完全相同并且我使用的凭据有效。

这个问题的关键是这一行:

Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "UDW". (.Net SqlClient Data Provider)

解决方案是转到提供程序选项并选中允许进程。如下所示:

我无法准确解释它的作用,但 this guy 做得很好。

下一个人还有 3 个可能的原因:

  1. 确保为 oracle 设置了环境变量路径。在我的例子中,第一个对象是 C:\oracle 和 C:\oracle\bin
  2. 确保您在 C:\oracle\network\admin
  3. 中有 TNS 文件
  4. 确保在这些之后重启机器

注意:如果使用 ODAC XCopy,请确保您已彻底阅读 zip 下载中的 readme.htm 文件(说明各不相同)。另外 运行 install.bat 命令使用命令提示符 运行 以管理员身份运行。

更新系统 PATH 变量时,请尝试同时对用户和系统进行更新。