使用 Oracle Gateway 连接 SQLServer 数据库

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

使用 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 后全球第二大软件公司。

    107 引用 • 127 回帖 • 370 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    407 引用 • 3574 回帖
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    85 引用 • 139 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 790 关注
  • OAuth

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

    36 引用 • 103 回帖 • 16 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    110 引用 • 54 回帖 • 5 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 24 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 622 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 158 关注
  • 分享

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

    247 引用 • 1793 回帖 • 1 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 221 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 535 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 5 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    728 引用 • 1275 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 410 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8500 引用 • 38746 回帖 • 153 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖 • 2 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 226 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1436 引用 • 10056 回帖 • 489 关注
  • 外包

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

    26 引用 • 232 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 10 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 8 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 727 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • 导航

    各种网址链接、内容导航。

    42 引用 • 175 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 2 关注
  • CSDN

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

    14 引用 • 155 回帖 • 1 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 352 关注