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

作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(WebjavaPython)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBaseTDSQL数据库、国产达梦数据库以及红帽子认证
从业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 是否已经创建
[[email protected] ~]$ echo $ORACLE_SID
[[email protected] ~]$ sqlplus / as sysdba
[email protected]> set line 999 pagesize 999
[email protected]> col name for a25
[email protected]> 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日志是应用的

在这里插入图片描述
[email protected]> select * from v$logfile;
在这里插入图片描述
[email protected]> !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;

[email protected]> shutdown immediate
[[email protected] ~]$ sqlplus / as sysdba

在这里插入图片描述

[email protected]> startup  mount;

[email protected]> set line 999 pagesize 999
[email protected]> col name for a10
[email protected]> col VALUE for a60

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

##主库开库
[email protected]> 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.备库执行切换

[[email protected] ~]$ echo $ORACLE_SID
[[email protected] ~]$ sqlplus / as sysdba

[email protected]> set line 999 pagesize 999
[email protected]> col name for a10
[email protected]> col VALUE for a60

[email protected]> alter database commit to switchover to primary with session shutdown;

[email protected]> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, 
db_unique_name from v$database;

[email protected]> select status from v$instance;

在这里插入图片描述

5.新备库开启实时应用

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

在这里插入图片描述

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>