Menu Close

Oracle DataGuard架构

1. 日志发送(Redo Send)

Primary Database产生的redo日志需要发送到standby Database。
发送动作由primary database的LGWR或者ARCH进程完成。
不同的归档目的地可以使用不同的进程;但同一目的地只能选用一种进程。
ARCH进程发送日志:

  1. Primary Database 产生redo log 的日志被LGWR进程写到联机日志。
  2. 当一组联机日志被写满后,会发生日志切换(log switch),并且会触发本地归档;
  3. 完成本地归档后,联机日志可以被覆盖重用;
  4. ARC1进程通过Net把归档日志发送给Standby Database的RFS进程。
  5. Standby Database的RFS进程把接收到的日志写入归档日志;
  6. Standby Database的MRP进程(Redo Apply)或者LSP进程(SQL Apply)在Standby Database上应用这些日志,进而同步数据。

总结:

  1. 默认情况下,Primary Database使用ARCH进程发送日志。
  2. 使用ARCH进程发送日志只支持最高性能保护模式。 对于最大保护和最高可用性两种模式而言,强调的都是一点,redo数据必须实时应用于standby数据库。可使用ARCH进程发送日志并非将redo数据实时应用于standby数据库,而是只有Primary Database日志归档完成后才会将归档日志发送到Standby Database。当Primary Database异常宕机时,就会有部分未归档的数据无法传到Standby Database,造成数据丢失。

使用LGWR进程的SYNC方式:

  1. LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程,再由LNSn进程把日志通过网络发送给远程目的地
  2. 必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary 数据库上的事务才能提交,这就是SYNC。
  3. Standby数据库的RFS进程把接收到的日志写入到Standby Redo Log日志中。
  4. Primary 数据库的日志切换也会触发Standby数据库上的日志切换,即Standby数据库对Standby Redo Log的归档。
  5. Standby数据库可以使两种恢复方式:

1)实时恢复(Real Time Apply),只要RFS把日志写入Standby Redo Log日志中就会立即进行恢复;
2)归档时恢复,在完成对Standby Redo Log的归档后才恢复

使用LGWR进程的ASYNC方式:

  1. LGWR负责把日志写入本地日志文件;不必等待LNS进程的网络传送成功。
  2. LNSn进程异步的将日志发送到Standby数据库
  3. Primary 数据库的日志切换也会触发Standby数据库上的日志切换,即Standby数据库对Standby Redo Log的归档。
  4. MRP或LSP 进程恢复归档日志

主节点上,日志传输服务主要使用如下几个进程:

  • LGWR
    LGWR搜集事务日志,并且更新联机日志。在同步模式下,LGWR直接将redo信息直接传送到备库中的RFS进程,主库在继续进行处理前需要等待备库的确认。在非同步情况下,也是直接将日志信息传递到备库的RFS进程,但是不等待备库的确认信息主库进程可以继续运行处理。

  • ARCH
    ARCHn或者是一个SQL session执行了一个归档操作,为了恢复的需要,创建了一个联机日志的拷贝。Archn进程可以在归档的同时,传递日志流到备库的RFS进程。该进程还用于前瞻性检测和解决备库的日志不连续问题(GAP)。

  • FAL
    Fetch archive log 只有物理备库才有该进程。
    FAL进程提供了一个client/server的机制,用来解决检测在主库产生的连续的归档日志,而在备库接受的归档日志不连续的问题。 该进程只有在需要的时候才会启动,而当工作完成后就关闭了,因此在正常情况下,该进程是无法看见的。 我们可以设置通过LGWR,ARCH进程去传递日志到备库,但是不能两个进程同时传送。

该进程是如何交互的呢?fal_client,fal_server参数的

2. 日志接收(Redo Receive)与日志应用(Redo Apply)

备库节点上,日志应用进程主要使用如下的进程:

  • RFS remote file server
    Rfs进程主要用来接受从主库传送过来的日志信息。对于物理备用数据库而言,RFS进程可以直接将日志写进备用重做日志,也可以直接将日志信息写到归档日志中。为了使用备库重做日志,我们必须创建他们,一般和主库的联机日志大小以及组一样。

  • Arch
    只对物理备库,arch进程归档备库重做日志,这些日志以后将被MPR进程应用到备库。

  • MRP managed recovery process
    该进程只针对物理备库。该进程应用归档日志到备库。如果我们使用SQL语句启用该进程ALTER DATABASE RECOVER MANAGED STANDBY DATABASE,那么前台进程将会做恢复。如果加上disconnect语句,那么恢复过程将在后台进程,发出该语句的进程可以继续做其他的事情。

  • LSP logical standby process
    只有逻辑备库才会有该进程。LSP进程控制着应用归档日志到逻辑备用数据库。