Oracle Database Transparent Gateway 介绍
通用连接与透明网关
Oracle Heterogeneous Connectivity Process Architecture
Oracle在解决访问异构数据库对象时提供了同步与异步的解决方案,其中通用连接(Generic Connectivity)与透明网关(Transparent Gateway)是同步解决方案的两种,其中通用连接又分为ODBC连接和OLE DB连接两种。Heterogeneous Services(HS)是同步方案中数据库的一个通用组件,用来同Heterogeneous Services Agent建立连接。Agent Generic Code用于在异构数据源上执行数据操作或者检索,负责接收命令,执行命令,获取执行结果。Driver是Agent Generic Code和命令执行地交互的桥梁,没有它,Agent Generic Code就不能和异构数据源交互。Remote Database就是要访问的远程异构数据源。Oracle 为Agent提供了很多类型,因为不同的数据库厂商所使用的标准不一样,这些Agent主要封装在Oracle Database和Oracle Database Gateways两种产品中,在Oracle Database中,默认安装的是ODBC Agent,用于同当前系统的ODBC来做交互,即为通用连接。由系统来负责Driver, 相应的Agent Generic Code是dg4odbc,这个程序可以在ORACLE_HOME/bin目录下找到;在Oracle Database Gateways中由Database Gateways产品来选择性的安装针对于不同数据库产品的Agent(Agent Generic Code, Driver),所以Driver也和Oracle Database Gateways安装的时候一起安装。例如安装了Gateway for MS SQL Server的组件,那么你可以在ORACLE_HOME/bin文件下找到Agent Generic Code 的可执行程序dg4msql, 在ORACLE_HOME/dg4msql文件夹里找到相关的Agent的Driver,在该文件下同样存放在一些配置相关的dg4msql的配置文件。
透明网关与HS协同工作流程
Gateway Process Flow
透明网关是Oracle推荐使用的一种访问异构数据库数据的方案,通过它可以操纵其他数据库,如MS SQL Server,DB2, Sybase ,Informix 等,实现异构数据库间的通信,如同MS SQL Server实现异构服务的Linked Server技术,它也是Oracle数据仓库和数据迁移中的一个重要组成部分。Oracle从Transparent Gateway 10g开始发行了Linux版, 透明网关服务器既可以与Oracle Database或SQL Server Database在同一台主机上,也可以是独立的一台主机。
HS和Gateway协同工作过程大致如下
(1) 客户端从Oracle Database请求数据。用户发送的是Oracle标准的SQL语句,在Oracle数据库上创建了一个Session;
(2) HS和Gateway协同工作,Gateway通过本地的配置来调用相关的HS服务程序和驱动与异构数据源作交互。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显式的关闭它。
企业内部异构数据源的透明互访具有数据资源共享、保护已有投资、屏蔽异构系统内部处理细节等重要意义。Oracle的TG技术具有技术先进、运行稳定,配置简单等优点,通过TG技术,可通过Oracle存储过程等实现对非Oracle系统的透明分布式操作,最大限度地实现企业内部异构数据源的资源共享。
安装Oracle Gateway 11g
这里我们安装Oracle Gateway 11g for SQL Server & Informix,通过Oracle Gateway Server来操作SQL Server和Informix DB中的数据库对象。
安装Oracle Gateway 11g的配置要求及注意问题
安装Oracle Database Gateway for SQL Server&Informix的硬件配置要求
Disk space for Oracle home | >800 M |
Disk space for system drive | >3.1 M |
Temporary disk space | >125 M |
Physical Memory | >512 M |
Processor | >550 MHz |
其中Physical Memory大于512M 是Oracle推荐使用的,这取决于SQL语句的处理进度,打开的游标个数和用户查询table的字段个数的多少等因素。
注意:
1.在Windows下安装Gateway 11g后,会在“服务”列表中看到Gateway Server的监听进程(OracleOraGtw11g_home1TNSListener),该服务是开机自动启动的,如果关闭此服务,Oracle与异构数据库间的通信将中断;
2.Transparent Gateway是向前兼容的,如Transparent Gateway 11g可以兼容Oracle Database 10g;
3.当选择在Oracle Database Server上安装Gateway时,应注意ORACLE_HOME的选择,如果Database与Gateway是同一版本,可以将Gateway的ORACLE_HOME与Database的ORACLE_HOME选择为同一路径,反之不能相同。
安装Oracle Gateway 11g for SQL Server&Informix步骤
这里我们选择一台独立的机器(Win 2003 SP2)安装Oracle Gateway 11g
首先下载Oracle Gateway 11g Windows版,这里提供几个下载链接
Microsoft Windows (32 bit)
Microsoft Windows (64 bit)
Linux x86 (32 bit)
Linux x86-64 (64 bit)
解压下载后的安装包,得到gateways文件夹,双击可执行程序setup.exe开始安装
点击下一步开始安装
选择Gateway的安装名称及安装路径(即ORACLE_HOME),其中ORACLE_HOME默认选择在最后一个磁盘,点击下一步选择要安装的产品
这里我们选择Oracle Database Gateway for Informix & for MS SQL Server,点击下一步
输入Informix DB的配置信息,这里也可以不输入,在安装完成后到%ORACLE_HOME%dg4ifmx\admin下编辑initdg4ifmx.ora文件
输入MS SQL Server DB的配置信息,这里也可以不输入,在安装完成后到%ORACLE_HOME% \dg4msql\admin下编辑initdg4msql.ora文件
查看设置信息无误后,单击安装按钮,开始安装
显示安装进度,可以看到安装log信息的存放位置,可以到相应的路径下查看
Oracle Gateway实例安装完成会自动弹出监听配置信息
点击下一步开始配置监听
定义监听的名字,这里用默认的名字即可
这里我们选择默认的1521作为监听端口,注意:如果是在Oracle DB Server上配置监听,应选择与Oracle DB Server的监听端口不同的端口
点击完成退出监听配置
点击退出,完成Oracle Database Gateways的安装
Oracle Gateway Server配置文件设定及测试
Oracle Gateway Server for SQL Server例程配置档设定
Gateway Server for SQL Server例程配置文件的默认名字为initdg4msql.ora,可以手工去修改这个文件的名字,但格式要求为initXXX.ora,该文件存放在%ORACLE_HOME%\dg4msql\admin路径下,编辑initdg4msql.ora可以看到如下内容
HS_FDS_CONNECT_INFO=10.192.28.26:1433//cia
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
参数HS_FDS_CONNECT_INFO的格式为
HS_FDS_CONNECT_INFO=host_name:port/[instance_name][/database_name],
当SQL Server使用默认端口1433时,可以省略端口号,否则应加上对应的端口
参数HS_FDS_TRACE_LEVEL的默认值为OFF,此参数有三个可选值:OFF,ON,DEBUG
每个值的含义如下
OFF --disables the tracing of error messages.
ON --enables the tracing of error messages that occur when you encounter problems. The results are written by default to a gateway log file in LOG directory where the gateway is installed.
DEBUG --enables the tracing of detailed error messages that can be used for debugging.
参数HS_FDS_RECOVERY_ACCOUNT=RECOVER和HS_FDS_RECOVERY_PWD=RECOVER是搭配使用的
HS_FDS_RECOVERY_ACCOUNT to the user name of the SQL Server user account you set up for recovery.
HS_FDS_RECOVERY_PWD to the password of the SQL Server user account you set up for recovery.
Specifies the name of the recovery account used for the commit-confirm transaction model. An account with user name and password must be set up at the non-Oracle system.
The name of the recovery account is case sensitive.
Oracle Gateway 11g Server for Informix例程配置档设定
Gateway Server for Informix例程配置的名字档默认为initdg4ifmx.ora,可以手工去修改这个文件的名字,但格式要求为initXXX.ora,该文件存放在%ORACLE_HOME%\dg4ifmx\admin路径下,编辑initdg4ifmx.ora可以看到如下内容
HS_FDS_CONNECT_INFO=[10.192.29.47]:9047/on_tcp47/ds
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
参数HS_FDS_CONNECT_INFO的格式为
HS_FDS_CONNECT_INFO=host_name:port_number/server_name/database_name,
参数HS_FDS_TRACE_LEVEL,HS_FDS_RECOVERY_ACCOUNT和HS_FDS_RECOVERY_PWD的含义参照“Oracle Gateway 11g Server for SQL Server例程配置档设定”中对此三个参数的描述
Oracle Gateway 11g Server监听程序配置文件设定
Oracle Gateway 11g Server监听程序配置文件listener.ora默认存放%ORACLE_HOME%\NETWORK\ADMIN路径下,修改listener.ora文件,增加以下内容
LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = dg4msql)
(ORACLE_HOME = E:\product\11.2.0\tg_1)
(PROGRAM = dg4msql)
)
(SID_DESC =
(SID_NAME = dg4ifmx)
(ORACLE_HOME = E:\product\11.2.0\tg_1)
(PROGRAM = dg4ifmx)
)
)
注意:
1. E:\product\11.2.0\tg_1为安装Oracle Gateway 11g Server时指定的ORACLE_HOME路径
2. SID_NAME必须与Gateway Server for SQL Server和Oracle Gateway Server for Informix程序配置文件的名字一致。如程序配置文件的名字为initdg4msql.ora和 initdg4ifmx.ora,这里的SID_NAME必须写成dg4msql和dg4ifmx,即为initXXX.ora中”XXX”的名字
3. PROGRAM = dg4msql和PROGRAM = dg4ifmx中的dg4msql,dg4ifmx为可执行程序名,该程序在%ORACLE_HOME%\BIN%下面可以找到。
4. 编辑完监听配置文件后,将监听重启,所做修改才能生效
创建DB LINK并测试连接
(1).编辑Oracle Database Server的tnsnames.ora文件,增加如下连接方式
sqlserver =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=10.192.29.200)(PORT=1521))
(CONNECT_DATA=(SID=dg4msql))
(HS=OK)
)
informix =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=10.192.29.200)(PORT=1521))
(CONNECT_DATA=(SID=dg4ifmx))
(HS=OK)
)
其中HOST=10.192.29.200是Oracle Gateway Server主机的IP,SID=dg4msql和SID=dg4ifmx分别为Oracle Gateway Server for SQL Server&for Informix对应的例程名。
(2) 创建DB LINKE
CREATE DATABASE LINK testsqlsvr
CONNECT TO "sa"
IDENTIFIED BY “password”
USING 'sqlserver';
CREATE DATABASE LINK testinfmix
CONNECT TO ODBCKL
IDENTIFIED BY “password”
USING 'informix';
(3) 查询测试
配置Oracle Database Gateway过程中常見錯誤解決及参考文档
常见错误
参考文档
1.《Oracle HS (Heterogeneous Services)深入解析及协同Gateway工作流程》
http://www.cnblogs.com/wwwiori/archive/2009/06/22/1508068.html
2.《Oracle® Database Heterogeneous Connectivity Administrator's Guide 10g Release 2 (10.2)》
http://docs.oracle.com/cd/B19306_01/server.102/b14232.pdf
3.《Oracle® Database Gateway Installation and Configuration Guide 11g Release 1(11.1) for Microsoft Windows》
http://docs.oracle.com/cd/B28359_01/gateways.111/b31043/toc.htm
4.《基于ORACLE TG技术的ORACLE数据库与异构数据源互访的技术实现》
http://www.docin.com/p-141069319.html
ORA-28545: error diagnosed by Net8 when connecting to an agent
ORACLE透明网关GATEWAY遇到 ORA-28545 ORA-28500 ORA-02063
2012-02-09 20:31
Error : ORA-28545: 连接代理时 Net8 诊断到错误 Unable to retrieve text of NETWORK/NCR message 65535、 ********************************************************************* 当遇到如上问题, 第一个 是经常遇到的, 问题往往是由于你的语法写的不对,比如说 语句中出现 有些SQL是区分大小写的(MYSQL和ORACLE),这个问题 是比较好解决的。 那么若是遇到第二个问题,就是由于驱动程序和应用程序的不是一个版本,比如驱动程序是32位的 你安装的ORACLE是64位的,反过来也是这样, 我将两个东西都安装成64位 即成功了。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25574072/viewspace-748410/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25574072/viewspace-748410/