Oracle怎么一口气连上好几个SQL Server,实操步骤分享
- 问答
- 2026-01-08 19:56:51
- 5
Oracle数据库自己并不能像本地连接一样直接“跑”到SQL Server的地盘上去操作,它需要一个翻译官,这个翻译官就是“透明网关”,这个网关的作用就是让Oracle能听懂SQL Server的“语言”(也就是TNS协议),从而实现跨数据库的交流,下面我就把一步步的实操过程给你讲清楚。
第一步:准备好必要的软件
你得先有个Oracle数据库在运行,这个不用说,关键是,你需要从Oracle官方网站下载一个叫“Oracle Database Gateway for Microsoft SQL Server”的软件,注意,这个网关软件是单独的产品,需要和你Oracle数据库的版本匹配,比如你是Oracle 19c,就找对应19c的网关软件,下载下来是一个压缩包。
第二步:安装网关软件
这个安装过程不算复杂,但有个关键点:不要把网关软件和你的主Oracle数据库安装在同一台服务器上,这是最稳妥的做法,可以避免很多潜在的端口冲突和资源争用问题,你可以找一台单独的服务器,或者一台干净的虚拟机。
安装过程就和装一个普通的Oracle软件差不多,运行安装程序,在选择安装选项时,一定要勾选“Oracle Database Gateway for Microsoft SQL Server”这个组件,其他步骤比如指定安装路径、创建操作系统用户组等,按照提示一步步来就行,安装完成后,这台服务器就成为了专门负责连接SQL Server的“网关服务器”。
第三步:在网关服务器上进行配置
安装好之后,就要告诉网关怎么找到目标SQL Server了,这个配置是通过修改一个叫listener.ora的文件和创建tnsnames.ora文件来完成的,这两个文件通常都在网关安装目录下的network/admin文件夹里。
- 配置监听器 (
listener.ora):你需要在这个文件里添加一段配置,告诉网关的监听程序:“请专门开一个端口(比如1522),用来处理通往某个SQL Server的连接请求。” 这段配置里会包含一个唯一的网关服务名(比如gateway_sqlserver1)。 - 配置网络服务名 (
tnsnames.ora):这个文件就像是通讯录,你需要创建一个条目,给远方的SQL Server起个“别名”(比如LINK_TO_SQLSERVER1),在这个别名下面,要写明SQL Server的详细“住址”:主机名(或IP地址)、端口号(默认1433)、以及你要连接的具体数据库名,还要指向你刚才在listener.ora里创建的那个网关服务名。
配置完成后,记得重启一下网关的监听程序,让配置生效,你可以用lsnrctl status命令检查一下监听器是否正常启动,并且能看到你刚添加的网关服务。
第四步:在主Oracle数据库服务器上配置
现在轮到主Oracle数据库这边了,网关在那边准备好了,你得告诉主数据库怎么找到这个网关。

同样,你需要修改主数据库服务器上的tnsnames.ora文件,你要新建一个条目,这个条目的名字(比如DG4SQLSERVER1)就是你将来在Oracle里创建数据库链接时要用的名字,这个条目的内容,就是指向网关服务器的地址和端口(也就是第二步里你在网关listener.ora里设置的那个端口1522),以及网关服务名。
这样一来,当Oracle数据库想要连接SQL Server时,它就会先根据DG4SQLSERVER1这个别名,找到网关服务器,然后把请求交给网关去处理。
第五步:在Oracle数据库中创建数据库链接
这是最后一步,也是最直接的一步,用有权限的用户(比如SYS或SYSTEM)登录到你的主Oracle数据库,然后执行一条SQL命令:
CREATE DATABASE LINK my_sqlserver_link CONNECT TO sqlserver_username IDENTIFIED BY "sqlserver_password" USING 'DG4SQLSERVER1';
这里:
my_sqlserver_link:是你自己起的链接名字,以后查数据就用它。sqlserver_username和sqlserver_password:是你在目标SQL Server数据库上有的真实账号和密码。'DG4SQLSERVER1':就是你在主数据库tnsnames.ora里配置的那个别名。
第六步:测试连接并查询数据

创建好之后,就可以测试了,在Oracle的SQL提示符下,你可以写这样的查询:
SELECT * FROM employees@my_sqlserver_link;
注意,employees是SQL Server那边的表名,后面一定要跟上@你的数据库链接名,如果这条命令能成功返回SQL Server里employees表的数据,那就大功告成了!
“一口气连上好几个”怎么实现?
如果你想连接多个不同的SQL Server实例,很简单,就是把上面的第三、四、五步重复几次。
- 在网关的
listener.ora里为第二个SQL Server再配置一个网关服务(比如gateway_sqlserver2)。 - 在网关的
tnsnames.ora里为第二个SQL Server再创建一个网络服务别名(比如LINK_TO_SQLSERVER2)。 - 在主数据库的
tnsnames.ora里再为第二个网关服务创建一个连接描述符(比如DG4SQLSERVER2)。 - 在Oracle数据库里用
CREATE DATABASE LINK再创建一个新的数据库链接(比如my_second_sqlserver_link)指向DG4SQLSERVER2。
这样,你就可以在同一个Oracle数据库里,通过my_sqlserver_link、my_second_sqlserver_link等不同的链接名,同时访问多个SQL Server数据库了。
一些可能会遇到的坑:
- 驱动和版本:确保网关版本和Oracle数据库版本兼容。
- 网络连通性:务必保证主Oracle数据库服务器能ping通网关服务器,并且网关服务器能ping通所有的目标SQL Server服务器,防火墙要放行相关端口(Oracle的1521/1522,SQL Server的1433)。
- 权限问题:在SQL Server那边创建的账号,一定要有访问你所需表和数据的权限。
- 密码特殊字符:如果SQL Server的密码有特殊字符,在创建数据库链接时,密码部分可能需要用双引号引起来。
就是连接多个SQL Server的完整实操步骤,整个过程的核心就是架设并配置好“透明网关”这个桥梁,然后在两端做好地址映射,虽然步骤看起来多,但一步一步来,还是比较清晰的。
本文由酒紫萱于2026-01-08发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/77004.html
