使用 Oracle Gateway 连接 SQLServer 数据库

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

使用 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 回帖 • 341 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    22 引用 • 214 回帖
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 3 关注
  • RESTful

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

    30 引用 • 114 回帖 • 6 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 760 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 626 关注
  • 京东

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

    14 引用 • 102 回帖 • 318 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 85 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 503 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 75 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • 996
    13 引用 • 200 回帖 • 2 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖 • 2 关注
  • Sym

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

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

    524 引用 • 4601 回帖 • 704 关注
  • 知乎

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

    10 引用 • 66 回帖 • 1 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 368 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 1 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 81 关注
  • 外包

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

    26 引用 • 233 回帖 • 3 关注
  • CodeMirror
    2 引用 • 17 回帖 • 161 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 642 关注