使用 Oracle Gateway 连接 SQLServer 数据库

本贴最后更新于 2520 天前,其中的信息可能已经沧海桑田

使用 Oracle 数据库网关可以解决不同数据库的访问需求。 在一个异构的分布式环境中,网关可以在 Oracle 应用程序中与任何数量的非 Oracle 数据库集成。 如 DB2,SQL Server 和 Excel,事务管理器如 CICS 和消息队列系统(如 WebSphere MQ)。

以下是从 Oracle 官方文档里翻译出来的句子:

Oracle 数据库网关提供了与非 Oracle 的透明集成的能力来自 Oracle 环境的系统。这种透明度消除了需要为应用程序开发人员定制他们的应用程序来从不同的非 Oracle 系统访问数据
,从而减少开发工作量和增加应用程序的移动性。应用程序可以使用一致的开发用于 Oracle 和非 Oracle 系统的 Oracle 接口。为了实现不同系统之间的平滑互操作性,SQL 翻译和数据
字典翻译和数据类型翻译是必需的,即使非 Oracle 系统基于 SQL 标准。网关有能力翻译一个系统的方言到另一个。Oracle 为许多系统定制了网关,包括 DB2,Sybase,Informix,SQL Server,IMS,VSAM,Adabas 等等。这些是专门为目标编码的非 Oracle 系统。他们提供了一个优化的解决方案,也是端到端的认证。Oracle 还提供 ODBC 数据库网关。这是一个通用的解决方案,使用一个 ODBC 驱动程序来访问任何 ODBC 兼容的非 Oracle 系统。它解决了需要对许多数据存储进行数据访问,而 Oracle 没有针对这些数据存储量身定做解。用于 ODBC 的 Oracle 数据库网关使得集成成为可能低端数据存储,如 MySQL,Foxpro,Access,dBase 和非关系型像 Excel 这样的目标。

Architecture
Oracle 网关技术由两部分组成:
具有通用性的组件技术连接到非 Oracle 系统,这是所有非 Oracle 的共同点系统,称为异构服务(HS)和一个目标组件
具体的叫做代理人。异构服务与代理结合在一起能够从 Oracle 环境中透明地访问非 Oracle 系统。
Gateway technology is composed of two parts: a component that has the generic technology to connect to a non-Oracle system, which is common to all the nonOracle systems, called Heterogeneous Services (HS) and a component that is target specific, called an agent. Heterogeneous Services in conjunction with the agent enables transparent access to non-Oracle systems from an Oracle environment. Heterogeneous Services Technology Heterogeneous Services provides the generic technology for connecting to nonOracle systems and is the processing power for Gateways. As an integrated component of the database, Heterogeneous Services can exploit features of the database, such as the powerful SQL parsing and distributed optimization capabilities. Heterogeneous Services extend the Oracle SQL engine to recognize the SQL and procedural capabilities of the remote non-Oracle system and the mappings required to obtain necessary data dictionary information. It provides two types of translations: the ability to translate Oracle SQL into the proper dialect of the non-Oracle system as well as data dictionary translations that displays the metadata of the non-Oracle system in the local format. For situations where no translations are available, native SQL can be issued to the non-Oracle system using the pass-through feature of Heterogeneous Services. Heterogeneous Services also maintains the transaction coordination between Oracle and the remote non-Oracle system, such as providing the two-phase commit protocol to ensure distributed transaction integrity, even for non-Oracle systems that do not natively support two-phase commit. Agent The capabilities, SQL mappings, datatype conversions, and interface to the remote non-Oracle system are contained in the agent. The agent interacts with Heterogeneous Services to provide the transparent connectivity between Oracle and non-Oracle systems.

简单点理解

大家知道如果需要从 SQLServer 数据库服务器连接访问 Oracle 数据库中的数据表,可以在 SQLServer 数据库创建 Linked Server,使用专门用于连接 Oracle 的 Provider 驱动程序,建立与 Oracle 服务器的连接。在 SQLServre 中即可从远程 Oracle 数据表中获取数据。

相反的需求,如果需要在 Oracle 数据库里访问远程 SQLServer 数据库表,应该怎么实现呢?
此时就需要用到 Oracle Gateway 软件。下面链接是 Oracle 官方文档地址:
http://www.oracle.com/technetwork/database/gateways/index.html

简单的配置 Oracle Gateway for SQLServer 需要如下几部:

1.Configure the Gateway Initialization Parameter File

为 Gateway 选择一个标识,例如默认标识 dg4msql;
客户化参数文件 $ORACLE_HOME\dg4msql\admin\initdg4msql.ora

HS_FDS_ENCRYPT_SESSION=SSL
HS_FDS_VALIDATE_SERVER_CERT=0
HS_FDS_CONNECT_STRING="ValidateServerCertificate=0"
#HS_FDS_TRACE_LEVEL=DEBUG
HS_FDS_CONNECT_INFO=[sqlserver_hostid]:1433
#HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
HS_RPC_FETCH_REBLOCKING=OFF
HS_FDS_FETCH_ROWS=1

HS_FDS_ENCRYPTSESSION=SSL 代表开启与远程服务器通过 SSL 加密通讯
HS_FDS_VALIDATE_SERVER_CERT=0 与 HS_FDS_CONNECTSTRING="ValidateServerCertificate=0"等价
代表客户端不需验证服务器证书有效性
HS_FDS_CONNECTINFO 后面即是网关需要连接到哪台 SQLServer 服务器信息,可以具体到数据库名,如果 SQLServer 数据库用户配置了默认 database,此处也可以不填写具体数据库,访问是对应数据库用户所属的默认数据库。
**注意:生产环境一定要把这句注释掉 HS_FDS_TRACELEVEL=DEBUG,或者把 DEBUG 等级调高。否则数据库服务器磁盘空间很快就会被网关的 trc 文件给占满!**

2.Configure Oracle Net for the Gateway

  • Configure Oracle Net Listener for the Gateway
    $ORACLE_HOME\network\admin\listener.ora 中增加监听配置信息
    *SID_LIST_LISTENER=
    (SID_LIST=
    (SID_DESC=
    (SID_NAME=gateway_sid)
    (ORACLE_HOME=oracle_home_directory)
    (PROGRAM=dg4msql)
    )
    )*
    gateway_sid 与之前定义的必须保持一致,例如默认 sid:dg4msql

  • Stop and Start the Oracle Net Listener for the Gateway

3.Configure the Oracle Database for Gateway Access

配置 $ORACLE_HOME\network\admin\nsnames.ora 文件
*connect_descriptor=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=host_name)
(PORT=port_number)
)
(CONNECT_DATA=
(SID=gateway_sid))
(HS=OK))

4.Create Database Links

在 Oracle 数据库里创建 dblink

SQL> CREATE PUBLIC DATABASE LINK dblink CONNECT TO
2 "user" IDENTIFIED BY "password" USING 'tns_name_entry';

之后便能在 Oracle 中使用如下 SQL 访问 SQLServer 数据表

SQL> SELECT * FROM TABLE_NAME@dblink;

*注意:如果 gateway 和 Oracle 同装在一台 Server 上,使用相同的 ORACLEHOME,那么 gateway 的版本必须与 Oracle 服务器版本保持一致才行。另外,SQLServer 服务器上的 database user 需要授予足够访问权限。

参考:https://docs.oracle.com/cd/B28359_01/gateways.111/b31043/toc.htm

  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    105 引用 • 127 回帖 • 381 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 9 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 49 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 4 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 26 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 411 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 659 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 3 关注
  • abitmean

    有点意思就行了

    30 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 699 关注
  • gRpc
    11 引用 • 9 回帖 • 74 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 168 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 52 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 61 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 113 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 212 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖