Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72329
  • 博文数量: 25
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-08 09:35
文章分类

全部博文(25)

文章存档

2011年(1)

2009年(18)

2008年(6)

我的朋友

分类: Oracle

2009-01-03 09:23:05

Oracle与SQL Server的互连 
  不同平台的互连一般称之为的异构服务,现在各大之间都可以实现这样的异构互连,只是各厂商的具体实现不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与其它的互联。 
  
  而ORACLE实现异构服务的叫做透明网关(Transparent Gateway),当然之前ORACLE还采用过通用连接。目前ORACLE利用透明网关可以实现和SQL SERVER、SYBASE、DB2等多种的互联。 
  
  透明网关的体系结构也很简单,在ORACLE和SQL SERVER之间使用ORACLE透明网关服务器实现互连互通,其中透明网关服务器可以与ORACLE或SQL SERVER在同一台主机上,也可以是在独立的一台主机上。 
  
  下面是具体步骤:
  
  1、在SQL SERVER上创建测试账号和表 
  
  这里我用的是10.16.74.140的PUBS,账号cyx, 
  
  create table t (c char(10)); 
  
  2、我测试所用和透明网关是在同一台机器上,在我本机:10.16.98.16,透明网关在oracle默认安装时是不安装的,所以如果你想用需要选择这一选项。 
  
  3、安装透明网关for sql server的软件后,可以在$ORACLE_HOME下看到tg4msql目录,编辑$ORACLE_HOME/tg4msql/admin/inittg4msql.sql文件确认这一行正确: 
  
  HS_FDS_CONNECT_INFO="SERVER=10.16.74.140;DATABASE=pubs" 
  
  4、修改透明网关server上的listener.ora,在SID_LIST中加入以下内容: 
  
  (SID_NAME = tg4msql) # SID自己命名 
  
  (ORACLE_HOME = c )
  
  (PROGRAM = tg4msql) 
  
  5、在oracle server上的tnsnames.ora中加入到透明网关的tnsname,内容如下: 
  
  sql2k = 
  
  (DESCRIPTION = 
  
  (ADDRESS_LIST = 
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.98.16)(PORT = 1521)) #此处HOST填的是透明网关SERVER的地址 
  
  ) 
  
  (CONNECT_DATA = (SID = tg4msql) ) #此SID应和透明网关SERVER上设定的SID相同 
  
  (HS=OK) 
  
  ) 
  
  6、修改ORACLE SERVER的初始化参数,将global_names设为false,因为我们并不使用GLOBAL NAME。然后重起。 
  
  7、现在在ORACLE SERVER上创建DB LINK就可以了。下面实验数据: 
  
  C:>sqlplus /nolog 
  
  SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 6月 25 13:29:41 2003 
  
  Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 
  
  SQL> conn sys/change_on_install as sysdba 
  
  已连接。 
  
  SQL> create user cyx identified by cyx default tablespace users; 
  
  用户已创建 
  
  SQL> grant connect to cyx; 
  
  授权成功。 
  
  SQL> grant resource to cyx; 
  
  授权成功。 
  
  SQL> conn cyx/cyx 
  
  已连接。 
  
  SQL> create database link tosql2k connect to cyx identified by cyx using 
  
  2 'sql2k'; 
  
  链接已创建。 
  
  SQL> select * from t@tosql2k; 
  
  c 
  
  abc 
  
  aaa 
  
  bbb 
  
  cyx 
  
  gototop 
  
  ncn 
  
  11111 
  
  已选择7行。 
  
  SQL> insert into t@tosql2k values('ncn.cn'); 
  
  已创建 1 行。 
  
  SQL> commit; 
  
  提交完成。 
  
  SQL> select * from t@tosql2k; 
  
  c 
  
  abc 
  
  aaa 
  
  bbb 
  
  cyx 
  
  gototop 
  
  ncn 
  
  11111 
  
  ncn.cn 
  
  已选择8行。 
  
  以上示例,oracle server和透明网关server都是在同一台机器上,像在开始说明的那样,我们同样可以在其他下面oracle server中通过透明网关来访问sql server的数据。下面是示例: 
  
  现在这个oracle server上添加tnsname。 
  
  hawk3$sqlplus cyx 
  
  SQL*Plus: Release 8.1.7.0.0 - Production on Wed Jun 25 14:00:34 2003 
  
  (c) Copyright 2000 Oracle Corporation. All rights reserved. 
  
  Enter password: 
  
  Connected to: 
  
  Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production 
  
  With the Partitioning option 
  
  JServer Release 8.1.7.0.0 - Production 
  
  SQL> create database link hawk3_sql2k connect to cyx identified by cyx 
  
  2 using 'sql2k'; 
  
  Database link created. 
  
  SQL> select * from t@hawk3_sql2k; 
  
  c 
  
  abc 
  
  aaa 
  
  bbb 
  
  cyx 
  
  gototop 
  
  ncn 
  
  11111 
  
  ncn.cn 
  
  8 rows selected. 
  
  注:很多朋友问到关于透明网关的一些问题,在此加以说明如下: 
  
  1、Oracle For SQL Server的透明网关在UNIX下无法实现,目前只支持WIN; 原因很简单,SQL Server本身不支持UNIX,所以Oracle也无法直接在UNIX下访问SQL Server。 
  
  2、Oracle For其它的透明网关,如SYBASE等有UNIX本版本的在UNIX可以实现。 
  
  3、Oracle透明网关软件在Oracle 8i时是需要花钱另买的,大约1万$;到Oracle 9i时是作为的一个组件免费发布的。安装时在组件种选择即可。 
  
  4、针对我们的实际应用,如果有需要实现Oracle 到SQL Server的互连,我们需要另外用一台WIN下的Oracle 9i来做透明网关服务器,其它UNIX下的Oracle通过这个透明网关来访问SQL Server。 
  
  5、不同间的数据处理需使用标准SQL来实现。 
  
  6、各中特殊的数据类型,需要在程序中实现转换,应尽量避免使用无法转换的数据类型。 
阅读(388) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~