热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11gDataGuard之逻辑备库角色转换

逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,

逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。 Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,

逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。

Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,具体的详参Oracle集群管理和部署的相关内容。

一.逻辑备库的switchover操作

当进行switchover操作来改变主库和逻辑备库的角色时,总是在主库启动switchover,然后在逻辑备库完成操作,其中的步骤必须按顺序,否则将不能成功执行switchover。

1.确保主库可以进行switchover操作

通过查询V$DATABASE的SWITCHOVER_STATUS值来确定主库是否可以进行switchover操作:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

只要SWITCHOVER_STATUS查询结果是TO STANDBY或者SESSIONS ACTIVE,就表明主库和逻辑备库之间可以进行switchover。否则,查看Data Guard配置是否正确,比如所有的LOG_ARCHIVE_DEST_n参数是否配置正确。

2.当前主库进行切换的准备工作

在当前主库切换为逻辑备库角色之前,先执行如下SQL:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;

该语句表明当前主库将很快被切换为逻辑备库角色,并且开始接收新主库传来的redo数据。在主库执行这一步是为了接收被记录在当前逻辑备库redo数据流中的数据字典,见步骤3。

如果该步骤成功执行,那么V$DATABASE.SWITCHOVER_STATUS列的值为PREPARING SWITCHOVER。

3.目标逻辑备库切换准备

通过如下的SQL创建目标逻辑备库的数据字典:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY; 

该语句还同时启动了逻辑备库的redo传输服务,该数据库将开始将自身的redo数据发送到当前的主库以及Data Guard配置中的其他备库。接收逻辑备库redo数据的这些数据库但并不应用这些redo数据。

当数据字典开始写入redo数据流中,逻辑备库的V$DATABASE.SWITCHOVER_STATUS值变为PREPARING DICTIONARY,一旦操作成功执行,SWITCHOVER_STATUS变为PREPARING SWITCHOVER。

4.确认当前主库已经为未来的主库redo数据流做好了准备

在完成主库到备库角色的切换之前,通过查询V$DATABASE的SWITCHOVER_STATUS值来确认数据字典已经被主库接收,如果数据字典未被接收,那么切换操作将不能完成。因为当前主库不能够解析新主库传来的redo数据。

SWITCHOVER_STATUS的值表明了switchover的进程,当值为TO LOGICAL STANDBY时,进入步骤5.

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

备注:终止主库switchover操作:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;

终止逻辑备库switchover操作:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;

5.切换主库到逻辑备库角色

通过如下SQL切换主库到逻辑备库角色:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;

该语句将等待当前所有主库停止所有的事务以及防止任何新用户启动新事务,并且建立切换提交的时间点。

该语句还将防止用户对逻辑备库的数据做任何的修改操作,为了确保快速执行完,执行该switchover语句前确保主库在没有更新活动的静止状态,比如,所有用户暂时不要登录主库。可以通过V$TRANSACTION视图查询当前正在进行的事务中可能延迟执行该SQL的详细信息。

此时,主库已经在往备库角色过渡了,你不可以关闭或者重启数据库。

6.确保所有可用的redo数据都已经被应用到将转为新主库的目标逻辑备库中

当完成主库到逻辑备库角色的切换,而且配置中的备库已经接收了切换通知,应确认切换通知已经被目标备库处理,这个可以通过查询目标备库V$DATABASE中的SWITCHOVER_STATUS来核实,一旦所有可用的redo数据已经应用到了逻辑备库,SQL应用会按照预期的角色转换目标而自动关闭。

SWITCHOVER_STATUS值的更新显示switchover的进度,当值为TO PRIMARY,则进入第7步。

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

7.切换逻辑备库到主库角色

执行如下SQL,完成逻辑备库到主库角色的转换:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

不需要对Data Guard配置中的逻辑备库进行关闭或者重启的操作,因为配置中的其他逻辑备库将变成新主库的备库,但是任何物理备库还是原主库的备库。

8.新的逻辑备库开启SQL应用

新逻辑备库上执行SQL:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

二.逻辑备库的failover操作

本节介绍逻辑备库的failover操作,逻辑备库的failover必须对故障的主库以及所有的逻辑备库进行正确的操作。另外如果主库没有开启闪回功能,那么就只能通过当前主库的备份来重建主库,或者通过主备库切换解决该问题。

根据数据库配置的保护模式和重做传输服务的属性,主库可能会自主恢复所有或部分的修改操作。

1.将主库未发送的重做日志发送到目标备库

如果主库可以装载(mounted),那么有可能可以将主库未发送的重做日志发送到目标备库。如果该操作能成功执行,那么零数据丢失的failover是可能的,即便主库不是运行在零数据丢失的保护模式下。

注意,该操作要确保目标备库的Redo Apply是开启的,并且主库是mount状态。

主库执行如下SQL:

SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;

这里的target_db_name是指接收主库传来的重做日志的备库的DB_UNIQUE_NAME,这个SQL将主库未发送的重做日志刷到目标备库,并且等待重做数据被应用到备库。

2.复制并注册所有的归档重做日志到目标逻辑备库,以使目标逻辑备库成为新的主库。

根据配置的组件条件,你可以访问主库的归档重做日志,那么:

  • 确定逻辑备份数据库是否有任何归档重做日志文件丢失;

  • 从主数据库复制丢失的日志文件到逻辑备份数据库;

  • 注册复制的日志文件。

逻辑备份数据库注册归档的重做日志文件:

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE -

> '/disk1/oracle/dbs/log-%r_%s_%t.arc';

Database altered.

3.启用LOG_ARCHIVE_DEST_STATE_n

如果之前没有配置基于角色的归档传输路径,配置新主库对应的远程逻辑备库的初始化参数中的远程日志传输路径,手动启用该参数。

比如启用LOG_ARCHIVE_DEST_2:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;

为确保新主库重启后,此次做的更改仍然有效,可以将该参数写进数据库文本初始化参数文件,一般来说,当数据库是主库角色时,必须开启归档到远程目的地,如果是备库角色,该参数就应该disable。

4.激活新主库

在目标备库上执行SQL:

SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;
该语句关闭RFS进程,在目标备库成为新主库之前,应用目标备库中剩下的重做日志,然后停止SQL应用,激活主库。如果没有FINISH APPLY子句,那么在目标备库转为主库角色前,当前目标备库不会应用还未应用的重做日志。

5.Failover后恢复其他备库

确保现有的其他备库继续为新主库提供保护。

6.备份新主库

在执行failover之后,备份新主库,立即执行备份是一个必要的安全措施,因为没有完整的数据库备份,就不能在failover之后对数据库进行恢复。

7.还原失败的主库

Failover之后,原主库可以转换成新主库的逻辑备库,或者可以应用新主库的备份重建为逻辑备库。一旦原主库转换为备库角色,就可以通过swtichover重新转换成主库角色。

本文参阅Oracle官方文档翻译,不足之处欢迎批评指正!害羞

推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 解决MacOS Catalina升级后VMware Fusion黑屏问题的详细指南
    本文深入探讨了如何在MacOS Catalina升级后解决VMware Fusion黑屏的问题。通过详细的步骤和代码示例,帮助用户快速恢复虚拟机的正常运行,并提供了额外的安全建议。适用于希望提升工作效率或学习新技术的读者。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 本文探讨了如何利用SqlDependency执行复杂的SQL查询,并确保在多线程环境下的安全性与效率。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文详细列举了软件开发中常见的功能测试要点,涵盖输入框、搜索、添加/修改、删除、文件上传下载等多个方面,旨在帮助测试人员全面覆盖测试需求,确保软件质量。 ... [详细]
  • 江苏启动鲲鹏生态产业园首批应用孵化项目
    2019年9月19日,在华为全联接大会上,江苏鲲鹏生态产业园正式启动了首批鲲鹏应用孵化项目。南京市委常委、江北新区党工委专职副书记罗群等多位嘉宾出席并见证了这一重要时刻。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 洞态IAST Java Agent 实现AOP技术详解
    本文深入探讨了洞态IAST Java Agent如何通过AOP技术实现方法调用链和污点值传播等功能,为读者提供了详细的源码分析。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 在Windows Server 2008 R2上配置IIS FTP服务
    本文详细介绍了如何在Windows Server 2008 R2操作系统上通过IIS配置FTP服务的过程,包括服务器角色的选择与安装、FTP站点的创建以及必要的服务和防火墙设置检查。 ... [详细]
  • 本指南详细介绍了金仓数据库KingbaseES的安全威胁及应对措施,旨在帮助用户更好地理解和实施数据库安全保护。 ... [详细]
author-avatar
UUUUUUUUUU8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有