Oracle Data Guard Redo传输服务

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1.Redo传输服务介绍

Redo传输服务在Oracle Data Guard配置的成员和其他数据库之间进行自动redo数据传输。

Redo传输目标支持Oracle Data Guard备数据库归档日志库Oracle Streams下游捕获数据库Far sync实例和Zero Data Loss Recovery Appliance等。

每个redo传输目标被分别配置成通过以下两种传输模式接收redo数据
1同步传输模式与事务提交同步地传输redo数据。事务不能够提交直到所有事务产生的redo已经成功地发送到每个启用的使用同步传输模式的redo传输目标为止。
虽然在主数据库和SYNC redo传输目标之间没有距离限制当主数据库和SYNC redo传输目标之间的网络延时增加时事务提交延时也会增加。
最大安全保护模式和最大可用模式使用这种传输模式。

2异步传输模式与事务提交异步地传输redo数据。不用等待事务产生的redo已经成功地发送到任何使用异步传输模式的redo传输目标事务就可以提交。
最大性能模式使用这种传输模式。


2.Redo传输服务配置

2.1. 配置数据库来发送redo数据

使用LOG_ARCHIVE_DEST_nn是从1到31的整数数据库初始化参数来指定redo传输目标。

数据库初始化参数LOG_ARCHIVE_DEST_STATE_n相对应于LOG_ARCHIVE_DEST_n参数这个参数用来启用或禁用相应的redo目标。

LOG_ARCHIVE_DEST_STATE值描述
ENABLERedo传输服务可以传输redo数据到该目标缺省值。
DEFERRedo传输服务不传输redo数据到该目标。
ALTERNATE如果与目标属于同一个组的其他目标通讯失败将启用此目标。

LOG_ARCHIVE_DEST_n初始化参数的属性列表

属性描述
SERVICE这是redo传输目标的属性列表中必须首先配置的属性。SERVICE属性用来指定连接到redo传输目标的Oracle Net服务名称。服务名称必须 是通过Oracle Net命名方法可以解析成一个匹配redo传输目标上的Oracle Net监听的Oracle NET连接描述符。连接描述符必须指定使用一个专用服务器连接除非这是redo传输目标的默认的连接类型。
SYNC指定使用同步redo传输模式来发送redo数据到redo传输目标。
ASYNC指定使用异步redo传输模式来发送redo数据到redo传输目标。如果没有指定SYNC或ASYNC属性将会使用异步redo传输模式。
NET_TIMEOUT指定LGWR进程等待redo数据已经被使用同步redo传输模式的目标成功接收确认的时间。如果确认没有在NET_TIMEOUT指定的时间秒内收到redo传输连接将会中止并将错误写入日志。Oracle建议不论是否使用同步redo传输模式都设置NET_TIMEOUT属性这样redo传输错误导致的redo源数据库停顿的最大持续时间才可以被精确地控制。
注也可以设置数据库初始化参数DATA_GUARD_SYNC_LATENCY这是针对所有同步传输目标的全局参数参数定义了主数据库在至少一个同步备数据库确认收到redo之后中断后面的传输目标之前等待的最长时间。
AFFIRM/NOAFFIRMAFFIRM属性指定从源数据库接收的redo在写入备redo日志后才进行确认。NOAFFIRM属性用来指定redo不需要等待接收到的redo写入备redo日志就可以确认。
DB_UNIQUE_NAME用来指定redo传输目标的DB_UNIQUE_NAME。如果已经定义了LOG_ARCHIVE_CONFIG数据库初始化参数它的值中包含DG_CONFIG列表那么必须指定DB_UNIQUE_NAME属性。
VALID_FOR指定在什么情况下redo传输服务会传输redo数据到一个redo传输目标。Oracle建议为Oracle Data Guard配置中的每个站点的每个redo传输目标设置VALID_FOR属性这样redo传输服务在角色转换后将继续发送redo数据到所有的备数据库不管哪个备数据库获得了主数据库角色。
REOPE指定尝试自动重新连接到一个由于之前的错误而不活动的redo传输目标的最短的时间秒
COMPRESSION指定使用压缩格式传输redo数据到一个redo传输目标

示例
DB_UNIQUE_NAME=BOSTON
LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(BOSTON,CHICAGO,HARTFORD)’
LOG_ARCHIVE_DEST_2=‘SERVICE=CHICAGO ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILE,
PRIMARY_ROLE) REOPEN=60 COMPRESSION=ENABLE DB_UNIQUE_NAME=CHICAGO’
LOG_ARCHIVE_DEST_STATE_2=‘ENABLE’
LOG_ARCHIVE_DEST_3=‘SERVICE=HARTFORD SYNC AFFIRM NET_TIMEOUT=30
VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) REOPEN=60 COMPRESSION=ENABLE
DB_UNIQUE_NAME=HARTFORD’
LOG_ARCHIVE_DEST_STATE_3=‘ENABLE’

查询视图V$ARCHIVE_DEST来查看每个redo传输目标的当前配置和状态。
col dest_name format a20
col destination format a20
col target format a10
col alternate format a20
col db_unique_name format a15
col dependency format a10
col remote_template format a10
select dest_id,dest_name,status,target,destination,valid_type,valid_now,valid_role,db_unique_name,transmit_mode from v$archive_dest;

DEST_NAME            STATUS  TARGET   DESTINATIO VALID_TYPE      VALID_NOW        VALID_ROLE   DB_UNIQUE TRANSMIT_MOD
-------------------- ------- -------- ---------- --------------- ---------------- ------------ --------- ------------
LOG_ARCHIVE_DEST_1   VALID   PRIMARY  USE_DB_REC ONLINE_LOGFILE  YES              ALL_ROLES    orcl      SYNCHRONOUS
                                      OVERY_FILE
                                      _DEST

LOG_ARCHIVE_DEST_2   VALID   STANDBY  lxorcl2    ONLINE_LOGFILE  YES              PRIMARY_ROLE lxorcl2   PARALLELSYNC
LOG_ARCHIVE_DEST_3   VALID   STANDBY  lxorcl     ONLINE_LOGFILE  YES              PRIMARY_ROLE lxorcl    PARALLELSYNC
LOG_ARCHIVE_DEST_4   VALID   PRIMARY  +RECO/orcl STANDBY_LOGFILE WRONG VALID_ROLE STANDBY_ROLE orcl      SYNCHRONOUS
                                      /standby_a
                                      rchivelog

2.2. 配置数据库来接收redo数据

Redo传输目标必须配置来接收和归档来自源数据库的redo数据。

2.2.1. 管理备redo日志

同步和异步redo传输模式要求一个redo传输目标有一个备redo日志。备redo日志用来存储从另外一个数据库接收的redo数据。备redo日志在结构上与redo日志相同使用与创建和管理redo日志相同的SQL语句来创建和管理。

通过redo传输从其他数据库接收到的redo数据被远程文件服务器remote file serverRFS前台进程写到当前备redo日志组。当redo源数据库进行日志切换时接收到的redo将会写到下一个备redo日志组之前使用的备redo日志组会被ARCn后台进程进行归档。

Redo源数据库的按顺序进行写入和归档redo日志文件组的过程会在每个redo传输目标上通过按顺序写入和归档备redo日志组的过程来进行镜像。

每个备日志文件的大小必须至少与redo源数据库的最大的redo日志文件一样大为了管理方便Oracle建议redo源数据库的所有redo日志文件与redo传输目标的的备redo日志文件的大小保持一致。

**对于redo源数据库的每个redo线程备redo日志必须至少比redo源数据库的redo日志多包含一个redo日志组。**在redo源数据库上查询视图V$LOG来确认redo源数据库含有几个redo日志组然后查询视图V$THREAD来确认redo源数据库含有几个redo线程。
SQL> SELECT GROUP#, BYTES FROM V$LOG;

在redo目标数据库上确认备redo日志组的数量和文件大小
SQL> SELECT GROUP#, BYTES FROM V$STANDBY_LOG;

非RAC环境增加备日志文件
SQL> ALTER DATABASE ADD STANDBY LOGFILE(‘+DATA/ORCL/STANDBYLOG/SLOG1.redo’, ‘+RECO/ORCL/STANDBYLOG/SLOG1.redo’) SIZE 128M;
SQL> SELECT GROUP#, BYTES/1024/1024 M FROM V$STANDBY_LOG;

RAC环境增加备日志文件
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 (‘+DATA/ORCL/STANDBYLOG/SLOG11.redo’,‘+RECO/ORCL/STANDBYLOG/SLOG12.redo’) SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 6 (‘+DATA/ORCL/STANDBYLOG/SLOG21.redo’,‘+RECO/ORCL/STANDBYLOG/SLOG22.redo’) SIZE 200M;

查看备日志信息
SQL> SELECT group#,sequence#,thread#,archived,status FROM V$STANDBY_LOG;

    GROUP#  SEQUENCE#    THREAD# ARC STATUS
---------- ---------- ---------- --- ----------
         5         68          1 YES ACTIVE
         6          0          1 NO  UNASSIGNED
         7          0          2 YES UNASSIGNED
         8          0          2 YES UNASSIGNED
         9          0          1 YES UNASSIGNED
        10          0          2 YES UNASSIGNED

2.2.2. redo直接写入归档redo日志文件的情况

如果备redo日志组不存在或者发送redo来解决redo gap在备数据库上接收到的redo数据将会直接写入到归档日志文件。当发生这种情况时redo会写入参数LOG_ARCHIVE_DEST_n的属性LOCATION定义的位置。


3. 验证配置

查询V$DATAGUARD_CONFIG视图来验证Oracle Data Guard配置。
SQL> col db_unique_name format a15
SQL> col parent_dbun format a15
SQL> select * from v$DATAGUARD_CONFIG;

DB_UNIQUE PARENT_DBUN                    DEST_ROLE         CURRENT_SCN     CON_ID
--------- ------------------------------ ----------------- ----------- ----------
orcl      NONE                           PRIMARY DATABASE    102113946          0
lxorcl2   orcl                           LOGICAL STANDBY     102113913          0
lxorcl    orcl                           PHYSICAL STANDBY    102113919          0

4. 监控redo传输服务

4.1. 监控redo传输状态

在redo源数据库上执行以下步骤来监控redo传输状态
1确认每个线程最近的归档序号
SQL> SELECT MAX(SEQUENCE#), THREAD# FROM V$ARCHIVED_LOG WHERE RESETLOGS_CHANGE# = (SELECT MAX(RESETLOGS_CHANGE#) FROM V$ARCHIVED_LOG ) GROUP BY THREAD#;

MAX(SEQUENCE#)    THREAD#
-------------- ----------
           625          1
           612          2

2确认每个redo传输目标最近的归档redo日志文件

SQL> SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> ‘DEFERRED’ AND STATUS <> ‘INACTIVE’;

DESTINATION                    STATUS  ARCHIVED_THREAD# ARCHIVED_SEQ#
------------------------------ ------- ---------------- -------------
                               VALID                  1           625
lxorcl2                        VALID                  2             4
lxorcl                         VALID                  2           612
+RECO/orcl/standby_archivelog  VALID                  1           625

3 检查redo传输目标是否已经接收到归档redo日志文件。每个目标都有一个关联的ID号可以查询V$ARCHIVE_DEST视图来鉴别每个目标的ID号。以下假设目标1指向本地归档redo日志目标2指向redo传输目标。执行以下查询来确认redo传输目标是否遗失日志文件
SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
(SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1)
LOCAL WHERE LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND THREAD# = LOCAL.THREAD#);

4 设置redo源数据库和redo传输目标的LOG_ARCHIVE_TRACE数据库初始化参数来跟踪redo传输过程。


4.2. 监控redo同步传输响应时间

视图V$REDO_DEST_RESP_HISTOGRAM包含了每个redo传输目标的响应时间。
每个传输目标的数据包含一序列的行每行代表一个响应时间。为了简化记录保存响应时间在300秒以内会取整为秒大于300秒的响应时间分类为600120024004800或9600秒。
每行包含4列FREQUENCY, DURATION, DEST_ID和TIME。
FREQUENCY列包含某个特定的响应时间观察到的次数。
DURATION列对应响应时间。
DEST_ID列用于区别传输目标。
TIME列包含上次行更新的时间戳。

列出传输目标2的响应时间
SQL> SELECT FREQUENCY, DURATION FROM V$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 AND FREQUENCY>1;

列出传输目标2的最慢响应时间
SQL> SELECT max(DURATION) FROM V$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 AND FREQUENCY>1;

列出传输目标2的最快响应时间
SQL> SELECT min(DURATION) FROM V$REDO_DEST_RESP_HISTOGRAM WHERE DEST_ID=2 AND FREQUENCY>1;

注传输目标最长的观察响应时间不能超过NET_TIMEOUT参数定义的最大值因为如果redo传输目标在NET_TIMEOUT定义的时间内没有响应redo传输信息redo同步传输模式会话将会被中止。


4.3. 发现和解决redo gap

redo传输中断时会产生redo gap当redo传输恢复时redo传输服务自动检测redo gap发送缺失的redo数据到传输目标来解决redo gap。
解决redo gap需要的时间直接与redo gap的大小成正比与redo源数据库和redo传输目标之间的网络带宽成反比。可以使用redo传输压缩参数LOG_ARCHIVE_DEST_n的COMPRESSION属性来减少redo gap的处理时间。


4.3.1.手工处理redo gap

在某些不能自动执行redo gap处理的情况中需要手工处理。例如当主数据库不可使用时逻辑备数据库上的redo gap需要手工处理。


4.3.1.1. 物理备数据库手工处理redo gap

在物理备数据库上执行以下查询来确认是当前是否存在阻塞Redo Apply的redo gap:
SQL> select * from v$archive_gap;

THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 				7 			 10

上面的示例中物理备数据库目前缺失线程1的从序列7到序列10的日志文件。

在主数据库上执行以下查询来定位归档redo日志文件
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 10;

NAME
------------------------------------------------------
/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc

将这些日志文件复制到物理备数据库然后进行注册。
SQL> ALTER DATABASE REGISTER LOGFILE ‘/physical_standby1/thread1_dest/arcr_1_7.arc’;
SQL> ALTER DATABASE REGISTER LOGFILE ‘/physical_standby1/thread1_dest/arcr_1_8.arc’;
SQL> ALTER DATABASE REGISTER LOGFILE ‘/physical_standby1/thread1_dest/arcr_1_9.arc’;


4.3.1.2. 逻辑备数据库手工处理redo gap

在逻辑备数据库上查询视图DBA_LOGSTDBY_LOG来确认当前是否存在阻塞SQL Apply的redo gap。
在下面的示例中线程1显示了2个文件因此归档redo日志文件的序列存在gap如果不存在gap每个线程只显示1个文件。

SQL> COLUMN FILE_NAME FORMAT a55
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L WHERE NEXT_CHANGE# NOT IN (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#) ORDER BY THREAD#, SEQUENCE#;

THREAD#     SEQUENCE# FILE_NAME
---------- ---------- -----------------------------------------------
1              6        /disk1/oracle/dbs/log-1292880008_6.arc
1             10        /disk1/oracle/dbs/log-1292880008_10.arc

复制缺失的日志文件序列78和9到逻辑备数据库然后进行注册。
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE ‘/disk1/oracle/dbs/log-1292880008_7.arc’;
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE ‘/disk1/oracle/dbs/log-1292880008_8.arc’;
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE ‘/disk1/oracle/dbs/log-1292880008_9.arc’;


4.4. redo传输服务等待事件

可以使用Oracle等待事件在redo源数据库上跟踪redo传输等待时间。下表列出V$SYSTEM_EVENT动态性能视图的几个等待事件

等待事件描述
LNS wait on ATTACH等待创建到所有ASYNC和SYNC redo传输目标的redo传输会话花费的总时间
LNS wait on SENDREQ等待redo数据写到所有ASYNC和SYNC redo传输目标花费的总时间
LNS wait on DETACH等待中止到所有ASYNC和SYNC redo传输目标的redo传输连接花费的总时间

4.5. 调整redo传输

Data Guard会自动调整redo传输来优化性能。然而如果你想更好地控制参数可以调整redo传输使用的以下方面
1 网络配置
2 存储配置
3 快速恢复区域
4 redo 传输配置




来源《Oracle Data Guard Concepts and Administration, 19c》

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle

“Oracle Data Guard Redo传输服务” 的相关文章