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

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

相关推荐
liliangcsdn5 分钟前
mac neo4j install & verifcation
数据库·neo4j
Cyanto21 分钟前
MyBatis-Plus高效开发实战
java·开发语言·数据库
程序员JerrySUN44 分钟前
Linux系统架构核心全景详解
linux·运维·系统架构
无敌的牛1 小时前
Linux文件理解,基础IO理解
linux·运维·服务器
angushine1 小时前
鲲鹏服务器logstash采集nginx日志
运维·服务器·nginx
-XWB-1 小时前
【Oracle】套接字异常(SocketException)背后隐藏的Oracle问题:ORA-03137深度排查与解决之道
数据库·oracle
睿思达DBA_WGX1 小时前
由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
运维·数据库·oracle
XXYBMOOO2 小时前
Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案
linux·运维·服务器
!chen2 小时前
Oracle 19.20未知BUG导致oraagent进程内存泄漏
数据库·oracle·bug
DarkAthena2 小时前
【GaussDB】构建一个GaussDB的Docker镜像
数据库·docker·gaussdb