实验操作机——
本实验安装的ORACLE database gateway版本为11.2.0.4(最开始在ORACLE官网页面下载的初始版本11.2.0.1,后面证实小版本不一致有兼容性问题,之后会说到)。
一、安装部分:
通过Matrix查看database gateway与各产品的相性(官网下载):
gateway安装文档URL:
http://docs.oracle.com/apps/search/search.jsp?q=database%20gateway&category=database&product=e11882-01
注:由红线划出的是centos 6.5和win两个平台下的安装步骤(取决于你想把软件装在哪个OS平台上,至于是装在源端还是目标端还是第三台服务器,其实都可以):
gateway软件下载URL(注意,这是官网页面的初始版本,由于我的实验ORACLE DB补丁已经打到了patchset 4,所以这个版本并不适用,需要到metalink下载11.2.0.4版本的gateway;但如果你的实验环境就是11.2.0.1的数据库版本,那用这个初始版本的gateway即可):
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html
安装界面截图:
至此database gateway安装完毕。
二、配置部分:
1. 在SQL SERVER上创建新用户(用户名:RECOVER 密码:RECOVER;用于分布式事务,ORACLE通过连接MSSQL的该用户以确认分布式事务的状态),并使其只具有备份和恢复的权限:
2. 确保dba_2pc_pending(两阶段事务提交)数据字典表的记录数为0,说明后台进程RECO已能自动回滚可疑事务。
3. 查看gateway的初始化参数文件(database gateway的SID默认为dg4msql),确保所连接的SQL SERVER的地址及端口都正确:
4. 检查数据库服务器中是否已启有监听器:
注:由于按ORACLE官方建议执行了权责分离,ASM + RESTART 安装配置在grid用户下(因此默认监听器启在grid用户下监听1521端口);数据库软件安装配置在oracle用户下,而database gateway也安装于此,并使用同一个ORACLE_HOME。
5. 在oracle用户下创建一个单独的监听器,专门用来监听database gateway请求(使用1522端口):
vim u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Ora-Single.example.com)(PORT = 1522))
)
)
SID_LIST_LISTENER =
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4msql)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM=dg4msql)
)
)
6. 启动新的监听器,并检查相应的端口是否已被占用:
lsnrctl start:
7. 配置tnsnames.ora:
mssql_test1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = Ora-Single.example.com)(PORT = 1522))
)
(CONNECT_DATA =
(SID = dg4msql)
)
(HS = OK)
)
8. 创建公有同义词:
--drop public database link TO_MSSQL;
CREATE PUBLIC DATABASE LINK to_mssql CONNECT TO "sa" IDENTIFIED BY "1qaz@WSX" USING 'mssql_test1';
9. 测试:
select * from dbo.t1@to_mssql
三、附录部分:
在客户现场配置过程中碰到的报错如下——
ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from TO_MSSQL
查询oracle support中的知识库,找到类似的问题,分别为DOC ID:1416005.1、1084488.1
针对DOC ID:1416005.1中的建议,在确认dba_2pc_pending(两阶段事务提交)数据字典表的记录数为0的前提下,仍无法解决故障。
针对DOC ID:1084488.1中的建议,需要为database gateway单独创建一个监听器,因为本来就已经这么做了,所以该文档也无法解决故障。
最后从头来过,从matrix兼容性文档检查,看是否存在软件版本不兼容发情况,结果发现了一个细节如下(redhat 6版本,database gateway至少应该安装11.2.0.3以上(含)的版本):
从oracle support(需license)上下载最新的11.2.0.4版本的database gateway(之前是在www.oracle.com上下载的初始版本-11.2.0.1,没有license限制),再按照之前一模一样的步骤安装、配置,最终测试通过。