9

我正在尝试将 SQL Server 2005 链接到 Oracle 10g 数据库。我已经在 SQL 服务器上安装了 Oracle 客户端,并验证我可以使用 tnsping 和 sqlplus 连接到 Oracle 数据库。当我尝试在 SQL Server 中运行查询时,我得到以下信息:

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

有任何想法吗?我已经尝试了以下两个查询,但都没有运气:

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

4

5 回答 5

6

我怀疑是环境设置。也就是说,您的会话正在获取 TNSNAMES.ORA 文件,但 SQL Server 基础的会话不是。我会检查 ORACLE_HOME,并且可能正在设置并指向 TNS_ADMIN。

您是否能够通过 SQL Server 连接对数据库使用简易连接语法。

IE 将 ORA_CSSA2APD 替换为 hostname:1521/service_name

于 2010-08-11T00:06:07.757 回答
4

ORA:12154 通常意味着在 tnsnames.ora 文件中找不到您尝试连接的数据库的别名。(参见http://ora-12154.ora-code.com/更详细的解释。)

您需要确保数据源是 tnsnames 文件知道的别名(在 SQL Server 所在的服务器上,无论您从哪里运行查询);SQL Server 将与任何其他 Oracle 客户端一样,需要知道连接到哪里并且没有 tnsnames.ora 文件,它不会知道 Oracle 数据库在哪里的详细信息。

如果您无权访问 SQL Server 服务器(冗余部门有一个),您需要让服务器管理员为您进行设置。

(链接服务器的数据源属性应该是 tnsnames.ora 中您尝试链接的数据库的别名。)

HTH...

于 2010-08-10T00:05:33.677 回答
2

TNS 错误消息通常意味着连接有缺陷(例如,主机在指定端口上无法获得/超时,或者根本不知道 ORA_CSSA2APD 应该指向什么)。

需要考虑的一件事是,您使用的是 64 位 Windows 以及您使用的是 32 位还是 64 位 Oracle 客户端(或可能同时使用两者)。如果您有一个在 64 位操作系统上运行的 32 位应用程序试图调用 Oracle,它需要一个 32 位 Oracle 客户端。在 64 位操作系统上使用 32 位客户端可能会很棘手,不将其安装在“Program Files (x86)”文件夹中会更安全。

还要记住以下几点

在 64 位版本的 Windows Server 2003 或 Windows XP 中,%WinDir%\System32 文件夹是为 64 位应用程序保留的。当 32 位应用程序尝试访问 System32 文件夹时,访问被重定向到以下文件夹:%WinDir%\SysWOW64

所以对于 64 位 Windows,32 位的东西在 SysWOW64 文件夹中,64 位的东西在 system32 文件夹中。

于 2010-08-09T22:59:48.047 回答
2

这个问题也发生在我身上,但仅限于某些 Windows 用户帐户。为 OraOLEDB.Oracle 提供(SSMS > 服务器对象 > 链接服务器 > 提供 > OraOLEDB.Oracle)启用“允许进程内”提供程序选项的组合,重新启动 SQL Server Windows 服务并最后调整 TNSNAMES.ora 文件的权限直接地。

于 2016-08-19T21:04:15.657 回答
0

我们发现 SQL Server 出于某种未知原因开始在默认 Oracle 位置中查找 TNSNAMES.ORA 文件。

我们能够将 TNSNAMES.ORA 文件放置在以下位置,并取得了成功:

对于 32 位操作系统上的 32 位 SQL Server 或 64 位操作系统上的 64 位

%ProgramFiles%\Oracle
%ProgramFiles%\Oracle\network\admin

对于 64 位操作系统上的 SQL Server 32 位

%ProgramFiles% (x86)\Oracle
%ProgramFiles% (x86)\Oracle\network\admin

我们也可以使用 SQL*Plus 进行连接,但 SQL Server 不能。重要的是要注意 SQL*Plus 没有使用相同的 TNSNAMES.ORA 文件。这就是为什么一个工作。

于 2013-11-16T23:13:48.947 回答