第二篇《Active Data Guard 实战:打造高可用数据库》(ADG)

《Oracle 数据迁移与备份系列》

第二篇:《Active Data Guard 实战:打造高可用数据库》

1. 概述

Active Data Guard(ADG)是一种高效、便捷的物理迁移方案,能够实现实时数据同步。它属于 Oracle Data Guard(主备库)架构的一种模式,适用于构建高可用数据库环境。

2. ADG 介绍

2.1 功能概述

ADG 主要提供以下核心功能:

  • 实时数据同步:主库数据变更后,会立即同步至备库,确保数据一致性。
  • 只读查询:备库支持查询操作(SELECT),可用于报表和分析,减少主库负担。
  • 高可用性:在主库发生故障时,备库可以快速切换为主库,保障业务连续性。
  • 备库数据应用:持续应用主库的 Redo 日志,保证数据最新。

2.2 核心特性

ADG 采用主备架构,通常由两台或多台服务器组成,具备以下特点:

主库(Primary Database)
  • 处于 READ WRITE 状态。
  • 允许所有 DML (INSERT、UPDATE、DELETE)和 DDL(CREATE、DROP)操作。
  • 生成 Redo 日志 ,并实时传输至 备库
备库(Standby Database)
  • 处于 READ ONLY WITH APPLY 状态。
  • 支持查询(SELECT),但不允许 DML/DDL 操作
  • 持续应用主库的 Redo 日志,保证数据与主库实时同步。

当主库发生故障时,备库可迅速切换为主库,确保业务连续性。

3. ADG 的优势

  • 实时同步 :主库数据写入后,会同步至 ADG 备库,保证数据一致性。
  • 负载分担 :查询操作可在 ADG 备库 上执行,降低主库压力,提高整体性能。
  • 高可用性:在主库故障时,备库可快速接管,提升数据库可靠性。

4. 环境准备

4.1 软硬件要求

  • 需部署在两台独立的服务器上。
  • 主备库的操作系统、Oracle 版本、目录结构需保持一致。

4.2 数据库要求

  • 主备库的 Oracle 版本必须一致,且主库版本必须大于或等于备库。
  • 主库需开启 归档模式(ARCHIVELOG)

5. ADG 数据迁移实施步骤

接下来,我们将详细介绍如何使用 ADG 进行数据迁移,具体包括:

5.1 环境准备

(1)确保主备库环境一致

  • 主备库必须在相同的操作系统和Oracle环境下运行。
  • 目录结构必须保持一致。
    • 示例:/u01/app/oracle/oradata/

(2)配置归档模式

  • 主库开启归档模式

    • 检查是否开启:
    sql 复制代码
    SELECT LOG_MODE FROM V$DATABASE;
    • 如未开启:
    sql 复制代码
    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;

(3)启用强制日志

sql 复制代码
ALTER DATABASE FORCE LOGGING;

5.2备库前期准备

(1)配置监听

编辑tnsnames.ora文件,主备库都要编辑。

其中HOST=SERVICE_NAME=的参数需要具体修改。

复制代码
PRIMARY_DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST=主库IP)(PORT=1521))
    (CONNECT_DATA = (SERVICE_NAME=ORCL))
  )

STANDBY_DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST=备库IP)(PORT=1521))
    (CONNECT_DATA = (SERVICE_NAME=ORCL))
  )

修改完毕后进行重启

bash 复制代码
lsnrctl stop
lsnrctl start

(2)修改参数

在主库的数据库中执行以下命令

其中`SERVICE=orcl为备库服务名,需根据备库具体名称进行更改。

sql 复制代码
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY_DB';

5.3 复制数据文件

(1)在主库创建RMAN备份

bash 复制代码
rman target /
RUN {
    BACKUP DATABASE FORMAT '/u01/backup/db_%U.bkp';
    BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/backup/standby_control.bkp';
}

命令解析

  1. rman target /

    • 连接 RMAN,target / 表示 直接连接本地数据库(以 Oracle 用户运行)。
  2. BACKUP DATABASE FORMAT '/u01/backup/db_%U.bkp';';

    • 备份 整个数据库(包括数据文件)。

    bash 复制代码
    FORMAT '/u01/backup/db_%U.bkp'

    指定备份文件路径:

    • %U:RMAN 自动生成唯一的备份文件名,避免冲突。
  3. BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/backup/standby_control.bkp';

    • 备份当前 控制文件,用于创建 Standby 备库。
    • FOR STANDBY:指定该控制文件将用于 Data Guard 备库

(2)传输数据文件到备库

bash 复制代码
scp /u01/backup/* oracle@<备库IP>:/u01/backup/

(3)在备库恢复数据库

bash 复制代码
rman target /
RUN {
    SET DBID <主库DBID>;   # 可选,确保识别正确的备份
    STARTUP NOMOUNT;
    RESTORE STANDBY CONTROLFILE FROM '/u01/backup/standby_control.bkp';
    ALTER DATABASE MOUNT;
    RESTORE DATABASE;
    RECOVER DATABASE;
}
  • SET DBID <主库DBID>;:选择数据库DBID,防止RMAN误识别数据库。
  • STARTUP NOMOUNT 先启动实例,再恢复控制文件,符合最佳实践。
  • ALTER DATABASE MOUNT 挂载数据库,使其进入 Standby 状态。
  • RECOVER DATABASE 应用归档日志,确保数据一致性。

(4) 启动 Standby 备库日志应用

在备库中运行

sql 复制代码
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

(5)确认 ADG 运行状态

sql 复制代码
SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
  • APPLIED = YES 表示日志已成功同步到 Standby。

  • SEQUENCE# 应与主库的 V$LOG 保持同步。

5.4 启动备库并启用 ADG

(1) 以 MOUNT 模式启动

sql 复制代码
STARTUP MOUNT;

(2) 启动日志应用

sql 复制代码
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

(3) 切换为 ADG 只读模式

sql 复制代码
ALTER DATABASE OPEN READ ONLY;

6.结语

至此,使用 Active Data Guard(ADG) 进行数据迁移的流程已完成。

本文旨在为初学者提供学习参考,作者仍在不断学习和探索,若有不足之处,欢迎指正交流。如遇问题,欢迎私信或在评论区讨论,共同进步!

相关推荐
TDengine (老段)9 分钟前
TDengine 支持的平台汇总
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
烟雨书信25 分钟前
Linux中MySQL的逻辑备份与恢复
linux·运维·mysql
大熊猫侯佩1 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(四)
数据库·swiftui·apple watch
藥瓿亭1 小时前
K8S认证|CKS题库+答案| 5.日志审计
linux·运维·docker·云原生·容器·kubernetes·cka
想用offer打牌1 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql
chen.@-@2 小时前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
王小小鸭2 小时前
【Oracle APEX开发小技巧12】
数据库·oracle
噼里啪啦啦.2 小时前
Spring事务和事务传播机制
数据库·sql·spring
家庭云计算专家2 小时前
飞牛云一键设置动态域名+ipv6内网直通访问内网的ssh服务-家庭云计算专家
运维·云计算·ssh·nextcloud·ddns·动态域名解析
搬码红绿灯2 小时前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构