Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544347
  • 博文数量: 105
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1132
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 09:57
文章分类

全部博文(105)

文章存档

2011年(1)

2009年(41)

2008年(63)

我的朋友

分类: Oracle

2008-12-30 09:10:32

SwitchOver是Oracle DataGuard环境中一个很重要的角色,用来完成在primary database 和 standby databases中无任何数据丢失的主备切换。在主备切换中,采用switchover方式,可以保证不丢失任何数据。

在主备切换过程中,原来的 primary database 将转变为standby role ,而原来的standby database将转变为primary role. 这种模式的切换在主备端都不需要重建database.

与SwitchOver想对应,还有一种切换模式叫FailOver,FailOver是一种不可逆的从standy database 到primary database切换的过程,这种情况发生在主库不可用的情况下,比如主库的主机或存储出现重大故障,短期内无法修复的情况下。
 
注意一点:Oracle DataGuard是不能异构的。

下面解释一下什么是异构。
异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DMBS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性、完整性控制和安全性控制。异构数据库系统的异构性主要体现在以下几个方面:

计算机体系结构的异构

各个参与的数据库可以分别运行在大型机、小型机、工作站、PC或嵌入式系统中。

基础操作系统的异构

各个数据库系统的基础操作系统可以是Unix、Windows NT、 Linux等。

DMBS本身的异构

可以是同为关系型数据库系统的Oracle、 SQL Server等,也可以是不同数据模型的数据库,如关系、模式、层次、网络、面向对象,函数型数据库共同组成一个异构数据库系统。

----异构数据库系统的目标在于实现不同数据库之间的数据信息资源、硬件设备资源和人力资源的合并和共享。其中关键的一点就是以局部数据库模式为基础,建立全局的数据模式或全局外视图。这种全局模式对于建立高级的决策支持系统尤为重要。

----大型机构在许多地点都有分支机构,每个子机构的数据库中都有着自己的信息数据,而决策制订人员一般只关心宏观的、为全局模式所描述的信息。建立在数据仓库技术基础上的异构数据库全局模式的描述是一种好的解决方案。数据仓库可以从异构数据库系统中的多个数据库中收集信息,并建立统一的全局模式,同时收集的数据还支持对历史数据的访问,用户通过数据仓库提供的统一的数据接口进行决策支持的查询。

数据库转换

----对于异构数据库系统,实现数据共享应当达到两点:一是实现数据库转换;二是实现数据的透明访问。由华中科技大学开发的,拥有自主版权的商品化数据库管理系统DM3系统,通过所提供的数据库转换工具和API接口实现了这两点。

----DM3提供了数据库转换工具,可以将一种数据库系统中定义的模型转化为另一种数据库中的模型,然后根据需要再装入数据,这时用户就可以利用自己熟悉的数据库系统和熟悉的查询语言,实现数据共享的目标。数据库转换工具首先进行类型转换,访问源数据库系统,将源数据库的数据定义模型转换为目标数据库的数据定义模型,然后进行数据重组,即将源数据库系统中的数据装入到目的数据库中。

----在转换的过程中,有时要想实现严格的等价转换是比较困难的。首先要确定两种模型中所存在的各种语法和语义上的冲突,这些冲突可能包括:

命名冲突:即源模型中的标识符可能是目的模型中的保留字,这时就需要重新命名。
格式冲突:同一种数据类型可能有不同的表示方法和语义差异,这时需要定义两种模型之间的变换函数。
结构冲突:如果两种数据库系统之间的数据定义模型不同,如分别为关系模型和层次模型,那么需要重新定义实体属性和联系,以防止属性或联系信息的丢失。

----总之,在进行数据转换后,一方面源数据库模式中所有需要共享的信息都转换到目的数据库中,另一方面这种转换又不能包含冗余的关联信息。

----数据库转换工具可以实现不同数据库系统之间的数据模型转换,需要进一步研究的问题是:如果数据库转换同时进行数据定义模式转换和数据转换,就可能引起同一数据集合在异构数据库系统中存在多个副本,因此需要引入新的访问控制机制。在保证各个参与数据库自治,维护其完整性、安全性的基础上,对于异构数据库系统提供全局的访问控制、并发机制和安全控制。

----如果数据库转换只进行数据定义转换,不产生数据的副本,那么在新的目的数据库定义模型的框架下访问数据,实现上仍是对源数据库系统中数据的访问。这时利用新的数据库系统中的数据处理语言实现的事务,不能直接访问源数据库,必须进行事务级的翻译才可以执行。

数据的透明访问

----在异构数据系统中实现了数据的透明访问,用户就可以将异构分布式数据库系统看成普通的分布式数据库系统,用自己熟悉的数据处理语言去访问数据库,如同访问一个数据库系统一样。但目前还没有一种广泛使用的数据定义模型和数据查询语言,实现数据的透明访问可以采用多对一转换、双向的中间件等技术。开放式数据库互连(Open DataBase Connectivity,简称ODBC)是一种用来在相关或不相关的数据库管理系统中存取数据的标准应用程序接口(API)。ODBC为应用程序提供了一套高层调用接口规范和基于动态链接库的运行支持环境。目前,常用的数据库应用开发的前端工具如Power Builder、 Delphi等都通过开放数据库互联(ODBC)接口来连接各种数据库系统。而多数数据库管理系统(如:Oracle、Sybase、SQL Server等)都提供了相应的ODBC驱动程序,使数据库系统具有很好的开放性。ODBC接口的最大优点是其互操作能力,理想情况下,每个驱动程序和数据源应支持完全相同的ODBC函数调用和SQL语句,使得ODBC应用程序可以操作所有的数据库系统。然而,实际上不同的数据库对SQL语法的支持程度各不相同,因此,ODBC规范定义了驱动程序的一致性级别,ODBC API的一致性确定了应用程序所能调用的ODBC函数种类,ODBC 2.0规定了三个级别的函数,目前 DM3 ODBC API支持 ODBC 2.0规范中第二级扩展的所有函数。

----随着Internet应用的不断普及,Internet的异构分布式信息系统正在迅速发展,Java以其平台无关性、移植性强,安全性高、稳定性好、分布式、面向对象等优点而成为Internet应用开发的首选语言。在Internet环境下,实现基于异种系统平台的数据库应用,必须提供一个独立于特定数据库管理系统的统一编程界面和一个基于 SQL的通用的数据库访问方法。Java与数据库接口规范JDBC(Java Database Connectivity)是支持基本SQL功能的一个通用的应用程序编程接口,它在不同的数据库功能模块的层次上提供了一个统一的用户界面,为对异构数据库进行直接的Web访问提供了新的解决方案。 JDBC已被越来越多的数据库厂商、连接厂商、Internet服务厂商及应用程序编制者所支持。
 
 
但是,oracle 9I开始已经发布了异构服务器。
先简单介绍一下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是我起的,你可以选用其它
  
  (DEsrciptION =
  
  (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 ;
资料引用:
阅读(2019) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~