《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)配置归档模式
-
主库开启归档模式
- 检查是否开启:
sqlSELECT LOG_MODE FROM V$DATABASE;
- 如未开启:
sqlSHUTDOWN 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';
}
命令解析
-
rman target /
- 连接 RMAN,
target /
表示 直接连接本地数据库(以 Oracle 用户运行)。
- 连接 RMAN,
-
BACKUP DATABASE FORMAT '/u01/backup/db_%U.bkp';';
-
备份 整个数据库(包括数据文件)。
bashFORMAT '/u01/backup/db_%U.bkp'
指定备份文件路径:
%U
:RMAN 自动生成唯一的备份文件名,避免冲突。
-
-
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) 进行数据迁移的流程已完成。
本文旨在为初学者提供学习参考,作者仍在不断学习和探索,若有不足之处,欢迎指正交流。如遇问题,欢迎私信或在评论区讨论,共同进步!