有备无患,Oracle物理DG的switchover切换

Posted IT邦德

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有备无患,Oracle物理DG的switchover切换相关的知识,希望对你有一定的参考价值。

作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\\java\\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
mysql、Oceanbase(OBCA)认证
分布式TBase\\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验

擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

前言

DG切换是在主数据库与其备数据库之间进行角色反转,切换确保不丢失数据。 这是对于主系统计划维护的典型操作。 在切换期间,主数据库转换到备角色,备数据库转换到主角色。 转换发生不需要重建任何数据库。

1.相关知识点

1.1 角色

Oracle 数据库中含有两种角色
用户角色:定义了一组权限的集合,该角色可以分配给用户,也可以分配给其他角色。
数据库角色:在备库中数据库扮演什么样的角色,primary还是standby。
v$database.DATABASE_ROLE标识了数据库的运行角色。
处于备库环境中,数据库有两种类型:phsical standby、logical standby。

1.2 角色管理服务

一个数据库运行在如下互相排斥的角色中。
Primary role:一个数据库运行在primary role,那么log transport services传递重做日志到备库。
Standby role:一个数据库运行在standby role,那么log apply services应用归档日志到备库。
角色管理服务允许用户动态地在主、备库中进行角色切换。
用户可以使用角色管理服务,进行主、备库的计划中的角色切换,
这个叫switchover,或者是非计划中的角色切换,叫failover。

1.3 Switchover&Failover

切换是在主数据库与其备数据库之间进行角色反转,切换确保不丢失数据。
这是对于主系统计划维护的典型操作。
在切换期间,主数据库转换到备角色,备数据库转换到主角色。
转换发生不需要重建任何数据库。
(1)Switchover
用到的场景:计划中的角色转换或用户操作系统和硬件的维护等。
(2)Failover
故障转移是当主数据库不可用时执行的。
故障转移只有在主数据库灾难故障的情况下执行,并且故障转移导致备数据库转换到主角色。
用到的场景:非计划中的角色切换,一般在紧急情况下使用。
根据保护模式的不同,可能会没有或者很少的数据损失。
(3)角色转换决策树
角色转换(switchover&failover)的最终目的是尽快地使主库在线,
而同时尽量减少数据损失或者是实现无数据损失。
尽量选择宕机时间最短,同时数据损失最小的策略。
总之在失败切换前,应该先考虑修复主数据库或者进行无数据损失的角色转换。
即使使用无数据损失的备库方案,修复主库可能会比切换到备库更快点。
如果修复了主库,那么就不需要修改客户端的连接。
但是如果修复工作导致了任何的数据损失,那么可能需要重新创建所有的备用数据库。
通常情况下,最合适切换的备库为已经应用了最多的归档日志的备用数据库。

1.4 实验目标

① 主库和物理dg的switchover切换
② 还原为最初始的状态

2.主库参数设检查

这里主要有2个内容需要检测:
a.fal_client、fal_server、standby_file_management、
db_file_name_convert 、log_filename_convert是否合理
b.standbylog file 是否已经创建
[oracle@Pri ~]$ echo $ORACLE_SID
[oracle@Pri ~]$ sqlplus / as sysdba
SYS@pri> set line 999 pagesize 999
SYS@pri> col name for a25
SYS@pri> col VALUE for a60
SELECT a.NAME,a.VALUE
FROM   v$parameter a
WHERE  a.NAME LIKE '%file_name_convert'
OR     a.NAME LIKE 'fal%'
OR     a.NAME LIKE 'standby_file%';

select  GROUP#, DBID db_id, THREAD#, SEQUENCE#, BYTES,
USED, ARCHIVED, STATUS, FIRST_CHANGE#,
NEXT_CHANGE#,LAST_CHANGE# from v$standby_log ;

注:此处主库standby日志未应用,备库standby日志是应用的


SYS@pri> select * from v$logfile;

SYS@pri> !ls /u01/app/oracle/oradata/standby*

3.主库执行切换

select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, 
db_unique_name from v$database;

alter database commit to switchover to physical standby with session shutdown;

SYS@pri> shutdown immediate
[oracle@Pri ~]$ sqlplus / as sysdba

SYS@pri> startup  mount;

SYS@pri> set line 999 pagesize 999
SYS@pri> col name for a10
SYS@pri> col VALUE for a60

select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, 
db_unique_name from v$database;

##主库开库
SYS@pri> alter database open;


告警日志:

开库后状态如下:

这一步容易出现问题,注意下边的问题:

alter database commit to switchover to physical standby with session shutdown;
稍等。。。。等待数据库挂掉后再启动到mount,千万别shutdown immediate,应该用shutdown abort,
等待告警日志中出现如下提示再进行下一步操作,否则可能导致switchover切换失败,主库将不可用.

Switchover: Primary controlfile converted to standby controlfile succesfully.
Switchover: Complete - Database shutdown required
Completed: alter database commit to switchover to physical standby with session shutdown
Sat Oct 30 23:22:01 2021
Performing implicit shutdown abort due to switchover to physical standby

4.备库执行切换

[oracle@Std ~]$ echo $ORACLE_SID
[oracle@Std ~]$ sqlplus / as sysdba

SYS@std> set line 999 pagesize 999
SYS@std> col name for a10
SYS@std> col VALUE for a60

SYS@std> alter database commit to switchover to primary with session shutdown;

SYS@std> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, 
db_unique_name from v$database;

SYS@std> select status from v$instance;

5.新备库开启实时应用

[oracle@source ~]$ echo $ORACLE_SID
[oracle@source ~]$ sqlplus / as sysdba
SYS@PROD> set line 999
SYS@PROD> set line 999
SYS@PROD> select name, LOG_MODE, OPEN_MODE, database_role, 
SWITCHOVER_STATUS, db_unique_name from v$database;
SYS@PROD> select status from v$instance;
SYS@PROD> alter database recover managed standby database using current logfile disconnect;

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

以上是关于有备无患,Oracle物理DG的switchover切换的主要内容,如果未能解决你的问题,请参考以下文章

oracle dg 主备切换SWITCHOVER 全过程记录

DG中switchover切换操作

dataguard dg切换的两种方式

Oracle 19c使用dbca来搭建物理DG

Oracle 物理 DG 转 ADG 步骤

Oracle10g物理DG详细配置方法及步骤