(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 检查同步状态

⚠️ 注意
逻辑备库转换后,无法再恢复为物理备库,请在操作前确保已有完整的备份。

posted @ 2025-10-30 11:20  jiangjiangni  阅读(30)  评论(0)    收藏  举报