|
|
配置透明网关的步骤:
在Oracle中配置与Sql Server相连的透明网关
赵金清
前言:
异构数据库系统之间的数据共享是现在很多大型公司所面临的问题。这些公司往往有好几种不同的数据库系统,每种数据库系统支持一种或者几种应用。例如在某电信运营公司中,计费和网管系统分别使用不同的数据库。前者是在Oracle 8I基础上架构的,后者却使用SQL SERVER作为数据库系统。数据库系统的不同是由很多因素造成的,例如不同的开发商,不同的系统要求等等。如何在这些系统之间共享数据?如何在建立企业级数据仓库系统时把有用的数据轻松导入到数据仓库系统中?
Oracle公司提供的Transparent Gateways(透明网关)组件能够轻易在Oracle环境中访问非Oracle数据库中的数据。这就使Oracle系统的开发者不必再为如何从非Oracle数据库系统中访问数据而绞尽脑汁,同时减少了系统的开销,并且提高了应用的灵活性。本文讨论的是要在Oracle数据库环境中访问SQL Server中的数据应该如何配置以及在配置过程中应该注意的问题。
关键字:
透明网关(Transparent Gateway),异类服务(Heterogeneous Services),系统标识符(System Identifier:SID),数据库连接(Database Link),Oracle数据库服务器(Oracle Database Server),信息共享(Information Share)。
一、透明网关的组成部分以及各部分作用:
Oracle提供的透明网关技术是由两部分组成的。访问任何非Oracle数据库采取的共同技术,这部分称为异类服务(Heterogeneous Services);对访问不同非Oracle数据库系统而采取的不同技术称为透明网关代理。异类服务跟透明网关代理通力合作,能够从Oracle环境中透明访问非Oracle数据库系统中的数据,从而达到在Oracle数据库环境中各种数据库系统之间的信息共享。
异类服务能够完成两种类型的转换:把Oracle的SQL语句转换成符合非Oracle数据库系统语法的SQL语句;能够把非Oracle数据库系统中的元数据转换成可以在Oracle数据库系统中识别的格式。并且异类服务能够维护非Oracle系统和Oracle系统的事务,例如提供两阶段提交(two-phase commit)协议保证分布式事务的完整性。
Oracle透明网关代理能够完成Oracle数据库跟非Oracle数据库之间的SQL语句的映射,不同数据类型之间的转换以及提供访问远程非Oracle系统的接口。该网关代理与异类服务一起提供了Oracle系统跟非Oracle系统的透明连接。
二、透明网关的安装
透明网关可以安装在任何一台机器上,可以跟Oracle数据库系统同台机器也可以跟非Oracle数据库系统同台机器,也可以单独安装在一台机器上。本测试环境是Oracle数据库跟SQL SERVER同台机器,透明网关也安装在这台机器上。主机的名称是mycomputer,各端口使用的是TCP/IP默认端口。操作系统是Windows 2000 Advanced Server + SP3。
在Oracle中安装Transparent Gateways for SQL SERVER 2000时,使用Universal Installer安装该组件,安装时可以不指定SQL SERVER的数据库。安装成功后,应该在%ORACLE_HOME%目录中存在tg4msql文件夹。在安装SQL Server 2000的时候选择的是混合模式的验证,指定SA用户的密码。详细安装过程可以参考Oracle以及SQL SERVER 2000的安装文档。
三、配置透明网关(Configurating Transparent Gateways)
(一)、配置透明网管的前期准备:
1:为透明网关选择系统标识符(system identifier:SID)
SID用来标识透明网关实例。缺省SID是tg4msql。注意的是访问不同的SQL SERVER数据库需要不同的SID,若访问单一SQL SERVER中的数据库,不需要更改缺省的系统SID。若访问多个SQL SERVER 中的数据库,需要为每个数据库设置不同的SID,其各自配置文件以INIT<SID>.ORA来命名。在本测试环境中取SID为sqlpubs。
2:配置初始参数文件
Oracle透明网关安装完成以后,缺省的初始化参数文件位于:
ORACLE_HOME\tg4msql\admin\inittg4msql.ora 如果在步骤1中没有采取缺省的SID名称,就不得不以init<SID>.ora的形式更改初始化参数文件的名称。在该文件中,需要明确参数HS_FDS_CONNECT_INFO=server_name.database_name。在本测试环境中,初始化参数文件名称为INITSQLPUBS.ORA,参数HS_FDS_CONNECT_INFO=mycomputer.pubs。
(二)、为透明网关配置Oracle网络服务监听器
3:手工配置透明网关的TNS监听器
Oracle使用TNS监听器接收客户端的连接请求。需要注意的是TNS监听器必须和透明网关位于同一台机器上。为使TNS监听器能够监听透明网关的连接请求,网关的相应信息必须加入到TNS监听器配置文件listener.ora中,该文件位于ORACLE_HOME\network\admin。为了响应连接请求启动透明网关,需要在文件listener.ora中加入下面的条目,语法如下:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME= gateway_sid)
(ORACLE_HOME= oracle_home_directory)
(PROGRAM=tg4msql)
)
)
配置多个SID的语法如下:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=tg4msql)
(ORACLE_HOME= oracle_home_directory)
(PROGRAM=tg4msql)
)
(SID_DESC=
(SID_NAME=tg4msql2)
(ORACLE_HOME= oracle_home_directory)
(PROGRAM=tg4msql)
)
(SID_DESC=
(SID_NAME=tg4msql3)
(ORACLE_HOME= oracle_home_directory)
(PROGRAM=tg4msql)
)
)
其中SID_NAME是步骤1中指定的SID, ORACLE_HOME是Oracle的主目录。PROGRAM为tg4msql指定SQL SERVER 的透明网关。详细的配置文件listener.ora可以参考Oracle Net Services Administrator’s Guide。在本测试环境中,语法如下:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME= sqlpubs)
(ORACLE_HOME= f:\oracle\ora92)
(PROGRAM=tg4msql)
)
)
4:为透明网关重新启动TNS监听器
在Dos界面运行命令lsnrctl,可以调用管理TNS监听器的命令单元。使用help可以得到该命令单元的详细使用信息。在该测试环境中仅仅需要stop和start两个命令即可。也可以在控制面板中重新启动OracleOracleHome9ITNSListener该项服务。两者的效果相同。
(三)、为透明网关配置Oracle网络服务监听器
任何的客户端在连接到Oracle数据库服务器以后,都可以通过透明网关访问SQL SERVER 数据库中的数据。需要注意的一点就是透明网管接收的是来自Oracle数据库服务器的连接请求。因此在允许客户端能够通过透明网关访问SQL SERVRE中的数据之前,应该首先配置Oracle数据库服务器能够与透明网关通信。
5:配置Oracle服务器的网络服务
为了使Oracle服务器能够跟透明网关相通信,不得不在Oracle数据库服务器的配置文件tnsname.ora(缺省的安装条件下,该文件位于ORACLE_HOME\network\admin)中加入相应的条目。告诉Oracle Database Server应该如何跟透明网关建立连接。需要注意的是无法利用Oracle Net Services Assistant或者Oracle Net Services Easy Config tool来配置该文件,必须手工配置该文件。下面是以TCP/IP协议配置Oracle Database Server访问透明网关的例子,语法如下:
connect_descriptor=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST= host_name)
(PORT= port_number)
)
(CONNECT_DATA=
(SID= gateway_sid))
(HS=OK)
)
注意的是配置多个connect_descriptor跟配置单个connect_descriptor相同。过程略。
connect_descriptor: 连接的描述符号。在建立数据库连接时候使用的就是connect_descriptor。在配置该参数的时候,注意的是需要查看sqlnet.ora文件(缺省的情况下,该文件跟tnsname.ora文件位于同一目录下)。若该文件中参数NAME.DEFAULT_DOMAIN,和NAME.DEFAULT_ZONE存在并且赋予了值。在命令connect_descriptor必须以参数NAME.DEFAULT_DOMAIN的值为后缀。即以<connect_descriptor>.<NAME.DEFAULT_DOMAIN>的形式来给connect_descriptor赋值。
PROTOCOL指定连接使用的协议;HOST指定运行Oracle数据库服务器的主机名;PORT指定监听器使用的端口。
SID的值就是在步骤1中指定系统标识符。HS标识Oracle Database Server在使用该连接时使用的是异类服务(Heterogeneous Services)。在本测试环境中,语法如下:
hs_sqlpubs=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST= mycomputer)
(PORT= 1521)
)
(CONNECT_DATA=
(SID= sqlpubs))
(HS=OK)
)
四、建立数据库连接:(Database Links)
连接到Oracle Database Server的客户端都可以通过透明网关而访问SQL SERVER中的数据。而透明网关由于仅仅能够接收Oracle Database Server的连接请求,因此在开始使用透明网关的时候就不得不首先在Oracle Database Server跟透明网关之间建立一个连接。该连接可以通过使用Oracle数据库中Database Link而实现。
Oracle Database Server跟透明网关的连接在某透明网关会话中一直处于激活状态。在该会话结束以后该连接自动取消。若想在某会话中取消数据库连接(Database Link),可以使用ALTER SESSION的命令。详细的文档可以参考:Oracle9i Database Administrator’s Guide以及Oracle9i Heterogeneous Services Administrator’s Guide。
6:使用connect_descriptor建立Database Link
语法:
CREATE [PUBLIC] DATABASE LINK dblinkname
CONNECT TO user IDENTIFID BY password
USING connect_descriptor
connect_descriptor为步骤5中连接描述符。在本例中语法配置如下:
CREATE PUBLIC DATABASE LINK sqlserver1
CONNECT TO sa IDENTIFID BY *******
USING ‘hs_sqlpubs’
五、测试透明网关的配置
在sqlplus中使用Database Links测试透明网关的配置,描述数据库PUBS中的表authors结构。测试结果如下:
SQL> desc authors@sqlserver1 输出结果如下:
au_id NOT NULL VARCHAR2(11)
au_lname NOT NULL VARCHAR2(40)
au_fname NOT NULL VARCHAR2(20)
phone NOT NULL CHAR(12)
address VARCHAR2(40)
city VARCHAR2(20)
state CHAR(2)
zip CHAR(5)
contract NOT NULL NUMBER(3)
小结:
通过手工配置Oracle中的各种文件,达到在Oracle环境中能够访问Sql Server中的数据。在Oracle数据库环境中异种数据库之间的数据共享成了轻而易举的事情。至于配置跟多个SQL SERVER中的数据库相连的问题,根据相应的语法建立多个连接访问其中的数据也是及其简单。 |
|