dataguard之日志传输服务

介绍日志传输服务

日志传输服务控制着redo数据自动从数据库传输到一个或多个目的地。日志传输服务也管理着由于网络导致的归档redo日志的任何断层(gap).可以传输redo数据到本地和远程目的地,远程目的地可以包含下面的任意类型:物理和逻辑备库,归档日志存放处。下面的额图是一个简单的日志传输服务归档redo数据到主库本地,同时传输它到远程归档redo日志文件或standby redo日志文件目的地

dataguard之日志传输服务_第1张图片

数据要传输到哪里

有几个支持的目的地类型

1dg备库

2归档日志存放地,这种类型的存放地允许异地归档redo数据。

3Oracle Streams real-time downstream capture database

4Oracle Change Data Capture staging database

使用log_archive_dest_n参数配置目的地

n是1到10的,使用location或service属性来指定归档redo数据到哪里。对每个log_archive_dest_n初始化参数,指定相应的log_archive_dest_state_n参数,该参数指明了相应的目的地是否可用该参数有下面几个值

Attribute Description
ENABLE Redo transport services can transmit redo data to this destination. This is the default.
DEFER Redo transport services will not transmit redo data to this destination. This is a valid but unused destination.
ALTERNATE This destination is not enabled, but it will become enabled if communication to its associated destination fails.
RESET Functions the same as DEFER, but clears any error messages for the destination if it had previously failed.

修改目的地的属性

修改在主库上的下一次的日志切换时生效,下面是修改的一个例子

SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=boston VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;

设置闪回恢复区

如果你设置了一个闪回恢复区而且没有设置任何的本地归档目录,那么log_archive_dest_10暗地里就设置成了use_db_recovery_file_dest,也就是归档的日志文件将会被送到闪回恢复区。在闪回恢复区中的redo日志文件名会用omf自动生成,不会基于log_archive_format初始化参数来生成。

使用standby_archive_dest目的地

在物理备库上,你可以定义standby_archive_dest参数来指定闪回恢复区,例如:

STANDBY_ARCHIVE_DEST='LOCATION=USE_DB_RECOVERY_FILE_DEST'

该参数在逻辑备库上被忽略

怎么发送redo数据

在主库上,dg使用归档进程或是lgwr进程来说收集事务redo数据,传输到备库上,尽管不能用归档进程和lgwr进程 写redo数据到同一个目的地,你可以指定lgwr写到一些目的地,同时归档进程发送redo数据到别的目的地。

使用归档进程来归档redo数据

默认的,在主库上日志传输服务使用归档进程来归档在线redo日志,归档进程只支持最大性能数据保护模式,别的数据保护级别你必须使用lgwr来传送数据。

控制归档进程行为的初始化参数

log_archive_max_processes初始化参数指定了arcn进程的最大个数,默认有4个归档进程被调用当主库启动的时候,oracle动态调整进程的数量来平衡归档负载,因此这个参数在不同时间可能会不同。如果归档的压力大,可以调整最大值到30.

arcn归档进程

归档发生在主库上的日志切换的时候:

在主库上,当arc0进程成功的把在线重做日志归档到本地目的地后,arc1进程在本地的归档日志中传输到远程的备库上。

在远程目的地,remote file server进程写redo日志到归档的redo日志文件中。然后 redo apply或sql apply应用到备库上。

dataguard之日志传输服务_第2张图片

使用lgwr来归档redo数据

使用lgwr进程与使用arc进程不同,因为lgwr不是等待主库上的在线日志切换,然后一次写整个归档redo日志到远程目的地,lgwr进程在备库选择一个standby redo文件,这个文件能反映主库的当前在线日志文件的序列号。然后,当主库上生成redo的时候,它也传输到远程的地址上,传输到远程目的地既可以是同步的,也可以使异步的,基于是否使用了sync或async参数。对于最大保护模式或是最高性能模式,需要配置同步lgwr。

The SYNC attribute performs all network I/O synchronously, in conjunction with each write operation to the online redo log file, and waits for the network I/O to complete. Section 5.3.2.2 shows an example of synchronous network transmission in a Data Guard configuration. This is the default network transmission setting.

The ASYNC attribute performs all network I/O asynchronously and control is returned to the executing application or user immediately, without waiting for the network I/O to complete. Section 5.3.2.3 shows an example of asynchronous network transmission in a Data Guard configuration.

如果你配置了lgwr进程,但是因为一些原因lgwr进程变得不可用,那么redo传输会转换使用arc进程来完成归档操作。net_timeout属性建议配置,因为他控制着lgw在中断网络r等待网络状态的时间。如果在net_timeout秒之内没有响应,那么lgwr返回一个错误信息。

在主库上,lgwr进程提交redo数据给一个或多个网络服务进程(lnsn),这个进程并行初始化网络io到多个远程目的地,对于lgwr sync目的地,事务在redo数据写到目的地之前是不会提交的。

在备库上,remote file server接受redo数据,写这些数据到redo日志文件中。

dataguard之日志传输服务_第3张图片

在主库上的日志切换触发备库上的一次日志切换,导致arcn进程在备库山归档备库的standby redo日志到归档日志文件。然后redo apply或是sql apply应用redo数据,如果实时应用被启用,dg在当前的standby redo文件中直接应用redo。

三种模式的最低要求

  Maximum Protection Maximum Availability Maximum Performance
Redo archival process LGWR LGWR LGWR or ARCH
Network transmission mode SYNC SYNC SYNC or ASYNC when using LGWR process. SYNC if using ARCH process
Disk write option AFFIRM AFFIRM AFFIRM or NOAFFIRM
Standby redo log required? Yes Yes No, but it is recommended


管理日志文件

当redo数据在主库传输过来,redo数据被写到log_archive_dest_n参数指定的目录下的归档的redo日志文件中,你也可以再备库上通过standby_archive_dest初始化参数来指定可选的目录,来存放从主库接受过来的日志文件来归档。如果这2个参数都被指定了,那么standby_archive_dest初始化参数会覆盖log_archive_dest_n参数。

当数据库启动后,按下面的规则来找归档日志文件的目录:

  1. If the STANDBY_ARCHIVE_DEST initialization parameter is specified on the standby database, that location is used.
  2. If the LOG_ARCHIVE_DEST_n parameter contains the VALID_FOR=(STANDBY_LOGFILE,*) attribute, then the location specified for this destination is used.

  3. If the COMPATIBLE parameter is set to 10.0 or greater and none of the LOG_ARCHIVE_DEST_n parameters contain the VALID_FOR=(STANDBY_LOGFILE,*)attribute, then an arbitrary LOG_ARCHIVE_DEST_n parameter that is valid for the destination is used.

  4. If none of the initialization parameters have been specified, then archived redo log files are stored in the default location for the STANDBY_ARCHIVE_DEST initialization parameter.

    To see the implicit default value of the STANDBY_ARCHIVE_DEST initialization parameter, query the V$ARCHIVE_DEST view:

    SQL> SELECT DEST_NAME, DESTINATION FROM V$ARCHIVE_DEST 
      2> WHERE DEST_NAME='STANDBY_ARCHIVE_DEST';
    

管理备库的redo日志文件

向以存在的日志组中添加standby redo log 成员

ALTER DATABASE ADD STANDBY LOGFILE MEMBER '/disk1/oracle/dbs/log2b.rdo'  TO GROUP 2;


当归档日志文件生成及rman备份生成,oracle向控制文件的重用部分添加新的记录,如果没有记录可以复用(因为所有的记录仍然在control_file_record_keep_time的时间内),那么控制文件会扩展,新的记录会添加进来。控制文件的最大大小事20000个数据块,如果db_block_size是8192,那么控制文件最大的大小事156MB。control_file_record_keep_time默认是7天,要设置这个参数比在磁盘上的最老的备份时间长。




你可能感兴趣的:(dataguard,日志传输)