Oracle 逻辑备库详解
Oracle 逻辑备库详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
逻辑备库通过 SQL Apply 同步[1]:
详细见:Oracle 物理备库详解、Oracle Data Guard 架构详解。
2. 特性
2.1 SQL Apply
- LogMiner 解析
- SQL 重建
- 逻辑一致
2.2 可读写
- 备库可读写
- 添加对象
- 灵活
2.3 异构
- 不同平台
- 不同版本
- 灵活
3. 限制
3.1 不支持类型
- SYS 模式对象
- 部分数据类型
- 检查
3.2 不支持操作
- 部分 DDL
- 部分 PL/SQL
- 检查
3.3 检查
-- 主库
SELECT * FROM dba_logstdby_unsupported;
SELECT * FROM dba_logstdby_unsupported_table;
4. 创建
4.1 物理备库
- 先建物理备库
- 转换为逻辑
4.2 转换
-- 物理备库
ALTER DATABASE RECOVER TO LOGICAL STANDBY new_name;
-- 重启
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;
4.3 启动 SQL Apply
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
5. SQL Apply 进程
5.1 进程
- LSP0:协调
- LSP1:预备
- LSP2:日志
- Reader/Builder/Preparer/Analyzer/Applier
5.2 查看
SELECT * FROM v$logstdby_process;
SELECT * FROM v$logstdby_stats;
5.3 状态
SELECT * FROM v$logstdby_state;
6. 管理
6.1 启动/停止
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
ALTER DATABASE STOP LOGICAL STANDBY APPLY;
ALTER DATABASE ABORT LOGICAL STANDBY APPLY;
6.2 跳过
-- 跳过 schema
EXEC DBMS_LOGSTDBY.SKIP('SCHEMA_DDL', 'SCOTT', '%');
EXEC DBMS_LOGSTDBY.SKIP('DML', 'SCOTT', 'EMP');
6.3 实例化
-- 重新同步表
EXEC DBMS_LOGSTDBY.INSTANTIATE_TABLE('SCOTT', 'EMP', 'prod');
7. 数据库守卫
7.1 Guard
ALTER DATABASE GUARD ALL; -- 不允许修改
ALTER DATABASE GUARD STANDBY; -- 仅备库对象
ALTER DATABASE GUARD NONE; -- 允许
7.2 作用
- 防止误修改
- 保持一致
- 控制
8. 监控
8.1 状态
SELECT database_role, open_mode, guard_status FROM v$database;
-- LOGICAL STANDBY / READ WRITE
8.2 延迟
SELECT * FROM v$logstdby_stats WHERE name LIKE '%lag%';
8.3 进度
SELECT applied_scn, newest_scn FROM dba_logstdby_progress;
9. 应用场景
9.1 报表
- 可读写
- 添加索引
- 优化
9.2 升级
- 滚动升级
- 最小停机
- 异构
9.3 数据分发
- 多目的
- 定制
- 灵活
10. 异构
10.1 平台
- Linux <-> Windows
- Solaris <-> Linux
- 灵活
10.2 版本
- 不同版本
- 升级路径
- 灵活
10.3 字符集
- 相同字符集
- 检查
11. 常见问题
11.1 ORA-16108
- 已是逻辑备库
- 检查
11.2 不支持对象
- 检查
- 跳过
- 处理
11.3 Apply 慢
- 进程数
- 并行
- 优化
12. 最佳实践
- 检查支持:类型
- 进程数:调整
- Guard:启用
- 监控:延迟
- 跳过:不必要
- 并行:Apply
- 演练:切换
- 异构:利用
- 文档:配置
- 评估:场景
13. 参考资料
[1] Oracle Data Guard 19c, “Logical Standby” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/