使用 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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于