Oracle Snapshot Standby 详解
Oracle Snapshot Standby 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Snapshot Standby 是可读写的备库[1]:
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. 最佳实践
- 测试用:Snapshot
- Flashback 启用:前提
- FRA 充足:空间
- GRP 监控:检查
- 短时间:避免长 Snapshot
- Redo 监控:累积
- 转换测试:流程
- 数据备份:关键
- 文档:操作
- 演练:定期
13. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c, “Snapshot Standby” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/