oracle 透明网关是oracle连接异构数据库提供的一种技术。通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Server, DB2, Sybase等等,就像远程Oracle数据库一样。配置后的sql查询的处理流程
一、环境信息
Oracle11g (linux.x64系统)
IP地址 | 192.168.1.9 |
Oracle根目录 | /u2/oracle/product/11.2.0/dbhome_1 |
Oracle端口 | 1521 |
Oracle gateway (Window server 2008 R2)
(可以独立一台服务。本例子跟Sqlserver2008 R2 的服务器装在一起了。原因是懒得再装一台服务器,本例子Sqlserver2008 R2是Window server 2008 R2系统,可视化操作方便点,所以干脆装一起了。除了监听端口要从1521改成1522外,新装一台服务器上所有配置一样的)
IP地址 | 192.168.1.50 |
gateway11根目录 | D:\Oracle\product\11.2.0\tg_1 |
gateway端口 | 1522 (默认是1521,因为此计算机上已经安装了数据库使用此端口,所以端口冲突了,需要改一下) |
SID | C6 |
金和OA的C6 (Sqlserver2008 R2) Window server 2008 R2
IP地址 | 192.168.1.50 |
数据库名 | C6 |
用户名 | sa |
密码 | admin_123 |
Oracle透明网关linux系统下载地址,也可以自动搜索下载:
http://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_gateways.zip
适用于 Microsoft Windows (x64) 的 Oracle Database Gateways 11g 第 2 版 (11.2.0.1.0)
http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_gateways.zip
二、Oracle透明网关配置
2.1. gateway安装
下载和解压win64_11gR2_gateways.zip到Oracle gateway服务器中(本例是金和OA的C6服务器192.168.1.50),运行setup安装即可
【注意:本例我们将透明网关和SQLServer数据库安在了一台服务器上。】
下一步,填写 SQLServer数据库 服务器主机名,如:192.168.1.50;数据库名称:C6
【说明一下,之所以是C6,是因为192.168.1.50中sqlserver2008的数据库命名为C6】
安装完后,会弹出配置监听界面,因为我们要手工配置,点击取消即可。
安装完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,一般情况这样就可以了。如果改名,如使用C6作为SID,则文件名变成 initC6.ora。
initC6.ora文件内容如修改如下 格式:【HS_FDS_CONNECT_INFO=[IP]/数据实例名/数据库名】
# 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=[192.168.1.50]//C6 由于是安装在同一服务器内,所以IP可以用.来替代
# 注意:最好别用localhost,有的数据库可能不识别localhost,只能用.代替,不然会报:ORA-28500错误
HS_FDS_CONNECT_INFO=[.]//C6
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的查询请求
在NETWORK\admin目录里面:
透明网关层的监听配置文件: 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.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = C6)
(PROGRAM = dg4msql)
(SID_NAME = C6)
(ORACLE_HOME = D:\product\11.2.0\tg_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.50)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\product\11.2.0\tg_1
注意:LISTENER 段,192.168.1.50)(PORT = 1522)) ,本来是1521的端口,改成了1522
启动监听
开始菜单>运行>cmd,输入
C:\Users\Administrator>lsnrctl start
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 – Production on 28-4月 -2018 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=192.168.1.50)(PORT=1522)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.50)(PORT=1522)))
LISTENER 的 STATUS
————————
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 – Produ
ction
启动日期 28-4月 -2018 15:08:47
正常运行时间 0 天 0 小时 0 分 3 秒
跟踪级别 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\WIN-158KFV5FSBR\li
stener\alert\log.xml
监听端点概要…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.50)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
服务摘要..
服务 “C6” 包含 1 个实例。
实例 “C6”, 状态 UNKNOWN, 包含此服务的 1 个处理程序…
命令执行成功
C:\Users\Administrator>
也可以去windows的服务中查看OracleOraGtw11g_home1TNSListener是否已经启动
====》另一种启动或者重启方法:
点击 LSNRCTL.exe文件,进入下面界面:
2.4 Oracle服务器配置tns
在需要建立dblink的Oracle数据库所在服务器,
配置/u2/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora ,推荐先备份一下此文件。
以下是可复制内容
C6 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.50)(PORT = 1522))
(CONNECT_DATA=(SID=C6))
(HS=OK)
)
测试tns是否成功。
[oracle@elearningtest admin]$ tnsping C6
TNS Ping Utility for Linux: Version 11.2.0.4.0 – Production on 20-JUL-2016 15:14:22
Copyright (c) 1997, 2011, 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 =192.168.1.50)(PORT = 1522)) (CONNECT_DATA=(SID=HR)) (HS=OK))
OK (10 msec)
建立DB link
下面是可复制内容:
2.5.建立DB link
create public database link JHOADB connect to sa identified by “sa密码” using ‘C6’;
2.6 测试
SQL> select 1 from dual@JHOADB;
1
———-
1
select * from USERS@JHOADB
注意事项:oracle查询sqlserver的时候,字段要区分大小写,并且要用””括起来。否则会提示
正确语句:
select * from USERS@JHOADB WHERE “UserID”=’00300′;
三、遇到的错误
错误1:initdg4msql.ora错误
[SQL]Select 1 from USERS@JHOADB
[Err] ORA-28545: 连接代理时 Net8 诊断到错误
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: 紧接着 2 lines (起自 HRDBLINK)
原因:
$OracleHOME\dg4msql\admin\initdg4msql.ora的HS_FDS_CONNECT_INFO值配置错误
错误2.透明网关的监听卡住,无法重启
相关进程没有彻底关闭,杀掉相关进程 如dg4msql.exe
转载请注明:赫非域 » Oracle 11g透明网关连接Sqlserver