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 个可能的原因:
- 确保为 oracle 设置了环境变量路径。在我的例子中,第一个对象是 C:\oracle 和 C:\oracle\bin
- 确保您在 C:\oracle\network\admin
中有 TNS 文件
- 确保在这些之后重启机器
注意:如果使用 ODAC XCopy,请确保您已彻底阅读 zip 下载中的 readme.htm 文件(说明各不相同)。另外 运行 install.bat
命令使用命令提示符 运行 以管理员身份运行。
更新系统 PATH
变量时,请尝试同时对用户和系统进行更新。
我正在使用 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)
解决方案是转到提供程序选项并选中允许进程。如下所示:
下一个人还有 3 个可能的原因:
- 确保为 oracle 设置了环境变量路径。在我的例子中,第一个对象是 C:\oracle 和 C:\oracle\bin
- 确保您在 C:\oracle\network\admin 中有 TNS 文件
- 确保在这些之后重启机器
注意:如果使用 ODAC XCopy,请确保您已彻底阅读 zip 下载中的 readme.htm 文件(说明各不相同)。另外 运行 install.bat
命令使用命令提示符 运行 以管理员身份运行。
更新系统 PATH
变量时,请尝试同时对用户和系统进行更新。