oracle 透明网关(oracle database gateway)介绍

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 安装过程文档:http://download.csdn.net/detail/changyanmanman/7737563在企业里,通常可能有多种数据源,并且他们是异构的。

安装过程文档:http://download.csdn.net/detail/changyanmanman/7737563


在企业里,通常可能有多种数据源,并且他们是异构的。所谓的异构就是说他们是不同的产品,例如: Oracle Database, MS SQL Server, IBM DB2, Sybase ASE, MySQL, Postgre SQL, Excel, XML, Txt或者CSV等用于存放数据的产品或者文件。

 

那么假设我们需要这些异构的数据源同Oracle Database做交互,那么我们应该如何做呢?首先来看看Oracle 数据库如何同异构数据源作数据交互。


上图是一张Oracle 异构连接处理的架构图,其中我们可以看到主要的非数据源模块包括有  HS(Heterogeneous Service), Agent.。

那么,数据源模块就是这个remote Database咯(远程数据库),比如,它是微软的Sqlserver ,那就是异构的数据源咯。


可以看到,Oracle是不能直接同这些异构数据源作交互.(这句话有点废话,因为基本上所有的异构产品都是这样的).  Oracle是需要通过Heterogeneous Services协同Agent才能和异构数据源作数据交互。

 

 

异构服务组件(Heterogeneous Services Component)

HS是Oracle Database的一个组件,它用于同Non-Oracle System作数据交互。

HS的作用:它告诉Agent它要同异构数据源作交互,并且让他知道,它要什么数据,什么样的数据,如何处理数据(如类型,方法等)。

 

HS主要包含两个模块:

A.        事务服务(Transaction Service)

Transaction Service使异构数据源尽可能的集成进Oracle数据库服务器里的 事务和会话中。 所以当你访问一个异构数据源的时候,你使用Oracle 用户当前的会话来通过数据库连接(Database Link)在异构数据源建立相应的认证会话(访问异构数据源的认证信息由用户提供或者Database Link已经指定)。同样,当用户关闭了当前Oracle的Session(会话),那么异构数据源上的相应会话也随之关闭。 Oracle 另外支持Oracle分布式的访问异构数据源的事务。

 

B.        结构化查询语言服务服务(SQL Service)

SQL Service用于处理所有的SQL相关的操作,包括有:

a)         使Oracle内部SQL相关的调用 映射成 HS 驱动的API. 这些会一次被驱动映射到异构数据源的客户端API.

b)         翻译SQL语句。把Oracle的SQL语句翻译成相关的异构数据源的SQL语句。

c)         翻译通过引用Oracle data dictionary的相关表的查询语句,使之变成可以从异构数据源的data dictionary里获取所需信息的查询语句

d)         转换异构数据源和Oracle数据库之间的数据类型

e)         弥补在异构数据源中不存在的函数方法等,使之变成多条产需语句来获取相应的结果。

        

HS的组件里有很多常见的编码,并且它被配置用于同很多不同的异构数据源一起协同工作。每个gateway都有这些配置信息,并且存在在相应的驱动模块中(Driver module). 这些信息会在HS和Gateway/Agent的连接建立后马上被上传到Oracle服务器。这些配置信息包括有:

a)         Data Dictionary Translation Views

数据字典转换视图是以视图的方式存在于异构数据源的数据字典表里。它帮助HS像引用Oracle的Data dictionary表一样来饮用异构数据源的数据字典。

b)         Heterogeneous Services Initialization Parameters

HS初始化参数主要提供两个方面的功能:

1)         提供一个良好的调节gateway的手段,使gateway和HS组件的性能和内存的使用得到优化。

2)         配置异构数据源的信息. 例如配置了多少个异构数据源,它们都运行了什么语言,都有哪些属性。

相关当前会话的这些参数的设置信息,我们可以通过查询表V$HS_PARAMETER来得到。可以在gateway的初始化文件里进行设置更改。

c)         Capabilities

功能性就是告诉HS异构数据源中有哪些类型的SQL语句不支持,如何转换映射这些SQL表达式到异构数据源里。

 

HS Data Dictionary

上面我们提到,配置信息。配置信息会在HS和Agent建立连接后,马上被Agent上传到HS 组件。那么上传后,它们都被存储与HS Data Dictionary表中。并且直到Agent的变化,这些信息才会被相应的覆盖,修改。

 

下面我们讲解下这些Data Dictionary的相关信息:

使用HS,可以从同一个Oracle数据库访问多个异构数据源,如下图所示:


两个Agent都会把配置信息上传上去,各自存在到HS Data Dictionary table中.

那么这些信息是怎么归纳起来的?HS把这些信息按两个层次来分: 

a)         Class

Class 是按照相关类型的产品来分。例如Sybase database systems, SQL Server databases system各分到一类里面。

b)         Instance

实例是基于class来定义的。例如SQL Server数据库这个class里面有多个实例。

 

所以一个class被多个特定的instance所共享。所以假设oracle数据库要访问5个SQL Server的实例和2个MySQL的实例,那么Oracle数据库就需要两个class定义来访问他们。一个用于定义SQL Server,一个用于定义MySQL.同样,在这两个class中分别定义了5个和2个instance的定义。 同时这里需要注意,instance 层的容量和数据字典的信息都是会话信息,所以它们不能存在在oracle数据库中的HS数据字典中。但是,instance的初始化参数可以存在在数据库中。在HS的数据字典视图(Data Dictionary views)中都包含了一下信息:

n  被上传到Oracle data dictionary的instances和classes的名称

n  功能性,包括为每个class和instance定义的SQL 事务

n  为每个class和instance定义的数据字典转化关系

n  为每个class和instance定义的初始化参数

这些视图又主要被分成三大类:

n  常规视图

n  Transaction Service 视图

n  SQL Service 视图

 

 

 

Agent Component

Agent Component包括:

A.        Agent Generic Code

Agent Generic Code用于在异构数据源上执行数据操作或者检索.它负责接收命令,执行命令,获取执行结果。

B.        Driver

Driver是Agent Generic Code和命令执行地交互的桥梁。没有它,Agent Generic Code就不能和异构数据源交互。

 

Agent Generic Code好比一个要到河对岸办事的人,Driver就好比到对岸的交通工具,例如 桥。

 

从图1中,我们可能会想到Agent是否可以单独放在某个环境中?当然是可以的,

a)         它可以和异构数据源安装在同一台计算机上

b)         它可以同Oracle安装在同一台计算机上

c)         它可以同Oracle和异构数据源都分离开而安装在单独的一台计算机上

 

Oracle 为Agent提供了很多类型,因为不同的数据库厂商所使用的标准不一样,这些Agent通过Oracle产品主要封装在以下两种产品中:

A.        Oracle Database

在Oracle Database中,默认安装的是ODBC Agent.用于同当前系统的ODBC来做交互。从而由系统来负责Driver. 相应的Agent Generic Code是dg4odbc.exe ,这个程序可以在ORACLE_HOME/bin目录下找到.

B.        Oracle Database Gateways

由Oracle Database Gateways产品来选择性的安装针对于不同数据库产品的Agent(Agent Generic Code, Driver).所以Driver也和Oracle Database Gateways安装的时候一起安装。例如,你安装了Gateway for MS SQL Server的组件,那么你可以在ORACLE_HOME/bin文件下找到Agent Generic Code : dg4msql.exe,在ORACLE_HOME/dg4msql文件夹里找到相关的Agent的Driver,在该文件下同样存放在一些配置相关的dg4msql的配置文件。


我们来整体看一下HS和Gateway是如何系统工作的:


(1)     客户端从Oracle Database请求数据。用户发送的是Oracle标准的SQL语句,在Oracle数据库上创建了一个Session。

(2)     HS和Gateway协同工作,HS把Oracle的SQL语句转换成non-Oracle数据库可以正确运行的语句。

a)         HS和Gateway建立连接

b)         HS获取相关的non-Oracle System的配置信息,如它是什么类型的数据库产品(SQL Server或者MySql , Sybase)等等属性

c)         HS通过Data Dictionary View来识别该non-Oracle system的功能特征等各项属性,相应的转化Oracle标准的SQL语句成non-Oracle system兼容的语句

(3)     Oracle数据库把转换后的SQL语句通过Oracle Net发送到Gateway。

(4)     Gateway使用相关的用户名密码登陆到non-Oracle system,建立连接,执行SQL语句。

a)         HS通过Gateway与Non-Oracle System建立连接,创建临时的Database Link.

b)         Gateway使用Database Link指定的用户名及其密码登陆non-Oracle system

c)         Gateway登陆成功则创建Gateway与non-Oracle System之间的会话,并且Database Link Open

d)         Gateway把SQL语句通过建立的会话发送给non-oracle system执行

(5)     Non-Oracle System返回运行SQL语句后的结果给Gateway。

(6)     Gateway翻译/格式化返回的结果使其能被Oracle数据库的所兼容。

(7)     把Gateway执行后的结果通过Oracle Net Service返回给Oracle数据库。

(8)     Oracle数据库服务器通过Oracle Net把结果返回给客户端。并且数据库的database link一直打开这,直到gateway的会话结束或者database link显式的关闭它。

 

在上述步骤中,第(2)步,Gateway通过本地的配置来调用相关的HS服务程序和驱动与异构数据源作交互。例如:

a)         在配置initXXX.ora的时候,里面填写的主要是异构数据源的Address信息,如 主机名称/地址,端口,实例名称,数据库等等信息。

b)         在配置listener.ora的时候,里面就记录了需要使用什么Agent Generic Code程序,需要通过什么使用到驱动。比如访问MS SQL Server,需要用到的Agent Generic Code程序是dg4msql,  驱动在Oracle_Gateway_Home\dg4msql\driver\lib文件夹下。(如果Gateway安装在Windows下,默认不需要指定Driver的路径)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
30 1
Gateway服务网关
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
127 5
|
4月前
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway
|
4月前
|
安全 API
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
|
4月前
|
存储 容器
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
|
5月前
|
JSON 前端开发 Java
SpringCloud怎么搭建GateWay网关&统一登录模块
本文来分享一下,最近我在自己的项目中实现的认证服务,目前比较简单,就是可以提供一个公共的服务,专门来处理登录请求,然后我还在API网关处实现了登录拦截的效果,因为在一个博客系统中,有一些地址是可以不登录的,比方说首页;也有一些是必须登录的,比如发布文章、评论等。所以,在网关处可以支持自定义一些不需要登录的地址,一些需要登录的地址,也可以在网关处进行校验,如果未登录,可以返回JSON格式的出参,前端可以进行相关处理,比如跳转到登录页面等。
130 4
|
4月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
本节针对微服务中另一重要组件:网关 进行了实战性演练,网关作为分布式架构中的重要中间件,不仅承担着路由分发(重点关注Path规则配置),同时可根据自身负载均衡策略,对多个注册服务实例进行均衡调用。本节我们借助GateWay实现的网关只是技术实现的方案之一,后续大家可能会接触像:Zuul、Kong等,其实现细节或有差异,但整体目标是一致的。
|
5月前
|
Kubernetes 监控 Java
有了k8s还需要gateway网关,nacos配置中心吗
在Kubernetes环境中,服务网关(如Spring Cloud Gateway)和Nacos配置中心补充了k8s的不足。Nacos提供灵活服务路由和动态配置更新,超越k8s基础服务发现。它还支持更复杂的配置管理和实时推送,以及环境隔离和版本控制。作为服务注册中心,Nacos增强k8s服务治理能力,保持技术一致性,并提供额外的安全层及监控功能。
268 0
|
5月前
|
网络协议 应用服务中间件 网络安全
[已解决]504 Gateway Time-out 网关超时
[已解决]504 Gateway Time-out 网关超时
238 0
|
6月前
|
Java API 开发者
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
418 0

推荐镜像

更多