天天看点

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

1,问题背景

公司为用户研发了一个项目,该项目的数据源为Oracle,但是项目的某些功能 模块需要从另外的数据库读数据,这个另外的数据库是用户自己另外的一个项目系统使用的sqlserver数据库。

于是需要部署Oracle到sqlserver的透明网关,实现在Oracle里透明的访问其他不同的数据库,这个查询sqlserver的过程如图:

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

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。具体要下载的两个软件为:

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话
通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

3.2,本地安装sqlserver数据库

如果系统本身已经有sqlserver,你想彻底删除sqlserver重新下载,请参考:彻底卸载sqlserver

接下来安装sqlserver,请参考:安装sqlserver

3.3,安装Oracle网关

把从Oracle官网下载下来的网关压缩包解压,点击setup.exe,会依次出现下面操作:

1)

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

2)

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

3)

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

4)

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

5)

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

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的“服务”,如下:

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

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 [email protected]_db_link ;
           

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

4,题外话

4.1 Oracle服务的netmanger中的配置应该会如此:

1)地址1

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

2)地址2

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

3)地址3

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

4.2 Oracle透明网关服务的netmanger中的配置应该会如此:

1)地址1

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

2)地址2

通过部署透明网关实现Oracle和sqlserver的直接通信1,问题背景2,操作环境3,部署网关具体步骤4,题外话

4.3 做了各类配置的更改,一般都要重启服务或者监听,并且配置文件生效可能需要一两分钟的时间