1、扯扯前奏
记的2017年的五一假期,在享受假期的同时突发奇想,Oracle中怎么能查到SQL Server的数据,当时也百度了好多,搞了应该也有一天的时间吧,安装了Oracle透明网关以后却没能连上SQL Server,后来也就搁浅了,现在是2018年12月4日,在这个项目了支援了快两个月了,感觉可能会用到这块,今天就凑时间了测试了下;不得不说今天的运气还是挺好的。
2、不得不说的来龙去脉
oracle 透明网关是oracle连接异构数据库提供的一种技术。通过Gateways,可以在Oracle里透明的访问其他不同的数据库,如SQL Server, DB2, Sybase等等,就像远程Oracle数据库一样。
3、按图就办
备注:当时安装时没有截图,图片是在网上找的,不过内容是对的。
3.1 解压透明网关的压缩包,点击setup.exe安装
3.2 安装目录选择和ORACLE一致
3.3 选择组件,因为要链接到SQL SERVER
3.4 填写SQL SERVER的主机名和数据库名称
3.5 开始安装
3.6 安装完成后就退出了,因为监听要手动配置。
4、配置透明网关
4.1 在D:\app\product\11.2.0\tg_2\dg4msql\admin目录下,个人安装的路径,因人而异。这个目录下可以看到以下initdg4msql.ora文件,上面在安装透明网关时有配置链接SQL SERVER数据的地址和数据库名称,在这里都可以体现。
HS_FDS_CONNECT_INFO=127.0.0.1:1433//Test HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER
检查一下HS_FDS_CONNECT_INFO是否是我们想要链接的地址,格式为:目标数据库的IP地址:端口//数据库名。SQL SERVER的默认端口是1433。这个文件名也比较有讲究。格式为initSID.ora。现在这个文件名是initdg4msql.ora。
4.2 配置透明网关的监听,D:\app\product\11.2.0\tg_2\NETWORK\ADMIN\listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522)) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=dg4msql) (ORACLE_HOME=D:\app\product\11.2.0\tg_2) (PROGRAM=dg4msql) ) ) ADR_BASE_LISTENER = D:\app\product\11.2.0\tg_2
这里需要注意的主要是一下几点:
PROGRAM为dg4msql:因为实例的配置文件在dg4msql目录下,就是上面的initdg4msql.ora文件所在的目录
SID_NAME为dg4msql:这个sid就是上面的文件名中的sid,initdg4msql.ora的sid为dg4msql
ORACLE_HOME就是我们透明网关的安装目录
ORACLE的监听端口是1522,我的oracle和透明网关是安装在自己的电脑上,所以透明网关的监听端口设置为1522。
一个initSID.ora文件就对应一个SID_DESC,可以根据想要链接的数据库来配置。
4.3 启动透明网关的监听
在命令行执行lsnrctl start,或者直接去服务那启动监听OracleOraGtw11g_home1TNSListener,这个服务名根据具体而定,每人可能不太一样。服务启动好了就OK。
4.4 配置tns信息,来到D:\app\Administrator\Home\product\11.2.0\dbhome_1\NETWORK\ADMIN
#透明网关 dg4msql = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522)) ) (CONNECT_DATA = (sid = dg4msql) ) (HS = OK) )
4.5 测试tns
重启oracle监听服务和透明网关服务后在命令行输入:tnsping dg4msql。
4.6 建立DBLINK
create database link LOCALSQL connect to "sa" identified by "qweasd" using '( DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1433)) (CONNECT_DATA = ( SID = Test ) ) (HS=OK ))';
4.7 查询实例