Oracle Snapshot Standby 详解

Oracle Snapshot Standby 详解

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


1. 概述

Snapshot Standby 是可读写的备库[1]:

详细见:Oracle Data Guard 架构详解


2. 特性

2.1 可读写

- 备库变可读写
- 接收主库 Redo(不应用)
- 用于测试
- 可回退为物理备库

2.2 Flashback

- 转换为 Snapshot Standby 时创建 Guaranteed Restore Point
- 回退时 Flashback Database
- 丢弃所有写操作

详细见:Oracle Flashback Database 详解


3. 转换

3.1 物理 → Snapshot

-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE CLOSE;

ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
ALTER DATABASE OPEN;
-- 现在可读写

3.2 Snapshot → 物理

-- 备库
ALTER DATABASE CLOSE;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

-- 重启
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

4. Broker 方式

4.1 转换

DGMGRL> CONVERT DATABASE stby1 TO SNAPSHOT STANDBY;
DGMGRL> CONVERT DATABASE stby1 TO PHYSICAL STANDBY;

4.2 查看

DGMGRL> SHOW CONFIGURATION;
DGMGRL> SHOW DATABASE stby1;

5. Redo 接收

5.1 持续接收

- Snapshot Standby 仍接收主库 Redo
- 但不应用
- Redo 累积

5.2 回退后

- 转 Physical Standby
- Flashback Database
- 应用累积 Redo
- 同步

6. Guaranteed Restore Point

6.1 创建

- 转换 Snapshot Standby 时自动创建
- GRP 保证 Flashback Log 不被删除

6.2 查看

SELECT name, guarantee_flashback_database, scn, time
FROM v$restore_point;

6.3 删除

- 转 Physical Standby 时自动删除
- 不可手动删除(保证 Flashback)

7. 监控

7.1 状态

SELECT database_role, open_mode, flashback_on 
FROM v$database;
-- SNAPSHOT STANDBY, READ WRITE, YES

SELECT name, scn, time, guarantee_flashback_database
FROM v$restore_point;

7.2 Redo

-- 主库
SELECT dest_id, status FROM v$archive_dest_status WHERE dest_id = 2;
-- VALID(仍发送)

-- Snapshot Standby
SELECT * FROM v$standby_log;

8. 应用场景

8.1 测试

- 真实数据测试
- 应用升级测试
- 性能测试
- 完成后回退

8.2 报表

- 写操作
- 临时报表
- 回退

8.3 开发

- 开发环境
- 真实数据
- 灵活

8.4 数据修复

- 临时修复
- 验证
- 回退

9. 限制

9.1 单 Snapshot

- 一个备库同时只能一种角色
- Snapshot 或 Physical

9.2 Flashback 依赖

- 需启用 Flashback Database
- FRA 空间

9.3 Redo 累积

- Snapshot 期间 Redo 累积
- 转回后应用
- 长时间可能影响

10. 性能

10.1 转换时间

- 物理 → Snapshot:分钟
- Snapshot → 物理:取决于 Redo 量

10.2 Flashback

- Guaranteed RP 保证
- FRA 监控

11. 常见坑与排错

11.1 ORA-38708

- FRA 满
- 清理空间

11.2 ORA-01578

- 坏块
- Automatic Block Repair

11.3 Redo 积压

- 长时间 Snapshot
- 转回时间长
- 监控

12. 最佳实践

  1. 测试用:Snapshot
  2. Flashback 启用:前提
  3. FRA 充足:空间
  4. GRP 监控:检查
  5. 短时间:避免长 Snapshot
  6. Redo 监控:累积
  7. 转换测试:流程
  8. 数据备份:关键
  9. 文档:操作
  10. 演练:定期

13. 参考资料

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