分类: 服务器与存储
2008-06-11 20:46:04
可以将归档的重做日志从primary database数据库异步写到standby database数据库来使primary database数据库在极少损失性能的前提下,最小化地减少数据的丢失。
如果重做日志数据到达standby database数据库后快速应用到standby database数据库,则在primary database数据库出现问题时可以快速地 failover 到standby database数据库。然而,如果延缓一定时间后再应用重做日志数据,可以避免primary database数据库的错误快速地传播到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功能,与几个新增加的防止用户错误和瘫痪的模块合起来称为Oracle9 i 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