Oracle 11g透明网关连接SqlServer

Oracle 透明网关是oracle连接异构数据库提供的一种技术。通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Server, DB2, Sybase等等,就像远程Oracle数据库一样。配置后的sql查询的处理流程(如图):
在这里插入图片描述

注:设置gateways机器可以和Oracle Database在同一台机器上,也可以分开。

一、环境信息

–Oracle 11g
IP地址:172.17.84.29
Oracle根目录:/u01/oracle/app/product/11.2.0/dbhome_1
Oracle端口:1521

–Oracle gateway 11
IP地址:172.17.22.230
gateway11根目录:D:\product\11.1.0\tg_1
gateway端口:1521
SID:dg4msql

–SqlServer2008
IP地址:172.17.22.230
数据库名:HIS
用户名:sa
密码:admin_123

Oracle透明网关下载地址链接:https://pan.baidu.com/s/14Elrkjg2VaxlhXJmJvpcrA 提取码:0qsk

二、Oracle透明网关配置

2.1. gateway安装

解压p13390677_112040_MSWIN-x86-64_5of7.zip,运行setup安装即可,这里我们将透明网关和SQLServer数据库安在了一台服务器上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下一步,填写SQLServer数据库服务器主机名,如:172.17.22.230;数据库名称:HIS
在这里插入图片描述

在这里插入图片描述

安装完后,会弹出配置监听界面,因为我们要手工配置,点击取消即可。
安装完Gateway软件后,在ORACLE_HOME目录(D:\product\11.2.0\tg_1)下有一下dg4msql的目录,这就是Gateway软件的目录了。

2.2. 透明网关层配置的SID信息,指明要访问的MSSQL数据库

在D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora目录下有一个initdg4msql.ora的文件。该文件是Gateway的初始参数文件,描述连接的是哪个SQL Server数据库。该文件的格式是initSID.ora,这里的SID在后面需要用到,系统默认的是dg4msql,一般情况这样就可以了。如果改名,如使用HIS作为SID,则文件名变成initHIS.ora。文件内容如下:

# 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=[172.17.22.230]//HIS
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

只要修改HS_FDS_CONNECT_INFO参数就可以了。格式是:[hostname:port]/serverinstance/databasename,其中hostname是机器名称或IP,PORT是SQL Server的端口号,SQL Server2005默认为1433.serverinstance是SQL Server的实例名,一般空着就行。Databasename是SQL Server的数据库名。因为我们在安装过程中指定了主机名和数据库名,这里已经有信息了。

2.3. 透明网关层配置监听器,处理oracle的查询请求

透明网关层的监听配置文件: D:\Oracle\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora
这里PROGRAM指定应用程序名称,因为实例配置文件在D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora,所以PROGRAM不能改变, SID_NAME就是前面init.ora文件名里指定的SID

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

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.22.230)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
     (SID_NAME = gateway_sid)
     (PROGRAM = dg4msql)
     (ORACLE_HOME = D:\product\11.2.0\tg_1)
    )
  )


ADR_BASE_LISTENER = D:\product\11.2.0\tg_1
-----------------------------------------------------
如果配置多个监听,参考如下:
SID_LIST_LISTENER=
(SID_LIST= 
   (SID_DESC=
      (SID_NAME=gateway_sid)
      (ORACLE_HOME=oracle_home_directory)
      (PROGRAM=dg4msql)
   )
   (SID_DESC=
      (SID_NAME=gateway_sid)
      (ORACLE_HOME=oracle_home_directory)
      (PROGRAM=dg4msql)
   )
)

启动监听:
lsnrctl start
 
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 20-7-2016 15:0
8:31
 
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
 
启动tnslsnr: 请稍候...
 
TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
系统参数文件为D:\product\11.2.0\tg_1\network\admin\listener.ora
写入d:\product\11.2.0\tg_1\diag\tnslsnr\WIN-158KFV5FSBR\listener\alert\log.xml的
日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.17.22.230)(PORT=1521)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
 
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.22.230)(PORT=1521)))
 
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
启动日期                  20-7-2016 15:08:47
正常运行时间              00 小时 03 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\product\11.2.0\tg_1\network\admin\listener.ora
监听程序日志文件          
D:\product\11.2.0\tg_1\diag\tnslsnr\WIN158KFV5FSBR\listener\alert\log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.17.22.230)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
服务摘要..
服务 "HIS" 包含 1 个实例。
  实例 "HIS", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

也可以去windows的服务中查看OracleOraGtw11g_home1TNSListener是否已经启动

2.4. Oracle服务器配置tns(可以不用配置,直接使用2.5方法二建立)

在需要建立dblink的Oracle数据库所在服务器,配置/u01/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
HIS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =172.17.22.230)(PORT = 1521))
    (CONNECT_DATA=(SID=HIS))
    (HS=OK)
  )

参考:
connect_descriptor=
   (DESCRIPTION=
      (ADDRESS=
         (PROTOCOL=TCP)
         (HOST=host_name)
         (PORT=port_number)
      )
      (CONNECT_DATA=
         (SID=gateway_sid))
      (HS=OK))
测试tns
[oracle@test admin]$ tnsping HIS
 
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 20-JUL-2016 15:14:22
 
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 
Used parameter files:
/u01/oracle/app/product/11.2.0/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =172.17.22.230)(PORT = 1521)) (CONNECT_DATA=(SID=HIS)) (HS=OK))
OK (10 msec)

2.5. 建立DB link

在需要建立dblink的Oracle数据库所在服务器创建dblink

方式一:需要配置2.4中oracle服务器的tns
create public database link HISdbLink connect to sa identified by "admin_123" using 'HIS';  
--如果创建全局 dblink,必须使用 systm 或 sys 用户,在 database 前加 public

方式二:不需要修改oracle服务器tns配置(建议)
create database link hisdb_link
 connect to "sa"
 identified by "xxxxx"
 using '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.193)(PORT=1522))(CONNECT_DATA=(SID=HIS))(HS=OK))';
--解释如下:
 HOST:指gateways所在的机器。
 PORT:在gateways机器中listener.ora文件里指定的监听gateways的端口
 SID:必须和gateways机器中listener.ora文件里指定的SID_NAME相同
 HS=OK:指定该连接将使用Oracle的异构服务

删除dblink
DROP DATABASE LINK [name];  
--或  
DROP PUBLIC DATABASE LINK [name];  
查询dblink
select * from dba_db_links;

2.6. 测试

SQL> SELECT * FROM ALL_USERS@MSSQL;

SQL> select 1 from dual@HISdbLink;

1
----------
1

三、遇到的错误

错误1:initdg4msql.ora错误

[SQL]select 1 from dual@HISdbLink
[Err] ORA-28545: 连接代理时 Net8 诊断到错误
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: 紧接着 2 lines (起自 HISDBLINK)
原因:
D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora的HS_FDS_CONNECT_INFO值配置错误

错误2:透明网关的监听卡住,无法重启

相关进程没有彻底关闭,杀掉相关进程 如dg4msql.exe

错误3:ORA-02085错误解决过程

原因:
当global_name参数设置为true,则dblink必须命名为和在目标数据库如下查询出的结果一致:

在目标数据库执行查询:
SQL>  select * from global_name;

GLOBAL_NAME
-------------------------------------------------------------------
mydb

解决办法:
方法一:
SQL> alter system set global_names=false;
global_names参数设置为FALSE,影响的是创建数据库链接的那个库对数据库链接的使用。也就是说,如果一个库(实例)的global_names参数设值为TRUE,则该库连接其他库的数据库链接,其名称必须要与被连接的库的global_name相同。
方法二:
如果在GLOBAL_NAMES设置为TRUE的情况下,如果要建多个数据库链接到同一个库,怎么办呢?因为数据库链接的名称必须与目标库的GLOBAL_NAME相同。可以按如下的方法:

SQL> create database link dmdb@link1 connect to test identified by test using 'dmdb';

数据库链接已创建。

SQL> create database link dmdb@link2 connect to test identified by test using 'dmdb';

数据库链接已创建。

SQL> select * from dual@dmdb;

D
-
X

SQL> select * from dual@dmdb@link1;

D
-
X

SQL> select * from dual@dmdb@link2;

D
-
X

也就是在GLOBAL_NAME后面加上@再加上一个标识。这样就能够创建多个数据库链接到同一目标库上了。

另外在创建数据库链接时,不能给其他SCHEMA创建链接,这是因为数据库链接(database link)其名称可以含有'.'即点号。比如A用户想给B用户创建一个DBLINK名叫LINKB,CREATE DATABASE LINK B.LINKB ......, 这个语句将会实际创建一个A用户下的名为B.LINKB的数据库链接。

其他问题:

ORA-28545:配置的全过程中使用的SID与SQL SERVER的库名保持一致,或者由于server_name使用了IP地址

ORA-28513:listener.ora的ORACLE_HOME配置了db的路径,应改为gateways的路径。

ORA-12514:配置本地db的tnsnames.ora增加sid

ORA-28500:连接 ORACLE 到非 Oracle 系统时返回此信息:
[Generic Connectivity Using ODBC][H006] The init parameter <hs_fds_connect_info>is not set. Please set it in init.ora file.
ORA-02063: 紧接着 2 lines (起自 SQLLINK)
解决:init.ora中的orasid是MSSQL数据库中的指定的数据库名称

ORA-28500:连接 ORACLE 到非 Oracle 系统时返回此信息:
[Generic Connectivity Using ODBC][Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 (SQL State: IM002; SQL Code: 0)
ORA-02063: 紧接着 2 lines (起自 SQLLINK)
解决:HS_FDS_CONNECT_INFO = WAILON-PC,此时的HS_FDS_CONNECT_INFO 的应该赋予配置的ODBC数据源的名称

ORA-02085:数据库链接 SQLLINK.TEST.COM.CN 连接到 HO.WORLD
解决:执行语句 alter system set global_names = false;

四、参考:

https://docs.oracle.com/cd/B28359_01/gateways.111/b31043/conf_sql.htm

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要下载 Oracle 11g 透明网关,首先需要访问 Oracle 官方网站。在官方网站上,可以找到并点击进入 Oracle 11g 透明网关的下载页面。在该页面上,选择适用于您操作系统的版本,通常有 Windows、Linux、Unix 等选项。 在选择了适用于您的操作系统的版本后,可以选择下载 32 位或 64 位的透明网关安装程序。根据您的系统架构选择适当的版本,并点击下载按钮。下载过程可能需要一些时间,具体取决于您的网络速度。 下载完成后,可以找到下载的安装程序文件,并双击运行它。根据安装程序的指示进行安装,可以选择安装位置、创建必要的目录以及配置其他参数。 在完成安装后,需要配置透明网关以使其与您的数据库连接。这些配置可能包括指定数据库的地址和凭据,指定监听端口以及其他连接参数。根据您的需求和数据库的配置进行相应的设置。 完成配置后,可以启动透明网关服务,并验证其连接状态。您可以尝试使用一些工具或命令连接到数据库,看是否能够成功访问。如果连接成功,说明透明网关已经安装并配置正确。 总之,下载 Oracle 11g 透明网关需要访问官方网站,选择适用于您的操作系统的版本并下载安装程序,然后按照安装程序的指示完成安装和配置,最后验证连接状态。这样,您就可以在您的系统上使用 Oracle 11g 透明网关了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值