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. 最佳实践

  1. 检查支持:类型
  2. 进程数:调整
  3. Guard:启用
  4. 监控:延迟
  5. 跳过:不必要
  6. 并行:Apply
  7. 演练:切换
  8. 异构:利用
  9. 文档:配置
  10. 评估:场景

13. 参考资料

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