Dataguard技术是Oracle数据库据自带的数据同步功能,它的基本原理是将日志文件从源数据库传输到目标数据库,然后在目标数据库上应用这些日志文件,从而使目标数据库与源数据库保持数据同步,这是一种数据库级别的数据复制技术。Dataguard具有优越的性能、极好的稳定性以及较好的可管理性,因此其被广泛运用于数据库的高可用、数据库容灾(同城灾备以及异地灾备)以及数据保护等应用场合。
随着Oracle数据库新版本的不断推出,Dataguard技术也得到了很多的增强。
在Oracle 10g及以前版本中,对于Dataguard物理备库,可以以只读的方式打开数据库,但此时Media Recovery进程利用日志进行数据同步的过程就停止了。而如果物理备库处于日志应用的过程中数据库就不能打开提供查询,这也就是说日志应用和以只读方式打开数据库这两个状态是不能同时存在的。可见Oracle 10g及之前的版本,物理Dataguard无法提供近实时的查询功能。
到了Oracle 11g,Oracle数据库引入了Active Dataguard技术解决了以前版本的Dataguard技术的不足,也就是在应用redo日志的时候,物理备库可以以read-only模式打开。通过使用Active Dataguard,可以在物理备库进行近实时的查询或者导出数据,从而减少对主库的访问和压力。Active Data Guard适用于一些只读性的应用,比如,有的报表业务或者历史数据查询,仅仅会需要访问数据,而不会修改或新增数据,这些应用可以转移到备库上,避免对主库资源的消耗。当启用Active Dataguard后,通过查询v$database可以发现备库是处于READ ONLY WITH APPLY状态的,这与普通的READ ONLY模式是不同的。
使用Active Dataguard技术,可以近实时的在备库进行数据查询,但是对于一些需要对数据进行读写操作的应用场景,Active Dataguard技术也无能为力。例如,很多公司的异地灾备数据库系统都是基于Dataguard技术实现的。当进行灾备演练时,异地的灾备数据库必须提供读写访问。此时必须在异地灾备数据库上停止日志应用进程,并将数据库由standby状态切换到open状态。异地备数据库一旦进行切换,也就意味着Dataguard复制状态被取消,主库和备库此时是完全独立的两个数据库,不再存在数据同步的关系。这种灾备演练的做法,存在2个非常大的缺点:
-
数据库同步状态被打破,也就意味着数据库灾备系统失去了灾备的功能。在灾整个备演练过程中,生产库的数据是无法同步到灾备系统的。一旦主数据库发生灾难性故障,那么也就意味着演练时间段中主库上产生的心数据将发生丢失。
-
当灾备演练结束时,必须重新建立Dataguard复制。如果数据库比较小,这个过程不需要太多时间。但是如果数据库规模庞大,数据量达到上T甚至数十T,那么重建Dataguard将是一个非常耗费时间的过程,这又必将大大增加灾备数据库系统不可用的风险。
其实Oracle 11g版本中,Dataguard引入了另外一种特殊的状态,该状态下可以较好的解决上面所说的问题,那就是snapshot standby dataguard。在灾备演练过程中,需要临时性的对备库进行读写访问时,就可以将物理standby数据库转换为snapshot standby数据库。当数据库处于snapshot standby状态时,数据库是独立于主库的,因此是可以进行读写操作(read-write)的。但是,处于snapshot standby数据库仍然正常接收主库的归档日志(但是不应用这些日志),从而保证主库的数据可以安全的传到异地灾备系统。当灾备演练结束后,可以通过简单的命令,非常容易的再将snapshot standby数据库转换为物理standby数据库,继续同步主库日志。可见,Snapshot standby状态具有如下优点:
-
整个过程中,snapshot standby备库可以一直接收主库传来的日志,从而保证数据安全。
-
Snapshot standby可以很容易的重新切换为物理备库状态,因此不需要耗费大量的重建时间,管理更加简单。
配置Snapshot standby和配置普通的Dataguard的过程几乎完全一样。唯一不同的是,为了开启snapshot stansby功能,数据库必须配置闪回恢复区(Flash Recovery Area, FRA)。这里需要强调的是,配置闪回恢复区,并不是说数据库要打开闪回数据库功能。下面对snapshot standby的配置和切换过程进行测试,测试时普通的Dataguard已经配置完毕,这里不再细述。
-
物理standby备库配置闪回恢复区
-
物理standby数据库停止应用日志进程
-
切换备库到snapshot standby数据库状态
-
查看数据库的角色和打开的状态
从上面的输出可以看出,数据库处于snapshot standby状态,并且此时数据库是read write模式打开的,因此可以对外提供读写访问。
其实snapshot standby的实现是基于Oracle的闪回数据原理的,这也是为什么需要配置闪回恢复区的原因。一旦数据库切换到snapshot stadby模式,那么数据库将自动创建一个闪回还原点,如下所示。
如果需要将处于snapshot standby的数据库切换回物理standby模式,仅仅需要关闭数据库,将数据库重新启动到mounted模式,并将数据库切换为physical standby模式即可。切换后,需要再次关闭数据库,并启动数据库到mounted模式,然后启动日志应用进程即可,这里不再做演示。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30109892/viewspace-2062814/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30109892/viewspace-2062814/