Oracle与SQL Server的互连

细聊Oracle通过ODBC数据源连接SQL Server数据库     类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl... 阅读详情


  不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在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、各数据库中特殊的数据类型,需要在程序中实现转换,应尽量避免使用无法转换的数据类型。

 

 


  Oracle 数据库的透明网关( transparent gateway )是这样的一个接口:通过它,我们可以 sqlplus 操纵其他数据库,如 ms sqlserver 、 sybase 、 infomix 等,实现数据库的异构服务。我一直在找 8i 的透明网关,但是没有; 9i 就有了, 9 i 连接 sqlserver 的透明网关在 9i for nt/2000 的安装盘上。
  
  本文以 oracle 连接 sqlserver 为例,叙述一下配置的主要步骤。
  
  网络结构
  服务器一: sqlserver , ip 为 147.25.8.1 , port 为 1433 ;
  
  服务器二: oracle 9i server 和透明网关, ip 为 147.25.8.11 , port 为 1521 ;
  
  服务器三: oracle server , ip 为 147.25.8.111 , port 为 1521 ;
  
  客户机: sqlnet + sqlplus ,或其他客户端软件。
  
  安装 / 配置 oracle 9i server 和透明网关
  
  安装: 在服务器二上安装 9i server for nt/2000 ,必须选择透明网关( transparent gateway for ms sqlsvr )。
  
  在服务器二上安装 sqlsvr 的客户端程序。
  
  配置: 在服务器二上正常配置 listener , port 口为 1521 ;
  
  在服务器二上配置 listener.ora ,在 SID_LIST 中加入:
  
  ( SID_NAME = SID_NAME ) --------- 自己修改
  
  ( ORACLE_HOME = 《 ORACLE_HOME 》)
  
  ( PROGRAM = tg4msql ) ---------- 这是透明网关的目录
  
  在服务器二上配置透明网关的配置文件(《 ORACLE_HOME 》 /tg4msql/admin/initSID_NAME.ora ),明确:
  
  HS_FDS_CONNECT_INFO = “SERVER = 147.25.8.1;DATABASE = pubs”
  
  在服务器二上配置 sqlsvr 的客户连接:
  
  SERVER NAME = SERVER NAME -------- 自己修改
  
  SERVER = 147.25.8.1
  
  PORT = 1433
  
  PROTOCOL = TCP/IP SOCKET
  
  在服务器三上配置 tnsnames.ora ,加入一个 tns :
  
  MSSQL =
  
  (DESCRIPTION =
  
  (ADDRESS_LIST =
  
  (ADDRESS =
  
  (PROTOCOL = TCP)
  
  (HOST = 147.25.8.11)
  
  (PORT = 1521)))
  
  (CONNECT_DATA =
  
  (SID = SID_NAME)) --------SID 自己修改(与上文一致)
  
  (HS = OK)
  
  )
  
  测试
  服务器一: 启动 sqlserver ,确认用户 sa 及其密码(或另外建用户、建表)。
  
  服务器二: 启动 listener 。 oracle 数据库不需要启动。
  
  服务器三: sqlplus scott/tiger
  
  create database link mssql connect to sa identified by password using ‘mssql';
  
  select * from sales@mssql;
  
  如果无误,配置透明网关成功。
  
  其他
  使用透明网关只可以用标准的 DML ;
  
  服务器一二三还可以是一个服务器,也可以任意组合成两个服务器;但是服务器二所在的服务器必须是 windows nt/2000 server 平台;
  
  透明网关可以同时连接多个 sqlsvr ,方法是加入多个 SID_LIST 和相应的 initSID_NAME.ora 配置文件;
  
  可能会遇到中文字符显示成乱码的情况,这可能是由于 sqlsvr 的服务器和客户端的程序不是一个版本引起的。我正在测试。
 
  

 

 


  假设我们要在ORACLE里同时能访问SQL Server里默认的pubs和Northwind两个数据库。
  
  可参考最初写的通过异构服务链接oracle 和sql server 数据库服务器
  
  1、在安装了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows机器上(IP:192.168.0.1),
  

  产品要选了透明网关(Oracle Transparent Gateway)里要访问Microsoft SQL Server数据库.
  
  $ORACLE9I_HOME/tg4msql/admin下新写initpubs.ora和initnorthwind.ora配置文件
  initpubs.ora内容如下:
  HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=pubs"
  HS_DB_NAME=pubs
  HS_FDS_TRACE_LEVEL=OFF
  HS_FDS_RECOVERY_ACCOUNT=RECOVER
  HS_FDS_RECOVERY_PWD=RECOVER
  
  initnorthwind.ora内容如下:
  HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=Northwind"
  HS_DB_NAME=Northwind
  HS_FDS_TRACE_LEVEL=OFF
  HS_FDS_RECOVERY_ACCOUNT=RECOVER
  HS_FDS_RECOVERY_PWD=RECOVER
  
  (蓝色字的部分可以根据具体要访问的SQL Server数据库的情况而修改)
  
  $ORACLE9I_HOME/network/admin 下listener.ora内容如下:
  
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
  )
  )
  )
  
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = test9)
  (ORACLE_HOME = d:/oracle/ora92)
  (SID_NAME = test9)
  )
  (SID_DESC=
  (SID_NAME=pubs)
  (ORACLE_HOME=d:/Oracle/Ora92)
  (PROGRAM=tg4msql)
  )
  (SID_DESC=
  (SID_NAME=northwind)
  (ORACLE_HOME=d:/Oracle/Ora92)
  (PROGRAM=tg4msql)
  )
  )
  
  重启动这台做gateway的windows机器上(IP:192.168.0.1)TNSListener服务.
  
  (凡是按此步骤新增可访问的SQL Server数据库时,TNSListener服务都要重启动)
  
  2、ORACLE8I,ORACLE9I的服务器端配置tnsnames.ora, 添加下面的内容:
  

  pubs =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SID = pubs)
  )
  (HS = pubs)
  )
  
  northwind =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SID = northwind)
  )
  (HS = northwind)
  )
  
  保存tnsnames.ora后,在命令行下
  
  tnsping pubs
  tnsping northwind
  
  出现类似提示,即为成功
  
  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
  (PORT = 1521))) (CONNECT_DATA = (SID = pubs)) (HS = pubs))
  OK(20毫秒)
  
  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)
  (PORT = 1521))) (CONNECT_DATA = (SID = northwind)) (HS = northwind))
  OK(20毫秒)
  
  设置数据库参数global_names=false。
  
  设置global_names=false不要求建立的数据库链接和目的数据库的全局名称一致。
  
  global_names=true则要求, 多少有些不方便。
  
  oracle9i和oracle8i都可以在DBA用户下用SQL命令改变global_names参数
  
  alter system set global_names=false;
  
  建立公有的数据库链接:
  
  create public database link pubs connect to testuser identified by testuser_pwd using 'pubs';
  
  create public database link northwind connect to testuser identified by testuser_pwd using 'northwind';
  
  (假设SQL Server下pubs和northwind已有足够权限的用户登录testuser,密码为testuser_pwd)
  
  访问SQL Server下数据库里的数据:
  
  select * from stores@pubs;
  ...... ......
  
  select * from region@northwind;
  ...... ......
  
  使用sql *plus copy命令从本地数据库复制暑假到MS SQL SERVER中:
  
  copy from scott/tiger@myoracle insert  EMP@pubs using select * from EMP
  
  3、使用时的注意事项
  

  ORACLE通过访问SQL Server的数据库链接时,用select * 的时候字段名是用双引号引起来的。
  
  例如:
  create table stores as select * from stores@pubs;
  
  select zip from stores;
  
  ERROR 位于第 1 行:
  ORA-00904: 无效列名
  
  select "zip" from stores;
  
  zip
  -----
  98056
  92789
  96745
  98014
  90019
  89076
  
  已选择6行。
  
  用SQL Navigator或Toad看从SQL Server转移到ORACLE里的表的建表语句为:
  
  CREATE TABLE stores
  ("stor_id"           CHAR(4) NOT NULL,
  "stor_name"          VARCHAR2(40),
  "stor_address"         VARCHAR2(40),
  "city"             VARCHAR2(20),
  "state"            CHAR(2),
  "zip"             CHAR(5))
  PCTFREE   10
  PCTUSED   40
  INITRANS  1
  MAXTRANS  255
  TABLESPACE users
  STORAGE  (
  INITIAL   131072
  NEXT    131072
  PCTINCREASE 0
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  )
  /
  
  总结:
  
  WINDOWS下ORACLE9i网关服务器在$ORACLE9I_HOME/tg4msql/admin目录下的initsqlserver_databaseid.ora
  
  WINDOWS下ORACLE9i网关服务器listener.ora里面
  (SID_DESC=
  (SID_NAME=sqlserver_databaseid)
  (ORACLE_HOME=d:/Oracle/Ora92)
  (PROGRAM=tg4msql)
  )
  
  UNIX或WINDOWS下ORACLE8I,ORACLE9I服务器tnsnames.ora里面
  northwind =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
  )
  (CONNECT_DATA =
  (SID = sqlserver_databaseid)
  )
  (HS = sqlserver_databaseid)
  )
  
  sqlserver_databaseid一致才行.
计组实验4 控制冒险分支预测 目录前言实验内容背景知识分支预测技术⭐阻塞周期计算方法不开启 BTB开启 BTBpart 1 矩阵乘法优化未开启 BTB 的分析开启 BTB 的分析part 2 设计代码使 BTB 无效part 3 循环展开优化矩阵乘法未开启 BTB开启 BTB结束语结论 前言 上一篇博客:计组实验3 mips冒险之流水线冒险 摸了半个月了。。。咕咕咕 今天来写计组实验 4 这个实验非常简单,就是有点难。 这个实验比较容易算错,或者是被模拟器出人意料的结果搞的神神叨叨的,所以今天来记录并且详细分析该实验。 注:请务必阅 阅读详情

相关推荐

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 801

odbc 连oracle,ORACLE通过odbc数据源连接sqlserver

ms server 2003 oracle 10.2.0.1.0连接ms sql server 20051、控制面板--管理工具--obbc数据源管理器 系统DSN 中增加名称为 sjck 的DSN,并测试成功。2、复制F:\oracle\product\10.2.0\db_1\hs\admin\inithsodbc.ora,新建F:\oracle\product\10.2.0\db_1\hs\a...

weixin_30595763的博客 297

【深度学习】脸部修复,CodeFormer,论文,实战

Blind face restoration是一个高度 ill-posed 的问题,通常需要辅助引导来 1) 改善从降级输入到期望输出的映射,或者 2) 补充在输入中丢失的高质量细节。在本文中,我们展示了在一个小的代理空间中学到的离散码本先验可以通过将盲目的面部恢复建模为 a code prediction task来大大减少恢复映射的不确定性和模糊性,同时为生成高质量面部提供丰富的视觉元素。

q742971636的博客 2911

ORCALE使用ODBC链接SQLSERVER数据库

步骤: 1.首选定义ODBC源 2.修改ORCLE配置文件 3.创建远程DBLINK实例 //下面为所有ORCALE链接SQLSERVER步骤

silence 647

sqlserver连接oracle(通过ODBC)

折腾完access2007因为公司某个新的软件不支持2007,而且access2007超过2G就会慢,要找一个替代的产品,原先用一个很老的后面发现格式不行,所以决定用sqlserver2008.考虑到授权问题,我们选择的是express版本。 安装sqlserversqlserver SSMS工具,就是管理工具了。安装当中记得选择用户和配置密码。 安装oracle客户端。这里需要注意的就是,...

edonzhon 5421

[zt] OracleSQL Server互连

作者:gototop ------------------------------------------------------------------------- 另一篇 http://...

cuixie2370的博客 86

OracleSQL Server互连

不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现其它数据库的互联。 而ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),当然之前ORACLE还采用过通用连接技术。目前ORACLE利用透...

weixin_33888907的博客 111

SQLSERVERORACLE互连

<br />不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂家的具体实现技术不一样,如:在SQLSERVER里面叫做LINKED SERVER,通过ODBC实现其它数据库互连。而ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),当然之前ORACLE还采用过通用连接技术。目前ORACLE利用透明网关可以实现和SQLSERVER,SYBASE,DB2等多种数据库互连。<br />一、透明网关<br />透明网关的体系结

3255

oracle9i透明网关技术(for sql server)

不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现其它数据库的互联...

177

跨库访问--Oraclesqlserver

from:http://blog.csdn.net/zjfstudio/article/details/4929941一、在SQLServer中连接另一个SQLServer库数据在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器:EXEC master.dbo.sp_addlinkedserver @server = N'别名', @srvproduct=N'库名',@...

lzpgala的博客 905
上一篇:   突破oracle for win2K的2G内存限制
下一篇: win2000不能自动启动oracle服务全攻略
ansy
博客等级 码龄21年 3粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值