Oracle透明网关解决MS-SQL 与ORACLE的实时同步问题--原创作品

前言

先简单介绍一下Oracle异构服务。它是包含在Oracle数据库中的一个模块,通过使用透明网关(Transparent Gateway)或通用连接(Generic Connectivity)来访问其它非Oracle系统的数据。异构服务的主要结构如下:

  各模块简要说明如下:

  异构服务模块:属于Oracle数据库的内核部分,负责大部分异构连接的处理;

  代理通用代码:对所有基于异构服务产品的通用代码;

  驱动:是与非Oracle系统直接交互的模块,实现从异构服务API到特定非Oracle系统API的映射。

  代理:是Oracle Server连接非Oracle系统的进程,包括两部分即代理通用代码和针对特定非Oracle系统的驱动。代理的位置可以与非Oracle系统在同一台机器上,或与Oracle Server在同一台机器上,或者单独在一台机器上。我这次实践的环境采用的是最后一种。

我们所说的透明网关和通用连接实际是异构服务中代理的两种类型。其中透明网关是功能较强的,它通过代理进程从Oracle Server访问各地的异构分布式数据库,而提供给用户的感觉是这些数据库仍然是Oracle数据库,Oracle公司提供对大多数商业数据库的透明网关。通用连接则有较多限制,它使用用户自己提供的ODBCOLE DB驱动程序作为异构服务的代理驱动,并且要求这些驱动必须要安装在Oracle Server$ORACLE_HOME目录下。

关健字:异构数据库oracle9i gateway for ms-sql server

[@more@]

配置过程:

第一步:在MS-SQL server 创建数据echon,用户ms_echon密码ms_echon并创建一张表ms_t1(id char(10));

第二步:安装oracle9i gateway for ms-sql server,之后检查oracle数据库,如果有对象sys.HS_FDS_CLASS说明存在异构数据库的数据字典,否则运行脚本$ORACLE_HOME/rdbms/admin/caths.sql。设置参数HS_AUTOREGISTER,启用代理的自动注册功能HS_AUTOREGISTER=TRUE,数据库默认启用该功能。

第三步:修改参数,进入C:oracleora92tg4msqladmin,把inittg4msql.ora 改成initechon.ora(命名方法init+MS sql server数据库名.ora),把内容改为:

HS_FDS_CONNECT_INFO="SERVER=127.0.0.1;DATABASE=echon"

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

第四步:修改侦听

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1527)) #新增一端口

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = jialong)

(ORACLE_HOME = C:oracleora92)

(SID_NAME = jialong)

)

#以下是为MS-SQL server配的侦听

(SID_DESC =

(SID_NAME = echon) #MS-Sql server的数据库名

(ORACLE_HOME=C:oracleora92)

(PROGRAM = tg4msql)

)

)

配好后,重新启动侦听程序

第五步:配置net manager

修改tnsname.ora

新增

MS_SQL =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1527)) #与侦听端口一致

)

(CONNECT_DATA =

(SID = echon) # MS-Sql server数据库名, GATEWAYlistener.ora中的SID一致

)

(HS = OK) #这很重要,告诉Oracle Server要调用异构服务模块来处理

)

第六步:创建db link:

SQL> create public database link ora_msql connect to ms_echon identified by

ms_echon using 'ms_sql'; #ms_echonms_sql server上的用户。

数据库链接已创建。

SQL> select count(*) from ms_t1@ora_msql;

select count(*) from ms_t1@ora_msql

*

ERROR 位于第 1 :

ORA-02085: 数据库链接ORA_MSQLHO.WORLD相连结

SQL> alter system set global_names=false scope=both;

系统已更改。

SQL> conn echon/echon

已连接。

SQL> select count(*) from ms_t1@ora_msql;

COUNT(*)

----------

1

至此,oraclems sqlserver 的通道已开,为了使开发工作简单,透明的进行,我们进一步加强功能的可读性,可在oracle上创建同义词来解决开发SQL语句的通用性,但值得注意的是,强烈要求开发人员采用标准SQL语法,否则可迁移性不强。

SQL> create synonym ms_t1 for ms_t1@ora_msql;

同义词已创建。

SQL> select count(*) from ms_t1;

COUNT(*)

----------

3

SQL> select * from ms_t1;

id

----------

weijsh

lanying

lanying

SQL> insert into ms_t1 values('lanying');

已创建 1 行。

SQL> commit;

提交完成。

也可以到SQL 查询分析器上执行insert into ms_t1 values('lanying');

总结

通过oraclemssql server两个数据库多次认证,oracle网关很好的解决了两种异构平台下的数据实时同步,这种方案对开发人员是透明的。另外,本次测试仅对功能上的可行性进行了验证,没有进行大量的数据测试,所以在性能上能否满足实际应用还有待验证。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/32202/viewspace-891729/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/32202/viewspace-891729/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值