Oracle透明网关访问SQLServer数据库
针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数据库dblink访问。
好久没做透明网关的配置了,最近有业务需求,这里将部署过程做个记录,希望对有需要的朋友有所帮助。
一、Oracle数据库通过透明网关访问SQLServer数据库环境说明
RHEL6.6 oracle 11.2.0.4
WinServer 2008R2 SQLServer 2008 R2
Oracle Gateway 11.2.0.4 For SQLServer
二、数据访问流程
oracle client 通过dblink ——>tnsname——>listener——>dg4msql——>SQLServer数据库
三、Oracle透明网关(SQLServer)下载
https://updates.oracle.com/Orion/Download/process_form/p13390677_112040_Linux-x86-64_5of7.zip
这里附mos下载地址页面

四、Oracle Gateway for SQLServer安装
(好久没图形界面安装了,一时还真不适应,这里通过xmanager启动图形界面)
RHEL6.6修改/etc/gdm/custom.conf
# GDM configuration storage
[daemon]
[security]
[xdmcp]
Enable= ---------增加此行
[greeter]
[chooser]
[debug] 启动Xmanager - Passive 在linux服务器shell执行
export DISPLAY=xmanger_client_ipaddr:0.0
xhost +
执行命令xclock测试图形界面是否生效
[root@test dbbak]# unzip linux.x64_11gR2_gateways.zip
[root@test dbbak]# chown -R oracle:oinstall gateways
[oracle@test dbbak]$ cd gateways/
[oracle@test gateways]$ ./runInstaller





[oracle@test hs]$ which dg4msql
/U01/app/oracle/product/11.2.0.4/bin/dg4msql
制定下面命令验证是否安装成功
[oracle@test admin]$ dg4msql
Oracle Corporation --- SATURDAY APR 28 2018 12:24:05.691
Heterogeneous Agent Release 11.2.0.4.0 - 64bit Production Built with
Oracle Database Gateway for MSSQL
五、SQLServer数据库创建账号、授权
/* For security reasons the login is created disabled and with a random password. */
/****** Object: Login [dbtest] Script Date: 04/27/2018 15:43:45 ******/
CREATE LOGIN [dbtest] WITH PASSWORD=N'abcd1234', DEFAULT_DATABASE=[mssql_test], DEFAULT_LANGUAGE=[简体中文], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO EXEC sys.sp_addsrvrolemember @loginame = N'dbtest', @rolename = N'sysadmin'
GO EXEC sys.sp_addsrvrolemember @loginame = N'dbtest', @rolename = N'dbcreator'
GO ALTER LOGIN [dbtest] DISABLE
GO
六、Oracle数据库相关配置
(1)透明网关配置
[oracle@test ~]$ cd /U01/app/oracle/product/11.2.0.4/dg4msql/admin
[oracle@test admin]$ cp -rp initdg4msql.ora initmssql.ora
[oracle@test admin]$ vi initmssql.ora
# HS init parameters
HS_FDS_CONNECT_INFO=[10.1.1.2]:1433//mssql_test # alternate connect format is hostname/serverinstance/databasename
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
(2)监听配置
[oracle@test admin]$ vi /U01/app/oracle/product/11.2.0.4/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbsid)
(SID_NAME = dbsid)
(ORACLE_HOME=/U01/app/oracle/product/11.2.0.4)
)
(SID_DESC=
(SID_NAME=mssql)
(ORACLE_HOME=/U01/app/oracle/product/11.2.0.4)
(PROGRAM=dg4msql)
)
) LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))
)
)
重启监听
lsnrctl stop
lsnrctl start
(3)tnsname配置
[oracle@test admin]$ vi /U01/app/oracle/product/11.2.0.4/network/admin/tnsnames.ora
dbsid_mssql =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1 )(PORT = 1521))
)
(CONNECT_DATA =
(SID = mssql)
)
(HS = OK)
) 测试tnsname连接 [oracle@test admin]$ tnsping dbsid_mssql TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 27-APR-2018 15:24:57 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.1)(PORT = 1521))) (CONNECT_DATA = (SID = mssql)) (HS = OK))
OK (0 msec)
七、创建dblink
create PUBLIC DATABASE LINK dblk connect to "dbtest" identified by "abcd1234" using 'dbsid_mssql';
八、通过oracle连接SQLServer数据库执行相关操作
SQL> select * from t1@dblk;
id
----------
10
九、错误信息以及处理方法
(1)错误01(这个错误信息导致我浪费了大半天时间)
错误信息:
SQL> select * from t1@dblk;
select * from t1@dblk
*
ERROR at line 1:
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 DBLK 监听日志:
<msg time='2018-04-28T09:46:21.146+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='' host_id='test'
host_addr='10.1.1.1'>
<txt>28-APR-2018 09:46:21 * (CONNECT_DATA=(SID=mssql)(CID=(PROGRAM=)(HOST=test)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.1)(PORT=10397)) * establish * mssql * 12518
</txt>
</msg>
<msg time='2018-04-28T09:46:21.146+08:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='' host_id='test'
host_addr='10.1.1.1'>
<txt>TNS-12518: TNS:listener could not hand off client connection
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 32: Broken pipe
</txt>
</msg> alter日志:
HS: Unable to establish RPC connection to HS Agent...
HS: ... Agent SID = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.1)(PORT=1521))(CONNECT_DATA=(SID=dgmsql))), NCR error = 65535 Unable to retrieve text of NETWORK/NCR message 65535
错误原因以及解决办法:
由于数据库版本是11.2.0.4,而gateway版本是11.2.0.1,所以导致上述listener到hs的连接失败,更换gatway版本为11.2.0.4后问题解决。
(2)参考资料
https://blog.csdn.net/shiyu1157758655/article/details/74939952
https://blog.csdn.net/sharqueen_wu/article/details/30237371
Oracle透明网关访问SQLServer数据库的更多相关文章
- Oracle透明网关访问MySQL数据库
针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...
- NX二次开发-NX访问SqlServer数据库(增删改查)C#版
版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...
- VS2019项目docker启动且访问SQLSERVER数据库配置
VS2019编译.调试的Blazor纯前台项目,使用控制台启动,去连接纯后台的API项目,使用docker启动,并且通过EFCore访问SQLSERVER数据库,有几个地方需要修改配置: 一.前台连后 ...
- 【Oracle】Oracle透明网关访问MSSQLServer
Oracle 数据库的透明网关 ( transparent gateway )是这样的一个接口:通过它,我们可以 sqlplus 操纵其他数据库,如 MS SQLServer . s ...
- ORACLE透明网关访问SQL Server配置总结
透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...
- C#访问SQLServer数据库访问帮助类
SQLServer数据库访问帮助类 这里有一个Mysql帮助类的使用例子可以参考(大同小异) 写了一个Mysql的例子,SQLServer的差不多,一样的 C#简单三层结构设计UI.BLL.DAL 1 ...
- 外网访问SQLServer数据库holer实现
外网访问内网SQLServer数据库 内网主机上安装了SQLServer数据库,只能在局域网内访问,怎样从公网也能访问本地SQLServer数据库? 本文将介绍使用holer实现的具体步骤. 1. 准 ...
- .net core2.0通过entityframework访问Sqlserver数据库
.net core经历2.0版本之后,已经非常稳定,完全可以进行企业级开发并跨平台部署到几乎任何服务器.个人测试效率是.net core是.net framework效率的3倍.其他语言没有测试,等测 ...
- 自己写的访问SqlServer数据库的通用DAL层
如题,直接贴代码. 首先是DataTable转List<T>的方法,这个方法通用性极强. #region Table转List /// <summary> /// Table转 ...
随机推荐
- JSP 插入到数据库的数据出现 “SQLServerException: 将截断字符串或二进制数据” 错误解决方案
最近在编写一个小型基于的jsp系统开发.掌握数据库一直感觉还不错.但是今天就出现了一个问题困扰我大半天.后来本来准备睡觉,但是觉得今天不解决这个问题恐怕晚上是“彻夜难眠啊”!!于是打开电脑,又开始捣腾 ...
- CSS3 选择器用法小结
表单选择器: /*:enabled 可用的 :disabled 被禁用的 :focus 获取了焦点的 多用在表单元素上*/ input:enabled {...} input:disabled {.. ...
- Coroutine及其实现
线程是内核对外提供的服务,应用程序可以通过系统调用让内核启动线程,由内核来负责线程调度和切换.线程在等待IO操作时线程变为unrunnable状态会触发上下文切换.现代操作系统一般都采用抢占式调度,上 ...
- MySQL字符存储:charset-unicode-sets
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html 10.10.1 Unicode Character Sets MyS ...
- python基础_类型_tuple
#tuple 元祖,这个没什么特别的,和list差不多,不能删除,不能增加元素,其他功能差不多 #元祖用圆括号扩起来,逗号分隔 a = ('a','b','c') #这玩意一般会用来排除重复,还是很好 ...
- ARC下block使用情况
ARC与MRC的block有着一些区别,笔记整理ARC的block,仅仅是自己参考的笔记,详情请参考 http://www.cnbluebox.com/?p=255 在开始之前,请新建一个Model类 ...
- [翻译] CBStoreHouseRefreshControl
CBStoreHouseRefreshControl What is it? A fully customizable pull-to-refresh control for iOS inspired ...
- 拟牛顿 DFP matlab
function sevnn x=[1,0]'; [x,val]=dfp('fun','gfun',x) end function f=fun(x) f=100*(x(1)^2-x(2))^2+(x( ...
- Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
在下面这篇博文里,我给各位博客们,分享了创建HBase表,但这远不止打好基础. HBase编程 API入门系列之create(管理端而言)(8) 在关系型数据库里,表的高表和宽表是不存在的.在如HBa ...
- Spring Boot Mybatis-Plus
Mybatis-Plus 是对 Mybatis-Plus 的一些扩充. 在 Spring Boot 中进行集成的时候其实基本上和 mybatis 是一致的. 在你的配置文件中.配置 你的 entity ...