日前一个项目需要从省调及各地调汇总信息,浏览查看并可能会修正,最终生成E文件并上报。这里每天同步抽取数据时需要用到多台服务器多种类型数据库的数据,其中许多字段都是来自多个数据库的数据,数据源有Oracle和SqlServer的,数据字段多计算复杂且时间紧迫,若在应用程序里写程序无疑工作量不小,若是在Oracle直接访问各个数据工作量会减轻许多,众所周知在Oracle下访问同构数据库只需配置数据库连接(Database Link)即可,但访问异构型数据库直接这样就不行了。
不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做链接服务器(LINKED SERVER)(在企业管理器->连接到将宿主该链接的 SQL Server 计算机。在树窗格中,展开"安全性"文件夹即有"链接服务器"),通过ODBC 的 Microsoft OLE DB 提供程序实现与其它数据库的互联;当然也提供了专用于 Oracle 2.6 版 的 Microsoft OLE DB 提供程序和用于IBM DB2 的Microsoft OLE DB 提供程序等。
而ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),当然之前ORACLE还采用过通用连接技术。目前ORACLE利用透明网关可以实现和SQL SERVER、SYBASE、DB2等多种数据库的互联。
透明网关的体系结构也很简单,在ORACLE和SQL SERVER之间使用ORACLE透明网关服务器实现互连互通,其中透明网关服务器可以与ORACLE或SQL SERVER数据库在同一台主机上,也可以是在独立的一台主机上。本文着重介绍Oracle9i、10g与Sql Server互联透明网关的相应配置。
2 Oracle 9i访问Sql Server的透明网关相应配置
这里以本地Oracle配置本地Sql Server和远程Sql Server为例分别做一介绍。
2.1 例一,本地Oracle访问本地Sql Server的透明网关相应配置
本地计算机主机名:jysoft-chut
操作系统:Windows XP 2002 SP3
本地Oracle数据库Oracle 9.2.0.1.0
ORACLE_HOME:D:/oracle/ora92
IP:10.138.1.171
Port:1521
本地Sql Server数据库Sql2000 IP:10.138.1.171
db数据库名称:pubs
用户名/密码:sa/psw
说明:透明网关可以跟Oracle、SqlServer2000 数据库在同一台机器或者不同机器,本例是Oracle、透明网关、SqlServer 是同一台机器。
1、运行Oracle 安装软件,安装类型选自定义,选择里面的安装Oracle Transparent Gateway 9.2.0.1.0,下面的Oracle Transparent Gateway From Microsoft Sql Server 9.2.0.1.0 可以看到,还可以选择其他的数据库如 Sybase、DB2 等。
2、确认透明网关安装成功,会出现D:/oracle/ora92/tg4msql/admin目录,配置文件为 inittg4msql.ora。 注意:如果(D:/oracle/ora92/network/admin)对应的 listener.ora 里面的 SID_NAME 设置为其他的,如本例的 sql2000,那么应该手动新增一个配置文件对应为 initsql2000.ora 而不是inittg4msql.ora了,其中 initsql2000.ora 里面内容如下:
HS_FDS_CONNECT_INFO="SERVER=JYSOFT-CHUT;DATABASE=pubs" HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER |
3、配置listener.ora
在D:/oracle/ora92/network/admin目录下找到 listener.ora 文件
在段SID_LIST_LISTENER中加上
(SID_DESC= (GLOBAL_DBNAME = tg4msql) (PROGRAM=tg4msql) (SID_NAME=sql2000) (ORACLE_HOME=d:/Oracle/Ora92) ) |
其中 GLOBAL_DBNAME,SID_NAME 可以自定义设置,但要注意与D:/oracle/ora92/tg4msql/admin的配置文件(init<SID_NAME>.ora)对应,这里为sql2000那么相应目录(tg4msql/admin)的配置文件名应为 initsql2000.ora 。注:配置完了需要重起监听器.
在命令行启动lsnrctl c:lsnrctl lsnrctl>stop lsnrctl>start |
或者到Windows服务管理界面重启对应的Oracle监听器(TNSListener)
4、配置tnsnames.ora
在D:/oracle/ora92/network/admin目录下找到 tnsnames.ora 文件
加上下列代码
tg_sql = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=jysoft-chut)(PORT=1521)) (CONNECT_DATA=(SID=sql2000)) (HS=OK) ) |
注:这里的host为透明网关的主机名或IP地址,端口也是对应的,这里因为透明网关同Oracle、SqlServer同一台机器,所以一样;sid 与 listener.ora 对应,为sql2000;服务名(tg_sql)随便设置,但注意建立db link时要跟这里一样;(HS=OK) 代表异构服务。
5、建立数据库连接
drop dabase link db_sql; create public database link db_sql connect to sa identified by psw using "tg_sql"; |
注:其中sa/psw为对应Sql Server2000里的数据库pubs的用户/密码
6、测试数据库连接
这样,Sql Server数据库pubs就可以在Oracle下通过透明网关来访问了。
7、对远程数据库不允许进行DDL操作。
8、如果需要配置对多个Sql Server数据库进行访问,可以在目录tg4msql中配置多个init<SID_NAME>.ora文件,里面指定对应的数据库同时在 listener.ora 和 tnsnames.ora 进行配置,再建立相应的database links即可。
2.2 例二,本地Oracle访问远程Sql Server的透明网关相应配置
下面再以 Oracle,SqlServer2000 数据库不在同一台机器为例再次介绍一下(透明网关同Oracle在同台机器并已成功安装):
计算机和Oracle数据库同上,SqlServer2000 数据库如下:
SqlServer2000数据库IP地址:10.138.5.80 数据库名称:eis2000 用户名:ddk 密码:ddkpsw 能访问的表:cs_ah, cs_ah_data, collect_ah, collect_ah_data |
1、在 D:/oracle/ora92/tg4msql/admin 目录下,新建文件,文件名为 initeis2000.ora
内容如下:
HS_FDS_CONNECT_INFO="SERVER=10.138.5.80; DATABASE=eis2000" HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER |
2、配置listener.ora
在 D:/oracle/ora92/network/admin 目录下找到 listener.ora 文件
在段 SID_LIST_LISTENER 中加上如下代码:
(SID_DESC= (GLOBAL_DBNAME = tg4msql) (PROGRAM=tg4msql) (SID_NAME=eis2000) (ORACLE_HOME=d:/Oracle/Ora92) ) |
3、重启Oracle监听器
4、配置tnsnames.ora
在D:/oracle/ora92/network/admin目录下找到 tnsnames.ora 文件
加上下列代码:
eis2000 = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=jysoft-chut)(PORT=1521)) (CONNECT_DATA=(SID=eis2000)) (HS=OK) ) |
5、建立数据库连接
drop dabase link eis2000; create public database link eis2000 connect to ddk identified by ddkpsw using 'eis2000'; |
6、测试数据连接
select * from cs_ah@eis2000;
7、至此所有配置成功,结束。
注:按照透明网关的原理,当Oracle、Gateway、Sqlserver分别在不同的机器上时也是可以工作,有兴趣的可以找三台机器尝试下。
3 Oracle 10g访问Sql Server的透明网关相应配置案例
透明网关下载安装准备阶段:
服务器端
1、下载透明网关
Oracle 10g下,透明网关是一个单独的组件,需要单独下载安装。下载地址如下:
http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html
这个安装包有200多兆。
2、安装透明网关:
在Oracle 10g服务器上,解压后,进入目录,点击setup.exe,启动安装界面,安装oracle transparent gateway for microsoft sql server;
下一步,输入sqlserver地址和sqlserver 数据库名,这里你可以输入正确的,也可以随便输入或者留空,也可以安装完成后再配置。安装完成后,会弹出配置监听界面,若要手工配置,点击取消即可。
3、默认情况下,安装透明网关时会生成一个默认的参数文件:inittg4msql.ora(ORACLE_HOME /tg4msql/admin),它的sid是tg4mssql,你可以使用这个文件,也可以新建一个文件。本文该例选择的是新建文件。
参数手工配置:
确定已成功安装透明网关for SqlServer,下面说明如何配置:
Sql Server数据库:db2、db3
1、在ORACLE_HOME/tg4msql/admin/目录下创建inittg4msql.ora的两个副本初始化参数文件名分别命名为:
inittg4msql2.ora、inittg4msql3.ora分别对应SqlServer数据库名db2、db3
修改两个文件的内容分别如下:
inittg4msql2.ora:
HS_FDS_CONNECT_INFO=msql_nethost2.db2 |
inittg4msql3.ora:
HS_FDS_CONNECT_INFO=msql_nethost3.db3 |
2、配置listener.ora
在ORACLE_HOME/network/admin 目录下找到 listener.ora 文件,在段 SID_LIST_LISTENER 中加上如下代码
(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_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) ) ) |
3、重启Oracle监听器
4、配置tnsnames.ora
在ORACLE_HOME/network/admin目录下找到 tnsnames.ora 文件
加上如下代码:
old_db_using=(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (PORT=1541) (HOST=GatewayHost)) (CONNECT_DATA= (SID=tg4msql)) (HS=OK)) new_db2_using=(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (PORT=1541) (HOST=GatewayHost)) (CONNECT_DATA= (SID=tg4msql2)) (HS=OK)) new_db3_using=(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (PORT=1541) (HOST=GatewayHost)) (CONNECT_DATA= (SID=tg4msql3)) (HS=OK)) |
5、建立数据库连接
--为tg4msql2网关建立数据库连接
SQL> CREATE PUBLIC DATABASE LINK MSQL2 CONNECT TO user2 IDENTIFIED BY password2 USING 'new_db2_using'; |
--为tg4msql3网关建立数据库连接
SQL> CREATE PUBLIC DATABASE LINK MSQL3 CONNECT TO user3 IDENTIFIED BY password3 USING 'new_db3_using'; |
6、测试数据连接
SQL> SELECT * FROM ALL_USERS@MSQL2; 或者 SQL> SELECT * FROM ALL_USERS@MSQL3; |
7、至此Oracle 10g访问Sqlserver的透明网关所有配置成功,OK结束。
1、Oracle For SQL Server的透明网关在UNIX下无法实现,目前只支持WIN; 原因很简单,SQL Server本身不支持UNIX,所以Oracle也无法直接在UNIX下访问SQL Server。
2、Oracle For其它数据库的透明网关,如SYBASE等有UNIX版本的数据库在UNIX可以实现。
3、针对实际应用,如果有需要UNIX实现Oracle 到SQL Server的互连,需要另外用一台WIN下的Oracle来做透明网关服务器,其它UNIX下的Oracle通过这个透明网关来访问SQL Server。
4、Oracle透明网关软件在Oracle 8i时是需要花钱另买的;到Oracle 9i时是作为数据库的一个组件免费发布的,安装时在组件中选择即可。Oracle 10g是作为一个单独的安装程序发布,可在www.oracle.com下载到。
5、不同数据库间的数据处理需使用标准SQL来实现。对远程数据库不允许进行DDL操作。
6、各数据库中特殊的数据类型,需要在程序中实现转换,应尽量避免使用无法转换的数据类型。
7、整个配置过程中,若操作无误, Oracle数据库服务器只须重启TNSListener监听器即可。
www.oracle.com Oracle® Transparent Gateway for Microsoft SQL Server Administrator’s Guide 10g Release 2 (10.2) for Microsoft Windows (32-bit) B14270-01 June 2005