SQLServer 如何访问 Oracle

问题描述

  • 在一台64位 Windows Server 2012 的机器上安装 SQL Server 2012 之后,想通过链接服务器登录Oracle 11g,测试连接报如错:无法创建链接服务器“PRE_NC65”的 OLE DB 访问接口“OraOLEDB.Oracle”的实例。 (Microsoft SQL Server,错误: 7302),如下是完整的配置过程。

注1:之后又遇到报错 ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

注2:之后又遇到报错 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。 (Microsoft SQL Server,错误: 7303),通常是因为tnsnames.ora文件配置错误或Oracle服务名未正确解析

配置过程

  • 第1步,针对 Oracle 11g 建议安装 ODAC112040Xcopy_64bit.zip,ODAC版本不能太新,点我下载

附:卸载命令 uninstall.bat all c:\oracleclient

:: 配置wget及unzip
curl -o wget.exe http://iso.sqlfans.cn/windows/system32/wget.exe
curl -o unzip.exe http://iso.sqlfans.cn/windows/system32/unzip.exe
move /y wget.exe c:\windows\system32\
move /y unzip.exe c:\windows\system32\

:: 安装ODAC
wget -c http://iso.sqlfans.cn/oracle/ODAC112040Xcopy_64bit.zip
unzip ODAC112040Xcopy_64bit.zip -d c:\odac_setup
cd /d c:\odac_setup
mkdir c:\oracleclient
install.bat all c:\oracleclient odac

:: 查看安装日志
type c:\oracleclient\install.log
  • 第2步,调整访问接口(OraOLEDB.Oracle)的如下2个选项

  • 第3步,登录oracle服务器(示例 192.168.31.101),确认oracle服务的端口(示例 1522)、网络服务名(示例 orcl)及状态(示例 OPEN),创建测试账号(示例 dba_admin / Admin_147)
[root@192.168.31.101 ~]# netstat -lnpt | grep tnslsnr
tcp        0      0 192.168.31.101:1522     0.0.0.0:*       LISTEN      6162/tnslsnr

[root@192.168.31.101 ~]# su - oracle -c "sqlplus / as sysdba"
SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 26 16:38:45 2025

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN

SQL> create user dba_admin identified by Admin_147;
SQL> grant connect,resource,dba to dba_admin;
SQL> exit
  • 第4步,确认 telnet 192.168.31.101 1522 是通的
  • 第5步,确认 tnsnames.ora 配置了 SERVICE_NAME = orcl,其中 orcl 为oracle的服务标识符(网络服务名)

注:目录 c:\oracleclient\network\admin 下面可以不用配置 sqlnet.ora

C:\Windows\system32> type c:\oracleclient\network\admin\tnsnames.ora
PROD_NC65 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.31.101)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  • 第6步,重新创建链接服务器,注意 @datasrc 使用 tnsnames.ora 中定义的网络服务名,示例 PROD_NC65
USE [master]
GO

--.drop it first
IF (SELECT srvid FROM sys.sysservers WHERE srvname='PROD_NC65') IS NOT NULL
EXEC master.dbo.sp_dropserver @server=N'PROD_NC65', @droplogins='droplogins'
PRINT 'drop success'
GO

--.create it again
EXEC master.dbo.sp_addlinkedserver @server=N'PROD_NC65', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'PROD_NC65'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'PROD_NC65',@useself=N'False',@locallogin=NULL,@rmtuser=N'dba_admin',@rmtpassword='Admin_147'
GO
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'pub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'rpc', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'rpc out', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'sub', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'connect timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'collation name', @optvalue=null
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'lazy schema validation', @optvalue=N'false'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'query timeout', @optvalue=N'0'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'use remote collation', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'PROD_NC65', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
  • 第7步,测试测试,如开头报错:

  • 第8步,将 SQL Server(MSSQLSERVER)服务的登录身份改为 Local Service

注:调整这个服务的登录身份会触发重启,若问题依旧则建议再手动重启一遍

  • 第9步,配置环境变量(注:可以不用配置)
setx /m ORACLE_HOME c:\oracleclient
setx /m TNS_ADMIN c:\oracleclient\network\admin
setx /m PATH "%PATH%;%ORACLE_HOME%;%ORACLE_HOME%/bin"
echo %PATH%
  • 第10步,测试测试,确认成功

Copyright © www.sqlfans.cn 2021 - 2026 All Right Reserved更新时间: 2025-12-27 10:51:28

results matching ""

    No results matching ""