第二篇《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) 进行数据迁移的流程已完成。

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

相关推荐
DarkAthena25 分钟前
【ORACLE】记录一些ORACLE的merge into语句的BUG
数据库·oracle·bug
難釋懷28 分钟前
Shell脚本-for循环应用案例
linux·运维·服务器·bash
昊昊昊昊昊明44 分钟前
10天学会嵌入式技术之51单片机-day-7
linux·运维·网络
Sonetto19991 小时前
Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?
运维·前端·nginx
江沉晚呤时1 小时前
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
windows·sql·算法·oracle·c#·排序算法·mybatis
大新新大浩浩1 小时前
arm64适配系列文章-第三章-arm64环境上mariadb的部署
数据库·arm·mariadb
聪明的墨菲特i1 小时前
SQL进阶知识:九、高级数据类型
xml·数据库·sql·mysql·json·空间数据类型
达斯维达的大眼睛1 小时前
如何在Linux用libevent写一个聊天服务器
linux·运维·服务器·网络
末央&1 小时前
【Linux】gdb工具,Linux 下程序调试的 “透视眼”
linux·运维·服务器
oioihoii1 小时前
金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
数据库·性能优化·金融·金仓数据库 2025 征文·数据库平替用金仓