通过部署透明网关实现Oracle和sqlserver的直接通信

1,问题背景

公司为用户研发了一个项目,该项目的数据源为Oracle,但是项目的某些功能 模块需要从另外的数据库读数据,这个另外的数据库是用户自己另外的一个项目系统使用的sqlserver数据库。
于是需要部署Oracle到sqlserver的透明网关,实现在Oracle里透明的访问其他不同的数据库,这个查询sqlserver的过程如图:
这里写图片描述

2,操作环境

在用户数据库服务器群中,公司获得一台数据库服务器,并且部署本项目的oracle数据库服务器,而需要读取的sqlserver数据在另一台数据库服务器中。我为了测试网关部署操作,把对应的oracle和sqlserver以及网关都放到自己的本地电脑上
相关软件:win10 64为操作系统,oracle 11g r2(11.2.0.1.0),oracle对应版本的网关,sqlserver2008 r2

3,部署网关具体步骤

3.1,下载和安装oracle数据库
如果系统本身已经有Oracle,你想彻底删除Oracle重新下载,请参考:彻底卸载oracle

接下来安装Oracle(网关安装包留待后面处理),请参考:安装oracle。具体要下载的两个软件为:
这里写图片描述
这里写图片描述
3.2,本地安装sqlserver数据库
如果系统本身已经有sqlserver,你想彻底删除sqlserver重新下载,请参考:彻底卸载sqlserver

接下来安装sqlserver,请参考:安装sqlserver
3.3,安装Oracle网关
把从Oracle官网下载下来的网关压缩包解压,点击setup.exe,会依次出现下面操作:
1)
这里写图片描述
2)
这里写图片描述
3)
这里写图片描述
4)
这里写图片描述
5)
这里写图片描述
3.4,配置文件修改
3.4.1,网关安装目录
安装完网关软件后,在D:\app\23780\product\11.2.0\tg_1(Oracle安装目录)有一下dg4msql的目录,这就是网关软件的目录

3.4.2,操作initdg4msql.ora
进入目录D:\app\23780\product\11.2.0\tg_1\dg4msql\admin,可以看到文件initdg4msql.ora,修改成如下(如果按照本篇博文全部处理了一遍,但是执行跨网关查询时抛错,可以考虑:HS_FDS_CONNECT_INFO=[.]//db_test):

# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=127.0.0.1//db_test
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER


其中127.0.0.1代表sqlserver所在机器的ip,db_test代表sqlserver数据库的名称。
接下来,复制一份initdg4msql.ora文件到当前目录,并且重命名为inittest.ora,里面的内容和initdg4msql.ora相同。“inittest.ora”中的“test”字符串对应一个sid名称(命名随意),这个sid后面需要用到

3.4.3,配置网关的监听器,处理oracle的查询请求,类似Oracle本身的监听器的作用
进入目录D:\app\23780\product\11.2.0\tg_1\NETWORK\ADMIN,配置文件listener.ora,如下:

# listener.ora Network Configuration File: D:\app\23780\product\11.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = dg4msql)
      (ORACLE_HOME = D:\app\23780\product\11.2.0\tg_1)
      (PROGRAM = dg4msql)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = test)
      (SID_NAME = test)
      (ORACLE_HOME = D:\app\23780\product\11.2.0\tg_1)
      (PROGRAM = dg4msql)
    )
   
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = LAPTOP-KK3DOK73)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )

ADR_BASE_LISTENER = D:\app\23780\product\11.2.0\tg_1


其中“GLOBAL_DBNAME = test”和“SID_NAME = test”的“test”都对应之前步骤指定的sid。
“ (ADDRESS = (PROTOCOL = TCP)(HOST = LAPTOP-KK3DOK73)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))”中指定的“LAPTOP-KK3DOK73”对应当前电脑的计算机全名(右键“我的电脑”,选择“属性”选项可以查阅),1522为网关端口,随意指定,但要符合端口规范,EXTPROC1522对应网关端口号

3.4.4,启动网关监听
管理员身份(必须管理员身份)打开cmd,然后执行命令“lsnrctl start”,打开windows的“服务”,如下:
这里写图片描述

3.4.5,配置Oracle的tns
进入目录D:\app\23780\product\11.2.0\dbhome_1\NETWORK\ADMIN,编辑tnsnames.ora:

# tnsnames.ora Network Configuration File: D:\app\23780\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
test  =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522))
    (CONNECT_DATA=(SID=test))
    (HS=OK)
  )

对于“ test =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522))
(CONNECT_DATA=(SID=test))
(HS=OK)
)”这几行,“test”对应sid,“127.0.0.1”对应网关所在机器ip,“1522”对应网关端口,端口号随意指定,只要合理就行,需要和上面步骤提到的网关端口号保持相同

3.5,操作dblink
3.5.1,在Oracle中建立dblink
1)错误描述:

create public database link my_db_link connect to zj identified by "1234" using 'db_test';//注意双引号和单引号的差别

其中,“my_db_link”为dblink的名称,“zj”和“1234”分别代表sqlserver的一个账户名称和密码,“db_test”代表sqlserver数据库名称
2)正确描述:

create public database link my_db_link connect to zj identified by "1234" using 'test';//注意双引号和单引号的差别

其中,“my_db_link”为dblink的名称,“zj”和“1234”分别代表sqlserver的一个账户名称和密码,“test”代表新增的SID名称

3.5.2,在Oracle中读sqlserver数据

select * from STUDENT@my_db_link ;

其中STUDENT为sqlserver中的数据表名称

4,题外话

4.1 Oracle服务的netmanger中的配置应该会如此:
1)地址1
在这里插入图片描述
2)地址2
在这里插入图片描述
3)地址3
在这里插入图片描述
4.2 Oracle透明网关服务的netmanger中的配置应该会如此:
1)地址1
在这里插入图片描述
2)地址2
在这里插入图片描述
4.3 做了各类配置的更改,一般都要重启服务或者监听,并且配置文件生效可能需要一两分钟的时间

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值