#逻辑备库配置

配置逻辑备库需要先创建物理备库,然后执行相关操作将其转换为逻辑备库。

# 步骤1:创建备库

请参考一主一备部署中的备库准备操作创建备库,此时该备库为物理备库状态。

# 步骤2:新增STANDBY LOG文件

standby log文件用于存储逻辑备库业务产生的redo日志,在构建逻辑备库前需要规划standby log文件的空间占用、文件路径以及数量。

每个逻辑备库至少需要3个standby log文件,如果当前环境中已经配置了standby log文件则可跳过本操作。

在主库执行如下语句,创建standby log文件:

ALTER DATABASE ADD STANDBY LOGFILE 'REDO11' SIZE 128M;
ALTER DATABASE ADD STANDBY LOGFILE 'REDO12' SIZE 128M;
ALTER DATABASE ADD STANDBY LOGFILE 'REDO13' SIZE 128M;
Copied!

# 步骤3:停止备库的redo回放

物理备库在转换为逻辑备库前,请停止物理备库上的redo回放,以免后续构建逻辑备库操作被物理回放。

在备库执行如下语句停止物理回放:

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Copied!

# 步骤4:执行build操作

  1. 在主库执行BUILD操作:

    • 执行DBMS_LOGSTDBY.BUILD过程等待所有活跃事务完成,在主库执行长时间运行的事务会影响该命令的执行效率。

    • 执行DBMS_LOGSTDBY.BUILD过程后会自动开启库级附加日志,附加日志的模式为PRIMARY KEY,生效的表类型为HEAP。

    EXECUTE DBMS_LOGSTDBY.BUILD;
    
    Copied!
  2. 检查确认build操作已同步到备库。

    -- 查看备库的状态以及同步状态。
    SELECT DEST_ID, CONNECTION, STATUS, SYNCHRONIZED FROM V$ARCHIVE_DEST_STATUS;
    
    Copied!

    如果备库已处于同步状态(SYNCHRONIZED为TRUE),则说明build操作已同步到备库。否则,需获取当前的日志刷盘点,等待备库同步到该刷盘点。

    -- 获取主库当前的日志刷盘点
    SELECT FLUSH_POINT FROM V$DATABASE;
    
    -- 等待备库日志同步到该日志点
    -- 获取当前备库的日志接收点
    SELECT DEST_ID, CONNECTION, STATUS, RECEIVED_SEQ#, RECEIVED_LFN FROM V$ARCHIVE_DEST_STATUS;
    
    Copied!

# 步骤5:转换为逻辑备库

重启备库至mount阶段,并执行相关语句将其转换为逻辑备库。

-- 关闭数据库
SHUTDOWN IMMEDIATE;

-- 启动数据库
yasdb mount &

-- 执行切换操作
ALTER DATABASE RECOVER TO LOGICAL STANDBY KEEP IDENTITY;

-- open数据库
ALTER DATABASE OPEN;
Copied!

操作完成后,该备库的角色将变为LOGICAL STANDBY,且DBID也会发生变化。

# 步骤6:开启SQL Apply

逻辑备库默认不启用逻辑回放功能,需在备库执行如下语句,开启逻辑回放(即将redo数据应用到逻辑备库)。

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Copied!