暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE要如何访问MSSQL中的数据?

DbaNotes 2021-04-21
1525

实验操作机——




本实验安装的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限制),再按照之前一模一样的步骤安装、配置,最终测试通过。

文章转载自DbaNotes,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论