Data Guard Broker系列之五:数据库角色转换

简介:

数据库转换的基本概念

转换的类型

数据库之间的转换有switchover和failover两种方式。

switchoverswitchover是primary数据库和它的一个standby数据库之间角色的切换,通常是有计划的数据库转换,保证不会有数据丢失。 failoverfailover发生在primary数据库失败之后,它的一个standby接替它成为primary数据库。failover通常发生primary数据库不可恢复的情况下,根据数据库保护模式的不一样failover可能会有数据丢失。

转换目标的选择

对于switchover操作来说,遵循以下的步骤

  1. 首先选择未应用的redo的standby,这个可以通过SHOW DATABASE db_unique_name RecvQEntries看到。
  2. 对于物理和逻辑standby同时存在时,优先选择redo apply queue最小的物理standby,因为物理standby在转换之后所有的standby都能正常工作,而转换到逻辑standby之后同一组里面的物理standby将要重建。

对failover操作来说,遵循以下的步骤

  1. 为降低数据丢失的数量,首先要选择应用日志最多的standby。
  2. 对于物理和逻辑standby同时存在时,优先选择物理standby,因为物理standby在转换之后所有的standby都能正常工作,而转换到逻辑standby之后同一组里面的standby将要重建。另外一个如果逻辑standby使用DBMS_LOGSTDBY.SKIP忽略了一部 分数据库话也会造成数据丢失。

Data Guard转换的三个层次

第一个层次是在没有配置broker的环境中,在这种环境下,如果要进行数据库的角色却换的话通常需要3个步骤:

  1. 首先是检查data guard环境中的数据库是否满足转换的条件。
  2. 然后登陆到primary数据库运行sql转换角色,再重启primary数据库使其变成standby。
  3. 再登录到要转换的standby数据库上,运行sql转换角色,再重新启动standby以变成新的primary。

第二个层次是配置了broker但是没有配置FSF(fast-start failover)的环境中,在这里做switchover和failover都只需要一个简单的命令,剩下的重启primary和standby的操作就交给broker去做了。

第三个层次是配置了FSF的机器,这时候数据库的状态由FSF Observer监控着,一旦primary数据库出现了问题需要failover操作,FSF会自动进行数据库的转换,根本就不需要人来参与了。

broker管理下的switchover和failover

switchover

broker管理下的switchover的过程

  1. 检查primary和standby是否online,是否有错误,如果有错误则switchover失败。
  2. 如果primary是RAC,则关掉RAC中所有不参与switchover的instance。
  3. 将primary数据库转换成standby数据库,然后将目标standby数据库转换成新的primary数据库。
  4. 更新broker控制文件记录转换之后的数据库角色信息。
  5. 如果新的standby是物理standby的话将会重启之,然后开始redo log应用。RAC环境中将会重启那些被关闭的instance。
  6. 如果是物理standby环境的话重启新的primary数据库然后开始rodo log的传送到其他的standby中。
    最后broker会确认转换之后的新primary和standby都工作正常,redo log传送和应用都正常。对于那些没有参与switchover的standby将会保持不变。

下面是一个switchover的详细过程

DGMGRL show  configuration
 
Configuration
  
Name :                 FSF
  
Enabled :              YES
  
Protection  Mode :      MaxAvailability
  
Fast - Start  Failover DISABLED
  
Databases :
    
torcla  -  Physical  standby  database
    
torclb  -  Primary  database
 
Current  status  for  " FSF " :
SUCCESS
 
DGMGRL switchover  to  torcla
Performing  switchover  NOW please  wait ...
Operation  requires  shutdown  of  instance  " torclb on  database  " torclb "
Shutting  down  instance  " torclb " ...
ORA - 01109 database  not  open
 
Database  dismounted .
ORACLE  instance  shut down .
Operation  requires  shutdown  of  instance  " torcla on  database  " torcla "
Shutting  down  instance  " torcla " ...
ORA - 01109 database  not  open
 
Database  dismounted .
ORACLE  instance  shut down .
Operation  requires  startup  of  instance  " torclb on  database  " torclb "
Starting  instance  " torclb " ...
ORACLE  instance  started .
Database  mounted .
Operation  requires  startup  of  instance  " torcla on  database  " torcla "
Starting  instance  " torcla " ...
ORACLE  instance  started .
Database  mounted .
Switchover  succeeded new  primary  is  " torcla "
DGMGRL show  configuration

Configuration
  
Name :                 FSF
  
Enabled :              YES
  
Protection  Mode :      MaxAvailability
  
Fast - Start  Failover DISABLED
  
Databases :
    
torcla  -  Primary  database
    
torclb  -  Physical  standby  database
 
Current  status  for  " FSF " :
SUCCESS

failover

failover有两种类型:完全failover和立即failover。

完全failover进行完全failover操作的是很broker会竟可能的恢复数据,同时在failover完成之后会根据情况尽可能的将没有参与failover的standby变成新的primary的可用的standby。 立即failover立即failover的操作开始之后broker不再去试图恢复更多的数据,另一个就是failover完成之后所有没有参与failover的standby都要重新启用。

调用这两种failover的命令如下

-- 完全failover
FAILOVER  TO  standby_database_name ;
-- 立即failover
FAILOVER  TO  standby_database_name  IMMEDIATE ;

broker执行完全failover的过程

  1. 检查primary是否可用,可用的话给出一条警告信息。
  2. 确认目标standby可用,不可用的话failover失败。RAC环境中将关闭standby的其他不参与的instance。
  3. 等待目标standby完成还在队列中的redo信息之后关闭redo log apply或是sql apply。
  4. 将目标standby转换成新的primary。
    • 将新的primary数据库打开为读写模式。
    • 检查其他的standby是否能成为新primary的standby,如果可以的话则该standby的状态保证不变,否则则需要re-enable。
    • 启动redo传送服务将redo传送给那些不需要re-enable的standby数据库。
  5. 如果是RAC环境则重启那些之前关闭的instance。

broker执行立即failover的过程

  1. 确认目标standby可用,不可用的话failover失败。RAC环境中将关闭standby的其他不参与的instance。
  2. 立即停止redo log apply或是sql apply,不管是否还有可恢复的数据,这样可能会造成数据丢失。
  3. 将目标standby转换成新的primary并打开到读写模式,并启动redo传送服务。

一个完全failover的例子

DGMGRL> failover to torclb
Performing failover NOW, please wait…
Failover succeeded, new primary is “torclb”
DGMGRL> show configuration

Configuration

Name: FSF
Enabled: YES
Protection Mode: MaxPerformance
Fast-Start Failover: DISABLED
Databases:
torcla – Physical standby database (disabled)
torclb – Primary database

Current status for “FSF”:
SUCCESS

从上面的状态我们可以看到此时的新standby是不可用的,处于disabled状态。


角色转换之后的数据库的启用

在角色转换之后我们可能还需要进行额外的操作来启用被禁用的数据库,操作已经data guard的类型不同需要启用数据库情况也不同。

转换操作 reinstate或recreate 有问题的primary数据库 重新启用没有参与failover的standby
switchover到物理standby 不需要其他操作 不需要其他操作
switchover到逻辑standby 不需要其他操作 所有物理standby需要recreate
完全failover到物理standby 如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate 对于物理standby如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate
对于逻辑standby必须recreate
完全failover逻辑standby 如果启用了flashback而且retention足够的话可以reinstate,否则只能recreate 所有standby都会被disabled,都需要recreate
立即failover到物理standby或逻辑standby 必须要recreate 所有standby都会被disabled,都需要recreate


reinstate操作

在broker中进行reinstate数据库操作只需要运行一个命令就行了,不过前提是配置了flashback以及足够的retention。

REINSTATE  DATABASE  db_unique_name ;

基本步骤是:

  1. 重启数据库到mount状态
  2. 使用dgmgrl连接到primary数据库
  3. 运行REINSTATE DATABASE命令

下面对上一步failover之后的新standby做一次reinstate操作

DGMGRL reinstate  database  torcla
Reinstating  database  " torcla " please  wait ...
Operation  requires  shutdown  of  instance  " torcla "  on  database  " torcla "
Shutting  down  instance  " torcla " ...
ORA - 01109 database  not  open
 
Database  dismounted .
ORACLE  instance  shut down .
Operation  requires  startup  of  instance  " torcla on  database  " torcla "
Starting  instance  " torcla " ...
ORACLE  instance  started .
Database  mounted .
Continuing  to  reinstate  database  " torcla "  ...
Reinstatemen t o f database  " torcla succeeded
DGMGRL show  configuration
 
Configuration
  
Name :                 FSF
  
Enabled :              YES
  
Protection Mode :      MaxPerformance
  
Fast - Start  Failover DISABLED
  
Databases :
    
torcla  -  Physical  standby  database
    
torclb  -  Primary  database
 
Current  status  for  " FSF " :
SUCCESS

可以看到reinstate之后数据库torcla已经可以正常使用了。

 

参考至:http://www.dbabeta.com/2009/learn-data-guard-broker_role-transition.html

如有错误,欢迎指正

邮箱:czmcj@163.com

作者:czmmiao  文章出处:http://czmmiao.iteye.com/blog/2124881
相关文章
|
27天前
|
存储 人工智能 算法
一文了解向量数据库在RAG中扮演的角色
向量数据库在处理高维数据和实现精准信息检索方面发挥关键作用,成为AI时代数据基础设施的核心部分。
|
2月前
|
监控 Oracle 关系型数据库
Flink CDC(Change Data Capture)是一种用于捕获数据库变更的技术
Flink CDC(Change Data Capture)是一种用于捕获数据库变更的技术
35 8
|
23天前
|
SQL 安全 数据管理
在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
【2月更文挑战第33天】在阿里云数据管理DMS(Data Management Service)中,您可以按照以下步骤来创建和管理数据库
27 7
|
6月前
|
大数据 数据库 流计算
Flink CDC(Change Data Capture)是一种从数据库中捕获数据变化并将其转换为可用于处理的数据的方法
Flink CDC(Change Data Capture)是一种从数据库中捕获数据变化并将其转换为可用于处理的数据的方法
52 1
|
2月前
|
关系型数据库 MySQL 数据库
MySQL技能完整学习列表——1、数据库基础概念——2、数据库管理系统(DBMS)——3、数据模型(Data Model)
MySQL技能完整学习列表——1、数据库基础概念——2、数据库管理系统(DBMS)——3、数据模型(Data Model)
26 0
|
3月前
|
SQL 安全 数据库
SQL数据库权限管理-10个数据库角色
SQL数据库通过预定义的数据库角色,对用户权限进行精细化管理,这些角色分别赋予不同级别的数据访问、操作和管理权限,旨在简化安全配置并确保数据库资源得到妥善保护和合理使用。
53 0
|
4月前
|
安全 关系型数据库 数据库
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
50 0
|
6月前
|
数据库 数据安全/隐私保护 数据库管理
openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色
openGauss学习笔记-109 openGauss 数据库管理-管理用户及权限-角色
|
6月前
|
Java API 数据库
Spring Data JPA:简化数据库交互的艺术
Spring Data JPA:简化数据库交互的艺术
33 0
|
6月前
|
数据库 数据库管理 OceanBase
OceanBase数据库中,角色的权限是由数据库管理员(DBA)设置的
OceanBase数据库中,角色的权限是由数据库管理员(DBA)设置的
72 1