Oracle 异构服务实践
作者:王晓琴 来源:ccw.com.cn 发布时间:2007-08-17 10:00:00
近期公司准备开发一个计费项目,数据库当然还是选用我最信赖的Oracle了。由于一部分基础数据在一台Win2000 Server的SQL Server 7.0数据库中,需要考虑灵活、可靠的方法实现从Or
acle数据库端访问SQL Server中的数据。于是我有机会真正体验Oracle 9I 中的新增强功能“异构服务”(Heterogeneous Services)并为此痛苦了近两天。
先简单介绍一下Oracle异构服务。它是包含在Oracle数据库中的一个模块,通过使用透明网关(Transparent Gateway)或通用连接(Generic Connectivity)来访问其它非Oracle系统的数据。异构服务的主要结构如下:
各模块简要说明如下:
异构服务模块:属于Oracle数据库的内核部分,负责大部分异构连接的处理;
代理通用代码:对所有基于异构服务产品的通用代码;
驱动:是与非Oracle系统直接交互的模块,实现从异构服务API到特定非Oracle系统API的映射。
代理:是Oracle Server连接非Oracle系统的进程,包括两部分即代理通用代码和针对特定非Oracle系统的驱动。代理的位置可以与非Oracle系统在同一台机器上,或与Oracle Server在同一台机器上,或者单独在一台机器上。我这次实践的环境采用的是最后一种。
我们所说的透明网关和通用连接实际是异构服务中代理的两种类型。其中透明网关是功能较强的,它通过代理进程从Oracle Server访问各地的异构分布式数据库,而提供给用户的感觉是这些数据库仍然是Oracle数据库,Oracle公司提供对大多数商业数据库的透明网关。通用连接则有较多限制,它使用用户自己提供的ODBC或OLE DB驱动程序作为异构服务的代理驱动,并且要求这些驱动必须要安装在Oracle Server的$ORACLE_HOME目录下。
好了,让我们开始亲自动手吧!我的实验环境如下:
主机
操作系统
软件环境
ORADB
Redhat Linux 7.2
Oracle 9.0.1 Database Standard Edition
GATEWAY
Windows 2000 Professional
Oracle 9.0.1 Database Standard Edition
SQL Server 2000 (安装类型“仅连接”)
SQLDB
Windows 2000 Server
SQL Server 7.0(访问的数据库是CDR)
注意:Transparent Gateway for Microsoft SQL Server目前只有NT版本,因此网关程序tg4msql仅包含在Oracle Database for windows中。
系统结构:
配置过程:
从SQLDB开始:
1. 在SQLDB上创建将要从Oracle数据库访问SQL Server的用户testuser/testuser,并授予可访问CDR的权限;
接下来是GATEWAY:
1.安装好Oracle 9.0.1 Database for Windows后,会发现在%ORACLE_HOME%下有目录tg4msql,以及网关程序$ORACLE_HOME\BIN\tg4msql;
2. 确保在c:\winnt\system32下有ntwdblib.dll,若没有则安装SQL Server2000(安装类型选择“仅连接”)。此文件是访问SQL Server的DB-Library;
3. ping SQLDB看是否通,若不通则在\winnt\system32\drivers\etc\hosts文件中增加一行,用来解析SQLDB的IP地址,很简单不多说了。
4. 修改%ORACLE_HOME%\tg4msql\inittg4msql.ora,这是网关进程启动时需要的初始化文件。只需改下面这一行即可:
HS_FDS_CONNECT_INFO=SQLDB.CDR
5.修改%ORACLE_HOME%\network\admin\listener.ora如下:
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=tg4msql)
(ORACLE_HOME=e:\Oracle\OraHome_9I) #用你的%ORACLE_HOME%
(PROGRAM=tg4msql)
)
)
最后是ORADB:
1.修改tnsnames.ora
CDR = #CDR是我起的,你可以选用其它
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST= GATEWAY)
(PORT = 1521)
)
(CONNECT_DATA =
(SID = tg4msql) #tg4msql必须要和GATEWAY上listener.ora中的SID一致
)
(HS = OK) #这很重要,告诉Oracle Server要调用异构服务模块来处理
)
2.修改initora9i.ora(数据库初始化文件)
global_names=true,重启数据库。
否则会在执行sql时报错:ORA-02085: 数据库链接CDR与HO.WORLD相连结
原因如下:The GLOBAL_NAMES parameter when set to TRUE implies that database link name should be similar to the Global database name to which you are trying to connect.
3.创建访问SQLDB.CDR的数据库链接
SQL>create public database link cdr connect to testuser identified by testuser using ‘CDR’;
4. OK!最后执行SQL测试看是否能正常访问SQL Server
SQL>select count(*) from all_tables@cdr;
看上去并不复杂,但这些内容是我在查阅若干文档和多次的失败后的精华所在呀!这其中获得的很多东西必须靠自己亲自实践才能牢记于心和融会贯通,所以你可不要仅仅满足于最后的结果,继续去啃Oracle的技术文档吧!祝开心、顺利!


猜你喜欢
- Linux环境MySQL服务器级优化讲解 摘要:本节简单介绍了如何在服务器级优化数据库的性能
- Python中对sqlite3数据库进行操作时,经常需要用到字段名,然而对于sqlite使用select语句并不能象MySql等数据库一样返
- 以前经常吃公司旁边的食堂,人多,排队。夏天的时候,我们总要找一个靠窗口通风好的地方坐,没有空调只有风扇,风扇很多,开关都集中在一个地方,应该
- 前言:在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题:1、生成的测试报告中,用例名称后有dict() -&g
- Simple Nested-Loop Join我们来看一下当进行 join 操作时,mysql是如何工作的。常见的 join 方式有哪些?如
- 今天一同事需要整理http://ics.cnvd.org.cn/工控漏洞库里面的信息,一看960多个要整理到什么时候才结束。所以我决定写个爬
- 方法一: 在给出的输入CD-KEY(序列号)的界面中,输入你已经安装的windows server 2003 的CD-KEY(序列号)即可以
- 配合上一篇文章的联系人应用(https://www.aspxhome.com/article/161160.htm),实现配套的基于node
- 通配符的分类:%百分号通配符: 表示任何字符出现任意次数 (可以是0次)._下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符
- 本文实例为大家分享了python实现简单计算器的具体代码,供大家参考,具体内容如下今天学习到python中界面设计部分,常用的几种图形化界面
- 一、前言将mysql5.7 升级为mysql 8.0准备两个压缩包!二、备份数据库1.cmd进入原来数据库中的路径2.输入命令 m
- 前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息。通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用<!DOCTYPE html><html lang=
- 核心代码:#!/usr/bin/python#Filename:friendbook.pyimport cPickle as pimport
- 在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。一、熟悉
- 本文实例讲述了golang简单位运算。分享给大家供大家参考,具体如下:// http://play.golang.org/p/idG7Ri_
- 我们可以把全体人数当作一个集合,想要往其中加入新人有不同的增加方式。可以一周增加一次,也可以集中到月底一起加入集体。我们今天所要讲的在pyt
- SQL Server2005扩展函数已经不是一件什么新鲜的事了,但是我看网上的大部分都是说聚合函数,例子也比较浅,那么这里就讲讲我运用扩展函
- 本文实例总结了CI框架中数据库操作函数$this->db->where()相关用法。分享给大家供大家参考,具体如下:CI 框架数
- 下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下: