Oracle Standby 数据库详解
Oracle Standby 数据库详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Standby 数据库提供灾备和高可用[1]:
类型:
- 物理 Standby
- 逻辑 Standby
- Snapshot Standby
- Far Sync
详细见:Oracle Data Guard 架构详解、Oracle Data Guard 部署详解。
2. 物理 Standby
2.1 特点
- 块级同步
- Redo Apply
- 一致
- 简单
2.2 应用
- MRP(Managed Recovery Process)
- Redo 应用
- 只读(Active Data Guard)
3. 逻辑 Standby
3.1 特点
- SQL 应用
- 逻辑一致
- 可异构
- 可查询
3.2 应用
- LSP(Logical Standby Process)
- SQL 重做
- 表级
3.3 限制
- 部分数据类型不支持
- 部分操作不支持
- DBMS_LOGSTDBY
3.4 配置
-- 主库补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
-- Standby
ALTER DATABASE START LOGICAL STANDBY APPLY;
ALTER DATABASE STOP LOGICAL STANDBY APPLY;
-- 跳过表
EXEC DBMS_LOGSTDBY.SKIP('SCHEMA_DDL', 'SCOTT', 'EMPLOYEES');
4. Snapshot Standby
4.1 特点
- 读写
- 保留 Redo
- 可恢复
- 测试
4.2 转换
-- 物理 → Snapshot
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
-- Snapshot → 物理
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
4.3 应用场景
- 测试
- 报表
- 开发
5. Far Sync
5.1 概述
- 远距离
- 中继
- SYNC + ASYNC
- 零数据丢失 + 性能
5.2 架构
Primary ──SYNC──► Far Sync ──ASYNC──► Standby
5.3 配置
-- Far Sync 实例
-- 仅控制文件 + Redo
CREATE PFILE='...' FROM SPFILE;
-- 启动 nomount
6. 保护模式
6.1 Maximum Performance
- ASYNC
- 默认
- 性能优先
- 可能丢失
6.2 Maximum Availability
- SYNC
- 零丢失
- 主库等待
- 网络要求
6.3 Maximum Protection
- SYNC AFFIRM
- 零丢失
- 强制
- 备库不可用则主库停
6.4 切换
-- Maximum Protection
ALTER SYSTEM SET log_archive_dest_2='service=std sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl_std';
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
7. Redo 传输
7.1 ASYNC
- 异步
- 不等待
- 性能
7.2 SYNC
- 同步
- 等待
- 一致
7.3 AFFIRM
- 确认写盘
- 强一致
7.4 NOAFFIRM
- 不确认
- 性能
8. Redo Apply
8.1 物理备库
-- 启动
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
-- 实时
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
-- 停止
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
8.2 Active Data Guard
-- 只读 + Apply
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
9. Switchover
9.1 Broker
DGMGRL> SWITCHOVER TO orcl_std;
9.2 SQL
-- 主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
-- 备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;
-- 原 Primary 启 MRP
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
10. Failover
10.1 Broker
DGMGRL> FAILOVER TO orcl_std;
10.2 SQL
-- 停 Apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 完成
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
-- 激活
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE OPEN;
10.3 Flashback 重建
-- 原 Primary
-- 启用 Flashback(提前)
ALTER DATABASE FLASHBACK ON;
-- Failover 后
-- 原 Primary 重置到 Failover SCN
ALTER DATABASE FLASHBACK TO SCN xxx;
-- 转为 Standby
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
11. 监控
11.1 进程
SELECT process, status, thread#, sequence# FROM v$managed_standby;
11.2 延迟
SELECT name, value, time_computed, datum_time
FROM v$dataguard_stats;
-- transport lag
-- apply lag
11.3 Gap
SELECT * FROM v$archive_gap;
11.4 归档
SELECT thread#, sequence#, archived, applied, deleted
FROM v$archived_log ORDER BY sequence# DESC;
11.5 Broker
DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW DATABASE orcl_pri;
DGMGRL> SHOW DATABASE orcl_std;
12. 常见坑与排错
12.1 ORA-12154
- tnsnames.ora
- 服务名
- 监听器
12.2 ORA-16191
- 密码文件
- sys 密码同步
12.3 Gap
SELECT * FROM v$archive_gap;
-- 手动注册
ALTER DATABASE REGISTER LOGFILE '/path/to/log';
12.4 ORA-16816
- Broker 状态
- 重新同步
DGMGRL> ENABLE DATABASE orcl_std;
13. 最佳实践
- Standby Redo Log:实时
- Active Data Guard:只读
- Snapshot Standby:测试
- Far Sync:远距离
- Broker:简化
- 保护模式:业务
- 监控 lag:及时
- Flashback:重建
- 测试切换:能力
- 文档化:流程
14. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/