前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle 物理standby的角色转换

Oracle 物理standby的角色转换

作者头像
星哥玩云
发布2022-08-18 19:37:23
4660
发布2022-08-18 19:37:23
举报
文章被收录于专栏:开源部署开源部署

一. Oracle DataGuard简介

Oracle DataGuard;简称DG。是由一个Primary Database(主库)和一个或者多个Standby Database(备库)组成。对Oracle来说;本身不能提高性能。通过数据冗余来保护数据。由Primary Database对外提供服务;用户操作在Primary Database上操作;其操作的数据库Redo Log或者Archive log通过网络传输到Standby Database。Standby Database在重做这些日志。从而实现Primary Database和Standby Database数据同步。

架构图如下:

Oracle DataGuard中的Standby库有两种:物理Standby和逻辑Standby。

  • 逻辑Standby接收后将其转换成SQL语句,在Standby数据库上执行SQL语句实现同步,这种方式叫SQL Apply。
  • 物理Standby接收完Primary数据库生成的REDO数据后,以介质恢复的方式实现同步,这种方式也叫Redo Apply。

本例采用物理Standby架构;在Oracle DataGuard有两种角色:Primary和Standby

二、Oracle DataGuard角色以及角色转换

2.1、Oracle DataGuard两种角色

  • Primary角色:对应的数据库为主库。对外可提供读写操作;以及一些维护数据库操作也是在主库上。
  • Standby角色:对应的数据库为备库。对外只提供读操作。用于数据库的展示以及数据库备份。

2.2、角色转换

数据库对外提供高可用性;主库发生故障;备库可以提升为主库对外提供服务;不影响业务正常运行。这是需要做一个操作就是角色转换。

角色转换也有两种不同的操作类型:switchover和failover。前者是无损切换,不会丢失数据。后者有可能丢失数据。并且切换后原Primary数据库不再是该DataGuard一部分。其也有可能对外提供服务;在其他数据库称为“脑裂”。

2.2.1、switchover

是主数据库与其中一个standby数据库的转换,switchover能确保没有数据丢失,这是在有计划的系统维护时的典型做法。

使用场景

  • 有计划的灾备切换演练,如测试灾备站点的可用性,客户端连接等,确保主库发生重大意外时,可以切换至备库正常运转。
  • 主库长时间的维护升级,如OS升级,DB滚动升级,更换存储,更换OS硬件设备等。
  • 切换有风险,一般不做切换。
2.2.2、failover

在主数据库不活动的时候,Failover可将Standby数据库转换为主数据库角色,Failover可能会导致数据出现丢失的情况。Failover只在主数据发生失败的情况下才使用。

三、准备工作

  • 检查个数据库的初始化参数文件,主要确认各待转换角色的数据库,对不同角色的相关的初始化参数都进行正确的配置。
  • 检查即将成为Primary数据库的物理Standby服务器是否为归档模式
  • 检查物理Standby数据库的临时文件是否存在,并匹配Primary数据库的临时文件
  • 选择一个最合适的物理Standby转换为Primary。如考察数据库的IO/CPU/内存。确保转换后能提供服务。

四、操作步骤

3.1、执行switchover

从原Primary数据库端开始操作;到新Primary数据库端的操作结束

3.1.1、primary节点

查询V$DATABASE视图的SWITCHOVER_STATUS列。

  • 检查是否支持switchover操作
代码语言:javascript
复制
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO STANDBY
  • 结果为 TO STANDBY;则表示Primary数据库支持转换为Standby角色。
  • 结果为SESSIONS ACTIVE;说明当前有会话在连接Primary数据库。这种情况代表不能进行转换;需要关闭oracle所有的客户端连接。即需要提前通知开发人员终止客户端连接。也可以使用命令强制终止
代码语言:javascript
复制
ps -ef | grep oracleorcl | awk '{system("kill -9 " $2)}'
  • 启动switchover

将primary数据库转换为standby角色

代码语言:javascript
复制
alter database commit to switchover to physical standby;
-- 可用来处理前一步有用户在连接的情况
alter database commit to switchover to physical standby with session shutdown;

执行了该命令。原primary数据库将会转为standby数据库。

重启原primary数据库到mount状态

代码语言:javascript
复制
shutdown immediate;
startup mount;
3.1.2、standby节点

查询V$DATABASE视图的SWITCHOVER_STATUS列。

  • 检查是否支持switchover操作
代码语言:javascript
复制
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
------------------------------------------------------------
TO PRIMARY
  • 结果为 TO PRIMARY;则表示standby数据库支持转换为primary角色。
  • 结果为SESSIONS ACTIVE;说明当前有会话在连接原standby数据库
  • 结果为SWITCHOVER PENDING;说明当前standby数据库没有启动redo应用。执行
代码语言:javascript
复制
alter database recover managed standby database using current logfile disconnect from session;
  • switchover
代码语言:javascript
复制
alter database commit to switchover to primary;

重启数据库

新备库在启动redo应用即可

代码语言:javascript
复制
alter database recover managed standby database using current logfile disconnect from session;

3.2、执行failover

failover操作;一般表示primary数据库瘫痪,最起码就是失败。相当于primary数据库服务器挂了。现在需要提升standby数据库来接管服务。在这个过程可能会存在丢失数据。所有建议Primary数据库还能使用。不要执行failover。

3.2.1、检查归档日志是否连续

查询待转换standby数据库的v$archive_gap视图;确认归档文件是否连续

代码语言:javascript
复制
select thread#, low_sequence#, high_sequence# from v$archive_gap;

若有返回记录;通过命令加入数据字典

代码语言:javascript
复制
alter database register physical logfile 'filesepec1'
3.2.2、启动failover
代码语言:javascript
复制
alter database recover managed standbyf database finish force; 
3.2.3、转为primary节点
代码语言:javascript
复制
alter database commit to switchover to primary
3.2.4、重启数据库
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. Oracle DataGuard简介
  • 二、Oracle DataGuard角色以及角色转换
    • 2.1、Oracle DataGuard两种角色
      • 2.2、角色转换
        • 2.2.1、switchover
        • 2.2.2、failover
    • 三、准备工作
    • 四、操作步骤
      • 3.1、执行switchover
        • 3.1.1、primary节点
        • 3.1.2、standby节点
      • 3.2、执行failover
        • 3.2.1、检查归档日志是否连续
        • 3.2.2、启动failover
        • 3.2.3、转为primary节点
        • 3.2.4、重启数据库
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档