我正在尝试在 MS SQL 2008 R2 上设置一个链接到 Oracle 11g 服务器的服务器。我已经安装了 Oracle 客户端,并从服务器复制了 sqlnet.ora、tnsnames.ora 和 listener.ora,并将它们设置为以下值:
sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
名称.目录路径= (TNSNAMES,EZCONNECT)
tnsnames.ora
甲骨文 =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = slug.blue.local)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle.blue.local) ) )
监听器
听众 =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = slug.blue.local)(PORT = 1521)) ) )
但在创建新的链接服务器时我总是收到此错误
链接服务器已创建但连接测试失败。是否要保留链接服务器?
附加信息:
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
无法初始化链接服务器“ORACLE”的 OLE DB 提供程序“OraOLEDB.Oracle”的数据源对象。
链接服务器“ORACLE”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息
“ORA-12504:TNS:侦听器未在 CONNECT_DATA 中提供 SERVICE_NAME。”(Microsoft SQL Server,错误:7303)
有人能发现我的配置有什么问题吗?
是否有其他方法可以指定 SERVICE_NAME,或者所有内容都来自 oracle 客户端中的 .ora 文件?
答案1
从语法上看,我认为您的 TNSNAMES.ora 文件没有任何问题。我能够将其复制/粘贴到我的文件中并更改主机名和服务名,然后成功连接。
尝试使用 SQL*Plus 连接。这是否会出现相同的错误?您可以使用 EZCONNECT 语法进行连接:sqlplus user@'slug.blue.local:1521/oracle.blue.local'?
您的本地系统上是否安装了多个 Oracle 客户端?
另外,尝试一个基本的 TNSNAMES.ORA 文件,其中只包含您发布的条目。
另外,您是否尝试使用 tnsnames.ora 文件连接 SQL*Plus?例如,sqlplus user@oracle