共计 5402 个字符,预计需要花费 14 分钟才能阅读完成。
最近的工作中需要基于 Oracle 连接到 SQL Server 2014,我们可以通过配置 Gateway 的方式来实现这个功能。这个 Gateway 的实质是透过 dblink 来实现的。即把 SQL Server 模拟成一个远端的 Oracle 实例,这个实例由 Gateway 来负责进行接收,转发等等。本文简要描述其配置过程。
一、安装环境介绍
gateway: 12.1.0.2 | |
Oracle db: 11.2.0.4 + RHEL6.3 | |
Sqlserver: 2014 + Win2012 | |
如果安装在已经安装 Oracle 相同的目录下,会收到如下提示,无法继续安装。[INS-32025] The chosen installation conflicts with software already | |
installed the given Oracle home. |
二、安装 Oracle gateway
1、准备环境
$ unzip linuxamd64_12102_gateways.zip | |
$ mkdir -p /u01/app/gateway | |
$ mkdir -p /u01/app/gateway/12.1 | |
$ cp ~/.bash_profile ~/.bash_profile_gw | |
$ vim ~/.bash_profile_gw ### 编辑新的 bash_profile 文件 | |
$ more ~/.bash_profile_gw ### 编辑后如下 | |
# .bash_profile | |
# Get the aliases and functions | |
if [-f ~/.bashrc ]; then | |
. ~/.bashrc | |
fi | |
# User specific environment and startup programs | |
TMP=/tmp; export TMP | |
TMPDIR=$TMP; export TMPDIR | |
ORACLE_HOSTNAME=wms.ycdata.net; export ORACLE_HOSTNAME | |
ORACLE_UNQNAME=dg4msql; export ORACLE_UNQNAME | |
ORACLE_BASE=/u01/app/gateway; export ORACLE_BASE | |
ORACLE_HOME=$ORACLE_BASE/12.1; export ORACLE_HOME | |
ORACLE_SID=dg4msql; export ORACLE_SID | |
PATH=/usr/sbin:$PATH; export PATH | |
PATH=$ORACLE_HOME/bin:$PATH; export PATH | |
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH | |
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH |
2、安装配置 gateway
source ~/.bash_profile_gw | |
env |grep ORACLE | |
ORACLE_UNQNAME=dg4msql | |
ORACLE_SID=dg4msql | |
ORACLE_BASE=/u01/app/gateway | |
ORACLE_HOSTNAME=wms.ycdata.net | |
ORACLE_HOME=/u01/app/gateway/12.1 | |
$ export DISPLAY=192.168.21.157:0.0 | |
cd gateways/ | |
./runInstaller | |
选择 for sql server | |
Oracle Database Gateway for Microsoft SQL Server | |
Oracle Database Gateway for ODBC (此项可以用于配置访问 mysql) | |
输入 sqlserver 连接信息,也可以后续再配置文件 initdg4msql.ora中修改 | |
192.168.21.157 | |
1433 | |
HQ1636 | |
testdb | |
安装完毕后,会提示创建监听器,可以直接创建,也可以在安装完毕后再配置,本文是在安装完毕后,通过 netmgr 进行配置的。在通过 netmgr 配置时,除了配置监听器地址和端口号之外,还需要配置其他服务项:Program Name dg4msql | |
SID dg4msql | |
Oracle Home Directory /u01/app/gateway/12.1 | |
与此同时,也可以通过 netmgr 配置 tnsnames.ora | |
cd $ORACLE_HOME/network/admin | |
more listener.ora | |
listener.ora Network Configuration File: /u01/app/gateway/12.1/network/admin/listener.ora | |
Generated by Oracle configuration tools. | |
LISTENER_GW = | |
(DESCRIPTION = | |
(ADDRESS = (PROTOCOL = TCP)(HOST = wms.ycdata.net)(PORT = 1531)) | |
) | |
SID_LIST_LISTENER_GW = | |
(SID_LIST = | |
(SID_DESC = | |
(PROGRAM = dg4msql) | |
(SID_NAME = dg4msql) | |
(ORACLE_HOME = /u01/app/gateway/12.1) | |
) | |
) | |
ADR_BASE_LISTENER_GW = /u01/app/gateway | |
### 查看配置后的 tnsnames.ora | |
more tnsnames.ora | |
tnsnames.ora Network Configuration File: /u01/app/gateway/12.1/network/admin/tnsnames.ora | |
Generated by Oracle configuration tools. | |
DG4MSQL = | |
(DESCRIPTION = | |
(ADDRESS_LIST = | |
(ADDRESS = (PROTOCOL = TCP)(HOST = wms.ycdata.net)(PORT = 1531)) | |
) | |
(CONNECT_DATA = | |
(SERVER = DEDICATED) | |
(SERVICE_NAME = dg4msql) | |
) | |
) | |
### 安装完毕,在 gateway 相应目录下也有对应的配置样例,如下 | |
cd $ORACLE_HOME/dg4msql/admin | |
ls | |
dg4msql_cvw.sql dg4msql_tx.sql initdg4msql.ora listener.ora.sample tnsnames.ora.sample | |
### 这个文件用于配置连接到 sqlserver | |
more initdg4msql.ora | |
HS_FDS_CONNECT_INFO=[192.168.21.157]:1433//testdb | |
alternate connect format is hostname/serverinstance/databasename | |
HS_FDS_TRACE_LEVEL=OFF | |
HS_FDS_RECOVERY_ACCOUNT=RECOVER | |
HS_FDS_RECOVERY_PWD=RECOVER |
三、测试 gateway
$ lsnrctl start LISTENER_GW | |
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 08-JAN-2016 18:03:03 | |
Copyright (c) 1991, 2014, Oracle. All rights reserved. | |
Starting /u01/app/gateway/12.1/bin/tnslsnr: please wait... | |
TNSLSNR for Linux: Version 12.1.0.2.0 - Production | |
System parameter file is /u01/app/gateway/12.1/network/admin/listener.ora | |
Log messages written to /u01/app/gateway/diag/tnslsnr/wms/listener_gw/alert/log.xml | |
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wms.ycdata.net)(PORT=1531))) | |
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wms.ycdata.net)(PORT=1531))) | |
STATUS of the LISTENER | |
------------------------ | |
Alias LISTENER_GW | |
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production | |
Start Date 08-JAN-2016 18:03:03 | |
Uptime 0 days 0 hr. 0 min. 0 sec --Author : Leshami | |
Trace Level off --Blog : http://blog.csdn.net/leshami | |
Security ON: Local OS Authentication | |
SNMP OFF | |
Listener Parameter File /u01/app/gateway/12.1/network/admin/listener.ora | |
Listener Log File /u01/app/gateway/diag/tnslsnr/wms/listener_gw/alert/log.xml | |
Listening Endpoints Summary... | |
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wms.ycdata.net)(PORT=1531))) | |
Services Summary... | |
Service "dg4msql" has 1 instance(s). | |
Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service... | |
The command completed successfully | |
$ tnsping DG4MSQL | |
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 08-JAN-2016 18:29:51 | |
Copyright (c) 1997, 2014, Oracle. All rights reserved. | |
Used parameter files: | |
/u01/app/gateway/12.1/network/admin/sqlnet.ora | |
Used TNSNAMES adapter to resolve the alias | |
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = wms.ycdata.net)(PORT = 1531))) | |
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dg4msql))) | |
OK (0 msec) | |
$ sqlplus WMS_USER/xxx@WMSSERVER | |
SQL> show user; | |
USER is "WMS_USER" | |
SQL> create public database link mssql connect to robin identified by "xxx" using 'dg4msql'; | |
SQL> select * from tt@dg4msql; | |
select * from tt@dg4msql | |
* | |
ERROR at line 1: | |
ORA-28546: connection initialization failed, probable Net8 admin error | |
ORA-02063: preceding line from DG4MSQL | |
调整 DG4MSQL 配置,增加 (HS=OK) 项 | |
DG4MSQL = | |
(DESCRIPTION = | |
(ADDRESS_LIST = | |
(ADDRESS = (PROTOCOL = TCP)(HOST = wms.ycdata.net)(PORT = 1531)) | |
) | |
(CONNECT_DATA = | |
(SERVER = DEDICATED) | |
(SID = dg4msql) | |
) | |
(HS=OK) | |
) | |
### 再次测试 | |
SQL> select * from tt@dg4msql; | |
id | |
---------- | |
1 |
四、简化管理
由于 Oracle gateway 安装时使用了不同的 Oracle Home,因此在启动 gateway 监听时,需要切换环境变量。因此可以直接将 gateway 下的监听器内容复制到 Oracle Home 下 listener.ora 文件中,同时也复制 DG4MSQL 至 Oracle Home 下的 tnsnames.ora 文件中,省去环境切换的麻烦。
五、更多参考
How to Configure DG4MSQL (Oracle Database Gateway for MS SQL Server) 64bit Unix OS (Linux, Solaris, AIX,HP-UX) post install (Doc ID 562509.1)
ORA-28500 SQLSTATE 8001 When I Select Via DG4MSQL (Doc ID 868672.1)
六、连接过程图(参考其他大湿)
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130291.htm
正文完
星哥玩云-微信公众号
