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. 最佳实践
- Standby Redo Log:必备
- Active Data Guard:只读
- Broker:管理
- 监控:延迟
- FAL:自动
- 文件管理:AUTO
- 网络:冗余
- 备份:备库
- 演练:切换
- 文档:配置
13. 参考资料
[1] Oracle Data Guard 19c, “Physical Standby” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/