首页 文章

将Oracle与SQL Server链接

提问于
浏览
8

我正在尝试将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

5 回答

  • 0

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

    您是否能够使用SQL Server连接的数据库的简单连接语法 .

    IE用主机名:1521 / service_name替换ORA_CSSA2APD

  • 1

    ORA:12154通常表示在tnsnames.ora文件中找到的db的别名're trying to connect to wasn't . (见http://ora-12154.ora-code.com/更详细的解释 . )

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

    如果您无法访问SQL Server服务器(冗余部门的部门),则需要让服务器管理员为您设置 .

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

    HTH ...

  • 5

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

    需要考虑的一件事是,您使用的是64位Windows吗?您使用的是32位或64位Oracle客户端(或两者兼而有之) . 如果您在64位操作系统上运行32位应用程序试图调用Oracle,则需要32位Oracle客户端 . 在64位操作系统上使用32位客户端可能很棘手,不安装在“Program Files(x86)”文件夹中更安全 .

    还要记住following

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

    因此对于64位窗口,32位内容位于SysWOW64文件夹中,64位内容位于system32文件夹中 .

  • 2

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

  • 4

    我们发现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文件 . 这就是人们工作的原因 .

相关问题