Oracle9i Data Guard 通过使用称为standby database的数据库来防止出现数据的灾难。它通过将 primary database数据库的重做日志传到并应用到standby database数据库来使standby database数据库与 primary database数据库同步:
可以将重做日志直接从primary database数据库同步写到standby database数据库来完成完全没有数据损失的灾难保护。这会给primary database数据库的性能带来一定的性能损失。
可以将归档的重做日志从primary database数据库异步写到standby database数据库来使primary database数据库在极少损失性能的前提下,最小化地减少数据的丢失。
如果重做日志数据到达standby database数据库后快速应用到standby database数据库,则在primary database 数据库出现问题时可以快速地 failover 到standby database数据库。然而,如果延缓一定时间后再应用重做日志数据,可以避免 primary database数据库的错误快速地传播到standby database数据库。
如附图所示,当联机重做日志在本地归档时,它们同时通过 Oracle Net 传送到了standby database:
数据库数据保护级别
可以用如下的方式设置standby database数据库来达到不同的数据库数据保护级别:
Guaranteed protection:规定在修改主数据库时,至少有一个备用数据库有效。假如主(Primary Database)备(Standby Database)之间的连接中断, Oracle会通过中断主实例的工作来防止主备数据库之间的数据的不一致,保证无数据丢失。这种模式对数据库性能的影响较大。
Instant protection:规定在修改主数据库时,至少有一个备用数据库有效。与Guaranteed protection模式不同的是当主备数据库之间的连接中断时,允许主备数据库之间的数据的不一致,并当恢复连接后,解决数据不一致的现象。这种模式对主数据库的性能有较小的影响。
Rapid protection:主数据库的修改快速应用在备用数据库上。会出现数据丢失,但对数据库性能的影响小。
Delayed protection:主数据库的修改在延迟一定的时间后应用在备用数据库上。Rapid protection和Delayed protection模式即使在网络连接有效时,也允许主数据库与所有的备用数据库有数据分歧,数据的丢失量等同于主数据库联机重做日志的未归档数。这种方式对数据库性能的影响小。
如何限制数据的丢失量
在primary/standby配置下,所有的归档日志被发送到了standby 节点,这使standby 节点的数据保持着更新。但是,如果 primary 数据库意外关闭,联机的日志将会丢失,因为它们尚未归档并发送到standby节点。这使得 primary 和standby 数据库之间会有一个差异。
Oracle9i 可以用以下的方法来限制这个差异:
DBA可以选择让LGWR在将重做日志数据写到本地磁盘的同时将数据发送到 standby 数据库。该功能称为standby零数据丢失(standby zero data loss)。这种方法从本质的角度讲提供了远程重做日志镜像,但带来的问题是会极大地损失性能。
设置系统初始化参数ARCHIVE_LAG_TARGET。该参数是一个日志文件开始使用到被发送到standby数据库的时间间隔。该参数的推荐值是 1800秒(需要注意的是,没有传送到 standby 数据库的已经提交的事务会丢失,因此长的事务会使standby数据库损失更多的数据)。
Oracle9i Data Guard数据防护与Oracle8 Standby Database的关系
Oracle Standby Database 是最经常使用的最有效的灾难解决方案。在过去版本的基础上,Oracle9i 又进行了许多改进,使其功能远远超过了基本的灾难恢复要求。通过将复杂的工作自动化,并对监控、警告、以及控制机制的大规模改进,Standby Database 和一些新的模块可以帮助DBA 从错误操作、瘫痪、以及其它的灾难中恢复(这些灾难都可能毁掉数据库)。另外,通过使用 Oracle9i Standby Database,由于硬件和软件升级造成的宕机时间也可以极度缩短。
Oracle9i 将改进过的8版本的Standby Database功能,与几个新增加的防止用户错误和瘫痪的模块合起来称为Oracle9i Data Guard。
Oracle8 Automated Standby Database 提供了创建和自动维护生产数据库拷贝的手段来防止灾难的发生。Oracle8 Automated Standby Database 具有以下的功能:
当primary database 产生日志后,系统自动用归档日志更新standby databases。
一个primary database可以最多有4个standby databases。这4个standby databases是与primary database完全一样的拷贝,它们都可以接管primary database的处理。
Oracle使用标准的恢复方法来将归档日志应用到每个standby databases。这些日志的应用是自动的,DBA也可以人工应用这些日志。
primary database 处于打开和活动状态,而standby database处于恢复或者打开只读状态。
大多数的基于Oracle8的灾难保护方案包括一个Automated Standby Database。因为Oracle数据库可以用备份和日志恢复,所以任何应用都可以使用Automated Standby Database。通过Oracle Net传输归档日志对 primary database的性能影响可以忽略不计。
物理的Standby Database和逻辑的Standby Database
Standby Database可以分为物理的Standby Database和逻辑的Standby Database:
物理 Standby Database。物理 Standby Database是 Oracle8 Automated Standby Database的Oracle9i版本。它们之间只有一个差异:日志传输服务现在是一个分离的模块,并支持物理standby database和新的逻辑standby database。
物理 Standby Database的含义是Standby Database在物理上与primary database 一样。因为恢复是使用 ROWID 一块对一块进行的,Standby Database的数据块与primary database的数据快一样。数据库模式一定是一样的,且不能以读/写的方式打开。
逻辑 Standby Database。逻辑 Standby Database是将归档的日志转化为SQL 事务,并将它们应用到打开的Standby Database。因为数据库是打开的,它在物理上与primary database是不一样的。然而,从逻辑角度讲,Standby Database与primary database是一样的,因此可以接管primary database的处理。在这种情况下,Standby Database还可以并发地进行其它的工作,例如建立一些与primary database不一样的索引和物化视图,完成决策支持等任务。
逻辑 Standby Database 是最重要的数据保护特性。就像物理 standby database一样,它使用归档的日志在standby database上进行处理,在primary database出现问题的情况下也没有问题。
当选择使用物理standby database、逻辑standby database、或两者都用时,要考虑以下一系列的因素。
逻辑standby database可用于两个目的。当要对逻辑standby database进行改变时,其数据库可以打开。
逻辑standby database需要DBA更高的技能。
使数据保护极大化的解决方案通常包括逻辑的和物理的standby databases。
数据库Failover和Switchover
当主数据库发生宕机,且不能及时恢复时,Oracle会丢弃主数据库,将备用数据库转变为主数据库。当 failover之后,备用数据库变成为主数据库,从而丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式。
Failover 有以下特点:
主数据库offline,备用数据库online,这种操作由系统和软件失败引起。
即使在备用数据库上应用重做日志,也可能出现数据丢失的现象,除非备用数据库运行在guaranteed protection模式下。
原主数据库重新使用时必须reinstantiated(start instance)。
其它的备用数据库也需reinstantiated。
在主数据库正常工作时,Oracle 允许 DBA 将主数据库切换到备用数据库,此备用数据库变为主数据库,而原主数据库变为备用数据库。
数据库的切换可以从主数据库角色切换到备用数据库角色,也可从备用数据库角色切换到主数据库角色。
Switchover 有以下特点:
故意将主数据库offline,而将另一备用数据库online。可以如使用Switchover 功能完成系统的平滑升级工作。
即使在备用数据库上不应用重做日志,也不会造成数据的丢失。
数据库不需reinstantiated。这使主数据库几乎能立即在备用数据库上恢复它的功能,因此可经常进行定期维护而不需中断操作。
Oracle9i Data Guard的一些部件
日志传输服务(Log Transport Services)
Log Transport Services会被物理的和逻辑的standby database 都用到。它提供的功能包括控制不同的日志传输机制、日志传输错误处理和报告、以及在系统失败后获取丢失的日志。使用任何新的日志传输模式,数据的保护都可以得到保证。
Oracle9i Data Guard Broker
Data Guard broker提供了对日志传输服务的监测、控制、和自动化以及逻辑和物理standby的部件。例如,通过只用一个命令就可以启动 failover,Data Guard broker可被用于控制主要角色从primary到任何一种standby database转移的整个过程。用户可以从2种不同的界面来选择进行角色转换,使standby database 从primary database接管生产数据库的处理。一种选择是使用新的Oracle Enterprise Manager Data Guard Manager。该图形用户界面工具可进行大多的配置工作和操作功能。另一种选择是一个命令行工具,它提供了基本的监测、改变角色需要的所有命令、以及配置和设置Oracle9i Data Guard环境的能力。
Data Guard Manager 是Oracle Enterprise Manager的一部分。
Oracle9i LogMiner
在 Oracle9i中,LogMiner被做了极大的改进。LogMiner是一个关系工具,DBA可以利用这个工具使用SQL进行读、分析、和解释日志文件。LogMiner可以查看联机的和归档的重做日志文件。
LogMiner技术提供了逻辑standby database用到的基础结构。新的Oracle Enterprise Manager应用Oracle9i LogMiner Viewer 对已经存在的命令行界面增加了一个图形操作界面。
灾难恢复服务器(Disaster Recovery Server)和DRMON
在当今的电子商务世界中,在互连网上做生意的公司必须有一套一旦出现问题恢复应用和数据库的策略。每个DBA都应考虑灾难恢复以及计划好的或意外的 failover。Disaster Recovery (DR) Server 是帮助DBA达到更高系统可用性的产品的一部分。
Disaster Recovery (DR) Server 从根本上说是一系列松散连接的节点组成。这些节点将物理的和逻辑的standby 方案组合成了一个单独的易管理的灾难恢复解决方案。Disaster Recovery (DR) Server节点在物理分布上是松散的,是通过网络连接到一起的。每个 DR Server 节点可能是一个简单的实例,或是一个复杂的系统(例如一个 fail safe cluster)。 DR Server 将这些节点作为一个单独的分布计算系统来管理,从而其可用性会高于单独的节点。
DR Server 是通过将数据在节点间复制来实现其 failover 系统的。数据库管理员是这样来配置服务器的:数据库和应用在每个节点都激活。其中,一个节点设计成 primary节点,其数据库对应用来说是完全可用的,且其数据以日志的形式复制到其它的节点。其它的节点对primary节点来说是standby节点,它们接收从primary节点发来的日志并改变(从物理上或逻辑上)其数据库拷贝。
DR Server的standby节点是随时准备好在primary节点出现问题时进行接管的,从而在primary 节点出现灾难后数据和应用对用户来说仍然可用。
DR Server结构给DBA主要提供了两点重要功能:
它提供了DBA从逻辑上配置一个 failover 资源组来达到高可用性的方法。
它指定了组成DR Server 本身的基础计算框架。
[myimg]upload/oracle-dataguard.png[/myimg]