签到成功

知道了

CNDBA社区CNDBA社区

Oracle 18c Data Guard 切换保护模式 和 主备库角色操作手册

2018-09-01 00:29 3570 0 原创 Oracle 18c
作者: dave

在之前的博客,我们看了Oracle 18c Data Guard 环境的搭建, 这里我们看下其他几个与DG相关的内容。

Oracle 18c Data Guard 搭建手册
https://www.cndba.cn/dave/article/2995

1 查看DG是否正常

搭建好DG后腰验证DG是否同步正常,可以直接在主库创建测试表,看数据能否同步过去,另外就是查看相关配置是否正常,然后切换下日志,看备库是否正常应用。

#主库查看对应的archive_dest 是否正常,这里正常可以保证归档数据可以传送到备库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select DEST_NAME,STATUS,ERROR from v$archive_dest where DEST_ID=2;

DEST_NAME          STATUS         ERROR
------------------------- ------------------ --------------------------------------
LOG_ARCHIVE_DEST_2      VALID

#备库检查MRP进程是否启动:
SQL>  select process,status,sequence# from v$managed_standby; 
PROCESS        STATUS             SEQUENCE#
------------------ ------------------------ ----------
ARCH           CONNECTED                 0
DGRD           ALLOCATED                 0
DGRD           ALLOCATED                 0
ARCH           CLOSING                17
ARCH           CONNECTED                 0
ARCH           CLOSING                18
MRP0           APPLYING_LOG             19
RFS           IDLE                  0
RFS           IDLE                 19
RFS           IDLE                  0

10 rows selected.v

#如果没有启动,手工启动MRP:
SQL> alter database recover managed standby database disconnect;
Database altered.

#备库检查日志是否apply,因为可能日志传过来,但并没有入库,在主备库同时查询,2边一致,DG就是同步的。 
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select sequence#,applied from v$archived_log;

 SEQUENCE# APPLIED
---------- ------------------
     9 YES
    10 YES
    11 YES
    12 YES
    13 YES
    14 YES
    15 YES
    16 YES
    17 YES
    18 YES

10 rows selected.
2 启用Real-Time Apply

在Oracle 12c 之前的Data Guard 环境中,默认情况下备库apply redo 是从备库的归档文件中读数据的。在Oracle 12c 中,默认的策略改成直接从standby redo log file中读取,采用real-time apply的方式进行。
对于物理standby,如果配置了standby redo日志并且处于ARCHIVELOG模式,在执行alter database recover managed standby database语句启动MRP时默认就是Real-Time Apply。 http://www.cndba.cn/cndba/dave/article/2996

如果想取消MRP,执行以下语句:http://www.cndba.cn/cndba/dave/article/2996

SQL> alter database recover managed standby database cancel;

关于该特性的详细说明,可以参考我的博客:
Oracle 12c 新特性 — DG 默认使用 Real-Time Apply
https://www.cndba.cn/cndba/dave/article/213

3 DG保护模式切换

Oracle DG有三种不同的保护模式供选择:最大可用(Maximum Availability),最大性能(Maximum Performance),最大保护(Maximum Protection)。关于他们的区别这里不再描述,可以参考官方手册的说明。 Oracle 默认采用的是最大性能。

SQL> select protection_mode,database_role,protection_level from v$database;                      

PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------------------- -------------------------------- ------------------------
MAXIMUM PERFORMANCE             PRIMARY              MAXIMUM PERFORMANCE

三种模式之前切换的时候,有2个必要条件:

http://www.cndba.cn/cndba/dave/article/2996

  1. 配置了standby redo log
  2. Log_archve_dest_2 参数需要配置sync, affirm的方式, 这个我们在安装的时候已经配置过。
alter system set log_archive_dest_2='service=cndba_s lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=cndba_s' scope=both ;

SQL> select member from v$logfile;
MEMBER
----------------------------------------------------------------------------------------
/u01/app/oracle/oradata/cndba/redo01.log
/u01/app/oracle/oradata/cndba/redo02.log
/u01/app/oracle/oradata/cndba/redo03.log
/u01/app/oracle/oradata/cndba/stdredo01.log
/u01/app/oracle/oradata/cndba/stdredo02.log
/u01/app/oracle/oradata/cndba/stdredo03.log
/u01/app/oracle/oradata/cndba/stdredo04.log

SQL> show parameter log_archive_dest_2

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
log_archive_dest_2     string        service=cndba_s lgwr affirm sync valid_for=(online_logfiles, primary_role) db_unique_name=cndba_s

所以三种模式之间可以随意切换。http://www.cndba.cn/cndba/dave/article/2996

3.1 最大性能切换到最大可用
#主库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select protection_mode,database_role,protection_level from v$database;                      
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------------------- -------------------------------- ---------------------------
MAXIMUM PERFORMANCE             PRIMARY              MAXIMUM PERFORMANCE

#在主库进行切换:
SQL> alter database set standby database to maximize availability;
Database altered.

#主库验证:
SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------------------- -------------------------------- --------------------------
MAXIMUM AVAILABILITY             PRIMARY              MAXIMUM AVAILABILITY

#备库验证:
SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------------------- -------------------------------- -------------------------
MAXIMUM AVAILABILITY             PHYSICAL STANDBY          MAXIMUM AVAILABILITY
3.2 最大可用切换到最大保护
#主库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------------------------------------- ----------------------------------------
MAXIMUM AVAILABILITY             PRIMARY              MAXIMUM AVAILABILITY

#在主库进行切换:
SQL> alter database set standby database to maximize protection;  
Database altered.

#主库验证:
SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
------------------------------------------------------- ----------------------------------------
MAXIMUM PROTECTION             PRIMARY              MAXIMUM PROTECTION

#备库验证:
SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
------------------------------------------------------- ----------------------------------------
MAXIMUM PROTECTION             PHYSICAL STANDBY          MAXIMUM PROTECTION
3.3 最大保护切换到最大可用
#主库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------- -------------------------------- ----------------------------------------
MAXIMUM PROTECTION             PRIMARY              MAXIMUM PROTECTION

#在主库进行切换:
SQL> alter database set standby database to maximize availability;
Database altered.

#主库验证:
SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
-------------------------- -------------------------------- ----------------------------------------
MAXIMUM AVAILABILITY             PRIMARY              MAXIMUM AVAILABILITY

#备库验证:
SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
------------------------- -------------------------------- ----------------------------------------
MAXIMUM AVAILABILITY             PHYSICAL STANDBY          MAXIMUM AVAILABILITY
3.4 最大可用切换到最大性能
#主库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
---------------------------- -------------------------------- ----------------------------------------
MAXIMUM AVAILABILITY             PRIMARY              MAXIMUM AVAILABILITY

#在主库进行切换:
SQL>  alter database set standby database to maximize performance;
Database altered.

#主库验证:
SQL> select protection_mode,database_role,protection_level from v$database;
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
------------------------- -------------------------------- ----------------------------------------
MAXIMUM PERFORMANCE             PRIMARY              MAXIMUM PERFORMANCE

#备库验证:
SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
-------------------------- -------------------------------- ----------------------------------------
MAXIMUM PERFORMANCE            PHYSICAL STANDBY      MAXIMUM PERFORMANCE
3.5 最大性能切换到最大保护
#主库:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select protection_mode,database_role,protection_level from v$database; 
PROTECTION_MODE              DATABASE_ROLE              PROTECTION_LEVEL
------------------------ -------------------------------- ----------------------------------------
MAXIMUM PERFORMANCE             PHYSICAL STANDBY      MAXIMUM PERFORMANCE

#在主库进行切换:
SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any instance

这里切换失败,需要主库在MOUNT状态下切换,也可以采用曲线救国的方式,先切换到最大可用,在切换到最大保护。这里和上面相同,不再操作。

http://www.cndba.cn/cndba/dave/article/2996

4 Switchover 切换示例
1)验证数据库是否可以进行switchover

12c以后的switchover语句多了VERIFY选项,可以检查切换所需的许多条件。比如备库的数据库版本,MRP是否启动,数据是否同步等。 http://www.cndba.cn/cndba/dave/article/2996

#MRP 没有启动的情况:
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> alter database switchover to cndba_s verify;
alter database switchover to cndba_s verify
*
ERROR at line 1:
ORA-16470: Redo Apply is not running on switchover target

#正常情况:
SQL> alter database switchover to cndba_s verify;
Database altered.
2)在主数据库上进行switchover
SQL> alter database switchover to cndba_s; 
Database altered.
3)在新主库上打开数据库
[dave@www.cndba.cn dbs]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:30:14 2018
Version 18.3.0.0.0
Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
MOUNTED

SQL> alter database open;
Database altered.
4)启动新备库
[dave@www.cndba.cn ~]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Thu Aug 30 15:31:04 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1191181104 bytes
Fixed Size            8895280 bytes
Variable Size          889192448 bytes
Database Buffers      285212672 bytes
Redo Buffers            7880704 bytes
Database mounted.
Database opened.

#启用MRP 进程:
SQL> alter database recover managed standby database disconnect;
Database altered.

#查看新备库状态,切换完成,当然可以需要验证一下主备库同步情况,可以参考第一节:
SQL> select database_role ,open_mode from v$database;
DATABASE_ROLE             OPEN_MODE
-------------------------------- ----------------------------------------
PHYSICAL STANDBY         READ ONLY WITH APPLY
5 Failover切换示例
1) 推送日志

Failover是不可逆的操作,一般仅当主库不能打开时使用,如果DG的保护模式不是最大保护,那么在激活备库之前,还是需要尽可能将未发送到备库的日志推动到备库。 只要主库能启动到mount状态就可以进行该操作。

SQL> startup mount
SQL> alter system flush redo to cndba_p;

如果不能执行该操作,那么只能手工将未传过去的日志文件传到备库,然后手工注册:
SQL> alter database register physical logfile 'filespec1';

也可以通过以下语句查询GAP信息:
SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;
2)正常的Failover 操作
#备库关闭mrp
SQL> alter database recover managed standby database cancel;
Database altered.

#在备库上执行failvoer
SQL> alter database failover to cndba_p;
Database altered.

如果操作正常,那么备库就已经激活。 如果报错,且alert log 日志里显示与far sync instance相关的错误,可以直接加force 选项:
SQL> alter database failvover to pdbcndba_p force;
3)强制failover

如果正常的Failover 无法成功执行,可以采用这里的强制的激活failover,该操作可能会丢数据:

http://www.cndba.cn/cndba/dave/article/2996
http://www.cndba.cn/cndba/dave/article/2996

SQL> alter database activate physical standby database;
Database altered.
4) 启动新主库
SQL> alter database open;
Database altered.

SQL> select open_mode,database_role from v$database;
OPEN_MODE                 DATABASE_ROLE
---------------------------------------- --------------------------------
READ WRITE                 PRIMARY

然后重新搭建DG 环境,做好备份。 http://www.cndba.cn/cndba/dave/article/2996http://www.cndba.cn/cndba/dave/article/2996

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 645
    转载
  • 198
    评论
  • 访问:9626571次
  • 积分:4543
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ