ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),利用透明网关可以实现和SQL SERVER、SYBASE、DB2等多种数据库的互联。因此透明网关也是Oracle数据仓库和数据迁移中的一个重要组成部分。
透明网关的体系结构也很简单,在ORACLE和SQL SERVER之间使用ORACLE透明网关服务器实现互连互通,其中透明网关服务器可以与ORACLE或SQL SERVER数据库在同一台主机上,也可以是在独立的一台主机上。
1、 透明网关工作机制,ORACLE分四步进行连接到MSSQL:
说明:根据此机制,TNSNAMES.ORA中的服务名配置需要带HS=OK参数,TNSNAMES.ORA中的SID、LISTENERS.ORA中的SID_NAME与$ORACLE_NAME\dg4mssql\init*.ora的*通配字串必须要一样,且要符合OS的命名规则。
2. 安装和配置ORACLE透明网关:
重要说明:如果透明网关与ORACLE数据库在同一台机器上,其主目录必须是数据库的主目录。
1)勾选服务:
说明:勾选不同的组件会在ORACLE主目录下产生不同的文件夹,其中包含了该组件的相关文件和基于此种异构访问的配置信息,选择MSSQL类型和ODBC类型时会分别产生dg4mssql和hs文件夹。
2) 填写数据库(先任意填写,然后再配置文件中配置):
3) 配置网关异构服务文件:
文件放置在数据库主目录下:$ORACLE_HOME\dg4mssql\admin,网关安装好之后已有一个默认的配置文件,其配置信息就是上面填写的数据,一般我们选择新建一个文本,填写数据后,保存为.ora后缀的文件即可,文本信息如下图:
说明:HS_FDS_CONNECT_INFO为异构数据库连接字符串,10.4.247.120为被访问的异构数据库主机的IP地址,elite是数据库名,如果目标数据库有多个异构数据库实例,则应填写:Host_IP/Instance_Name/DB_Name(如果是ORACLE10G的透明网关,其字串为:HS_FDS_CONNECT_INFO=”SERVER=HostIP,DATABASE=DBName”),如果没有则可以不填写。HS_FDS_TRACE_LEVEL为异构数据库访问的跟踪报告,报告文件放置在$ORACLE_HOME\dg4mssql\trace下,当填写为OFF表示不启用跟踪报告,填写数字时可以得到不同级别的跟踪报告。例如:如果因为HS_FDS_CONNECT_INFO参数设置不当而导致不能访问异构数据库时,跟踪文件会记录如下信息:
另外两个参数使用默认值RECOVER就可以了。保存时的文件名很重要,其格式必须为:init*.ora,*通配部分部分是自己可以命名的部分,命名规则要符合OS的命名规则,如:initdg4msql.ora,深色部分即为自己命名部分。由于透明网关的工作原理关系,自己命名的部分也会被TNSNAMES.ORA和LISTENERS.ORA文件所以使用,所以请谨慎命名。
4) 配置LISTENER.ORA文件:
在其中添加侦听其他服务的配置,可以通过图形界面或文本写入的方式配置: 图形界面如下:
说明:参数SID_NAME即为上一步骤你命名的文件名(initdg4msql.ora,橙色部分即为自己命名部分),参数ORACLE_HOME为数据库的主目录,参数PROGRAM为透明网关组件的目录,如果是ODBC的方式访问其他数据库则为dg4odbc,而且随着ORACLE透明网关的版本的不同其值也不同,如ORACLE10G其值为tg4msql(对应ODBC值为tg4odbc)。配置好之后,重新启动侦听器。
5) 配置TNSNAMES.ORA文件:
在其中添加异构服务配置,可以通过图形界面或文本写入的方式配置:
图形界面如下,SID填写LISTENERS.ORA中SID_NAME的值,主机名和端口号填写透明网关所在的ORACLE数据库的主机IP(或主机名)和侦听端口号:
点击高级,勾选用于不同种类的服务:
文本信息如下:
说明:主要添加HS参数,表明此TNS服务是异构数据库服务。CONNECT_DATA参数的子参数必须为SID,其他参数不再赘述。配置好之后可以在OS的命令行下使用TNSPING命令测试,TNS服务是否能解析该服务名,如下图:
得到如下信息时,表TNS能正确解析服务名,否则请各个配置文件中的参数,以保证三个相同(SID、SID_NAME与$ORACLE_NAME\dg4mssql\init*.ora的*通配字串三个相同),一个必须(HS=OK)
6) 在ORACLE数据库中建立数据库连接:
create database link MSSQL connect to "sa" identified by "system" using 'mssql'; 说明:由于MSSQL要区分用户名和密码的大小写,所以要用双引号将用户名和密码包含起来。
7) 查询演示:
MSSQL中的查询:
ORACLE中的查询: 说明:如果MSSQL中表名或字段名不是以标准命名(大写方式)存在的,在ORACLE环境下引用时用使用双引号将其包含,否则要包错,例如:
MSSQL中CUSTOMER表是标准命名方式,在ORACLE环境下引用它可以不区分大小写:
MSSQL中c_City表不是标准命名方式,则在ORACLE中引用语句如下:
select * from "c_City"@mssql;
MSSQL中c_City表中的City_id不是标准命名方式,则在ORACLE中引用语句如下:
select "City_id" from "c_City"@mssql;
二. MSSQL配置:
1. 安装SQL SERVER 2008。
2. 附加或创建数据库,如果是MSSQL2000的数据库文件,最好把其属性的兼容级别改为SQL Server 2008(100),如图:
三. 测试环境说明:
1. OS:Microsoft Windows Server 2003 Enterprise Edition + Service Pack 2.
2. ORACLE: Oracle11g R2-11.2.0.1.0-win32 + win32_11gR2_gateways.
3. MSSQL: Microsoft SQL Server 2008 (10.0.1600.22).