(11) 物理备库转换为逻辑备库
🧩 将物理备库转换为逻辑备库(Convert Physical Standby Into Logical Standby)
本文演示如何将已配置好的 Physical Standby(物理备库)无缝转换为 Logical Standby(逻辑备库)。
假设环境已启用 Data Guard Broker (DGMGRL) 并运行正常。
🔍 逻辑备库简介
逻辑备库(Logical Standby) 是 Oracle Data Guard 的一种备用数据库类型,
它保持与主库的数据实时同步,同时可在 读写模式(READ/WRITE) 下开放给用户进行:
- 报表查询;
- 数据分析;
- 测试与开发。
逻辑备库通过解析主库的 Redo 日志,将其转换为 SQL 语句并在备库上执行,
因此特别适合 数据汇总、异地查询 等应用场景。
⚠️ 注意:
一旦转换为逻辑备库,将 无法再转换回物理备库。
🧱 当前配置示例
DGMGRL> show configuration;
Configuration - my_dg
Protection Mode: MaxPerformance
Members:
ip7 - Primary database
ip7_stb - (*) Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 59 seconds ago)
🏗️ 一、主库操作(Primary Database Changes)
1️⃣ 查询不受逻辑备库支持的对象
SET pagesize 25;
COLUMN owner FORMAT a5;
SELECT DISTINCT owner, table_name
FROM dba_logstdby_unsupported
ORDER BY owner, table_name;
2️⃣ 检查不受支持对象的原因
SELECT column_name, data_type
FROM dba_logstdby_unsupported
WHERE owner='OE' AND table_name='CUSTOMERS';
3️⃣ 确认不支持的 Schema
COL owner FORMAT a20;
SELECT owner
FROM dba_logstdby_skip
WHERE statement_opt = 'INTERNAL SCHEMA';
4️⃣ 确保主库中每张表都有唯一标识(主键)
SELECT owner, table_name, bad_column
FROM dba_logstdby_not_unique;
若发现未定义主键的表,请添加主键或唯一约束。
5️⃣ 停止备库的 Redo Apply
DGMGRL> EDIT DATABASE ip7_st SET STATE = APPLY-OFF;
6️⃣ 构建 LogMiner 目录
SQL> EXEC dbms_logstdby.build;
🗝️ 二、打开物理备库(Open Physical Standby)
在备库服务器执行以下命令:
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY ip7_stb;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN RESETLOGS;
SQL> SELECT name, open_mode, db_unique_name, database_role, guard_status
FROM v$database;
⚙️ 三、Data Guard Broker 修改(Data Guard Broker Changes)
1️⃣ 从配置中移除旧的物理备库
DGMGRL> REMOVE DATABASE ip7_stb;
2️⃣ 在逻辑备库上启动 Logical Apply 服务
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
3️⃣ 将逻辑备库重新添加至 Broker 配置
DGMGRL> ADD DATABASE ip7_stb AS CONNECT IDENTIFIER IS ip7_stb;
DGMGRL> ENABLE DATABASE ip7_stb;
4️⃣ 检查配置状态
DGMGRL> SHOW CONFIGURATION;
Configuration - my_dg
Protection Mode: MaxPerformance
Members:
ip7 - Primary database
ip7_stb - Logical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 5 seconds ago)
🔎 四、验证逻辑备库(Verify Logical Standby)
1️⃣ 检查逻辑应用进程(LSP)
逻辑备库中不会显示 LSP 进程于 v$managed_standby 视图内,可在 OS 层查看:
ps -ef | grep lsp
2️⃣ 查询逻辑应用状态
SELECT name, value
FROM v$logstdby_stats;
3️⃣ 验证同步是否正常
-
在主库上创建一张非 SYS 用户表;
-
执行日志切换:
ALTER SYSTEM SWITCH LOGFILE; -
稍候查看逻辑备库上该表是否出现;
-
同时监控逻辑备库的 alert 日志,确认无错误。
🔻 五、关闭逻辑备库(Shutting Down Logical Standby)
1️⃣ 在主库切换日志
ALTER SYSTEM SWITCH LOGFILE;
2️⃣ 在逻辑备库停止 Logical Apply
ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SHUTDOWN IMMEDIATE;
3️⃣ 重启逻辑备库并恢复应用
STARTUP;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
🧠 总结
| 阶段 | 操作重点 |
|---|---|
| 主库 | 检查不受支持对象、唯一键、构建 LogMiner |
| 备库 | RECOVER TO LOGICAL STANDBY 转换、OPEN RESETLOGS 打开 |
| Broker | 删除旧物理备库、添加逻辑备库、启动 LSP |
| 验证 | v$logstdby_stats 检查同步状态 |
⚠️ 注意:
逻辑备库转换后,无法再恢复为物理备库,请在操作前确保已有完整的备份。

浙公网安备 33010602011771号