Oracle 物理备库详解

Oracle 物理备库详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

物理备库是主库块级复制[1]:

详细见:Oracle Data Guard 架构详解Oracle 逻辑备库详解


2. 特性

2.1 块级

- 与主库完全一致
- Redo Apply
- 数据一致

2.2 只读

- Active Data Guard:只读
- 报表/查询

2.3 灾备

- 灾难恢复
- Failover
- 切换

3. 创建

3.1 RMAN DUPLICATE

rman target sys/pwd@prod auxiliary sys/pwd@stby
RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
  SPFILE
    PARAMETER_VALUE_CONVERT ('prod','stby')
    SET DB_UNIQUE_NAME='stby'
    SET LOG_ARCHIVE_DEST_2='service=prod ASYNC ...'
  NOFILENAMECHECK;

3.2 备份恢复

rman target sys/pwd@prod
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY;

# 传输到备库
# 恢复
rman auxiliary sys/pwd@stby
RMAN> RESTORE STANDBY CONTROLFILE FROM '...';
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

3.3 Active Database

- 在线复制
- 无需备份
- 网络

4. Redo Apply

4.1 启动

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

4.2 实时

-- 需要 Standby Redo Log
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

4.3 停止

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

5. Active Data Guard

5.1 启用

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

5.2 验证

SELECT open_mode FROM v$database;
-- READ ONLY WITH APPLY

详细见:Oracle Active Data Guard 详解


6. Standby Redo Log

6.1 创建

ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 
  ('/u01/redo/s04.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 
  ('/u01/redo/s05.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 
  ('/u01/redo/s06.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 
  ('/u01/redo/s07.log') SIZE 50M;

6.2 数量

- 比主库 Online Redo 多一组
- 或相同
- 监控

6.3 查看

SELECT group#, thread#, bytes, status FROM v$standby_log;

7. 配置

7.1 参数

ALTER SYSTEM SET db_unique_name='stby';
ALTER SYSTEM SET log_archive_config='dg_config=(prod,stby)';
ALTER SYSTEM SET fal_server='prod';
ALTER SYSTEM SET standby_file_management='AUTO';
ALTER SYSTEM SET db_file_name_convert='prod','stby';
ALTER SYSTEM SET log_file_name_convert='prod','stby';

7.2 网络

# tnsnames.ora
prod = (DESCRIPTION = ...)
stby = (DESCRIPTION = ...)

8. 监控

8.1 状态

SELECT database_role, open_mode, protection_mode
FROM v$database;

8.2 进程

SELECT process, status, client_process, sequence#, block#, delay_mins
FROM v$managed_standby;

8.3 延迟

SELECT * FROM v$dataguard_stats;

9. 应用场景

9.1 灾备

- 灾难恢复
- Failover
- RPO=0

9.2 读写分离

- Active Data Guard
- 报表
- 性能

9.3 备份

- 备库备份
- 不影响主库
- 性能

10. 角色转换

10.1 Switchover

- 计划内
- 主备互换
- 零丢失

10.2 Failover

- 紧急
- 备库升级
- 可能丢失

10.3 Snapshot

- 可读写快照
- 测试
- 恢复

11. 常见问题

11.1 GAP

- FAL 自动修复
- 手动注册
- 监控

11.2 延迟

- 网络
- 性能
- 优化

11.3 文件

- 缺失
- standby_file_management
- 检查

12. 最佳实践

  1. Standby Redo Log:必备
  2. Active Data Guard:只读
  3. Broker:管理
  4. 监控:延迟
  5. FAL:自动
  6. 文件管理:AUTO
  7. 网络:冗余
  8. 备份:备库
  9. 演练:切换
  10. 文档:配置

13. 参考资料

[1] Oracle Data Guard 19c, “Physical Standby” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/