Data Guard Services
以下的三部分组成Data Guard的日志数据传输、日志数据应用以及改变数据库角色:
a)、日志传输服务(Redo Transport Services)
b)、日志应用服务
c)、角色转换
1、Redo Transport Services(日志传输服务)
控制生产数据库自动将redo data发送至一个或多个归档地址
1.1、使用ARCH进程
用ARCH模式传输不写Standby Redo logs,直接保存成归档文件存放于Standby端。
说明:
逻辑Standby接收后将其转换成SQL语句,在Standby数据库上执行SQL语句实现同步,这种方式叫SQL Apply。
物理Standby接收完Primary数据库生成的REDO数据后,以介质恢复的方式实现同步,这种方式也叫Redo Apply。
缺点:使用ARCH进程传递日志有一个问题,即只有primary database归档以后才会传送日志到 standby database。这就导致,如果primary database异常宕机,联机日志中的redo内容就会发生丢失,所以要避免这种数据丢失,我们则要使用LGWR,而使用LGWR又分为SYNC(同步)和ASYNC(异步两种方式)。Primary database 缺省使用ARCH进程。
使用ARCH进程传递最大问题在于:Primary Database 只有在发生归档时才会发送日志到Standby Database。如果Primary Database 异常宕机,联机日志中的Redo 内容就会丢失,因此使用ARCH 进程无法避免数据丢失的问题,要想避免数据丢失,就必须使用LGWR,而使用LGWR 又分SYNC(同步)和ASYNC(异步)两种方式。
1.2使用LGWR 进程的SYNC 方式
1)Primary Database 产生的Redo 日志要同时写道日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程(Network Server Process),再由LNSn(LGWR Network Server process)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。
2)LGWR 必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary Database 上的事务才能提交,这也是SYNC的含义所在。
3)Standby Database的RFS进程把接收到的日志写入到Standby Redo Log日志中。
4)Primary Database的日志切换也会触发Standby Database 上的日志切换,即Standby Database 对Standby Redo Log的归档,然后触发Standby Database 的MRP或者LSP 进程恢复归档日志。
因为Primary Database 的Redo 是实时传递的,于是Standby Database 端可以使用两种恢复方法:
实时恢复(Real-Time Apply):只要RFS把日志写入Standby Redo Log 就会立即进行恢复;
归档恢复:在完成对Standby Redo Log 归档才触发恢复。
Primary Database默认使用ARCH进程,如果使用LGWR进程必须明确指定。使用LGWR SYNC方式时,可以同时使用NET_TIMEOUT参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,LGWR 进程会抛出错误。示例如下:
alter system set log_archive_dest_2 = 'SERVICE=db_phystdby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY NET_TIMEOUT=30' scope=both;
1.3使用LGWR进程的ASYNC 方式
使用LGWR SYNC方法的可能问题在于,如果日志发送给Standby Database过程失败,LGWR进程就会报错。也就是说Primary Database的LGWR 进程依赖于网络状况,有时这种要求可能过于苛刻,这时就可以使用LGWR ASYNC方式。它的工作机制如下:
1) Primary Database 一段产生Redo 日志后,LGWR 把日志同时提交给日志文件和本地LNS 进程,但是LGWR进程只需成功写入日志文件就可以,不必等待LNSn进程的网络传送成功。
2) LNSn进程异步地把日志内容发送到Standby Database。多个LNSn进程可以并发发送。
3) Primary Database的Online Redo Log 写满后发生Log Switch,触发归档操作,也触发Standby Database对Standby Database对Standby Redo Log 的归档;然后触发MRP或者LSP 进程恢复归档日志。
因为LGWR进程不会等待LNSn进程的响应结果,所以配置LGWR ASYNC方式时不需要NET_TIMEOUT参数。示例如下:
alter system set log_archive_dest_2 = 'SERVICE=db_phystdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PHYSTDBY ' scope=both;
2、Log Apply Services (日志应用服务)
在备库上应用redo data来保持与主数据库事务的一致。可以应用归档日志文件,或real-time apply(实时应用)启用,用 standby redo log files(备用重做日志文件)
Standby Database 的RFS(Remote File Server)进程接收到日志后,就把日志写到Standby Redo Log或者Archived Log文件中,具体写入哪个文件,取决于Primary 的日志传送方式和Standby database的位置。如果写到Standby Redo Log文件中,则当Primary Database发生日志切换时,也会触发Standby Database上的Standby Redo Log 的日志切换,并把这个Standby Redo Log 归档。如果是写到Archived Log,那么这个动作本省也可以看作是个归档操作。
在日志接收中,需要注意的是归档日志会被放在什么位置:
1)如果配置了STANDBY_ARCHIVE_DEST 参数,则使用该参数指定的目录。
2)如果某个LOG_ARCHIVE_DEST_n 参数明确定义了VALID_FOR=(STANDBY_LOGFILE,*)选项,则使用这个参数指定的目录。
3)如果数据库的COMPATIBLE参数大于等于10.0,则选取任意一个LOG_ARCHIVE_DEST_n的值。
4)如果STANDBY_ARCHIVE_DEST 和LOG_ARCHIVE_DEST_n 参数都没有配置,使用缺省的STANDBY_ARCHIVE_DEST参数值,这个缺省值是$ORACLE_HOME/dbs/arc.
3、Role Transitions(角色转换)
改变数据库角色,从一个备份库到主库,或从一个主库到备库,使用switchover 或 failover操作。
Oracle数据库运行在primary 或standby两个角色中的一个。应用Data Guard,你可以使用switchover 或failover操作来改变一个数据库的角色。
Switchover 是一个primary database 和其一个standby database之间的人物。Switchover 确保无数据丢失。通常这样做的目的是为了维护主系统。在切换期间,primary database 转换为了standby 角色,standby 数据库则转变为primary角色。这种转换,而无需重新创建数据库。
Failover 是当住数据库不可以用。Failover只在primary database发生灾难性故障事故,failover可以将standby数据库过渡为一个primary角色。数据库管理员可以配置Data Guard来确保无数据丢失。