Oracle 19c RAC (2+2) Data Guar

内容分享1天前发布
0 0 0

在企业级核心系统中,Oracle RAC 提供了卓越的单点高可用性,而 Data Guard 则提供了强劲的灾备能力。

将两者结合并使用 Data Guard Broker (DGMGRL) 进行管理,是构建顶级 Oracle 高可用架构的最佳实践。

本文将详细阐述在一个双节点 RAC 主库到双节点 RAC 备库 (2+2) 的环境中,如何从零开始配置 Data Guard Broker,并完整演示一次安全、平滑的主备切换(Switchover)过程,同时深度解析切换期间 RAC 多实例的自动化处理机制。

如果是单机环境的小伙伴,可以参照《Oracle DBA 必修课:手把手教你启用 Data Guard Broker,让备库管理进入“一键时代”》这篇文章。

01

环境假设与准备工作

在开始配置 Broker 之前,我们必须确保环境满足其苛刻的要求。

90% 的 Broker 配置失败都源于准备工作的疏忽。

1

环境信息

  • 主库 (Primary)IP信息

Oracle 19c RAC (2+2) Data Guar

  • 备库 (Standby)IP信息

Oracle 19c RAC (2+2) Data Guar

  • RAC+DG实例信息

Oracle 19c RAC (2+2) Data Guar

命名解析

备库实例名 racdbdg1 和 racdbdg2 中的 dg 后缀清晰地表明了它们的 Data Guard 角色,这是一个超级好的管理实践。

2

Broker 配置前的“健康检查”

1)静态监听器配置 (所有四个节点)

这是 Broker 在 RAC 环境下能够正常执行角色切换的绝对前提。

其目的是让 Broker 可以在实例关闭时,连接到指定节点的监听器,并请求该监听器启动其本地的实例。

  • 核心原则

每个节点的 listener.ora 文件中,只静态注册运行在该节点本地的那个实例。

在 racnode1 的 listener.ora 中

MGR_LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.130)(PORT=1524))
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.131)(PORT=1524))
    )
  )

SID_LIST_MGR_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME=anyadb_dgmgrl)
     (ORACLE_HOME=/u01/app/oracle/product/19.15.0/dbhome_1)
     (SID_NAME=anyadb1)
    )
 )

在 racnode2 的 listener.ora 中:

MGR_LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.132)(PORT=1524))
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.133)(PORT=1524))
    )
  )

SID_LIST_MGR_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME=anyadb_dgmgrl)
     (ORACLE_HOME=/u01/app/oracle/product/19.15.0/dbhome_1)
     (SID_NAME=anyadb2)
    )
 )

在 racnode3 的 listener.ora 中:

MGR_LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.46)(PORT=1524))
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.47)(PORT=1524))
    )
  )

SID_LIST_MGR_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME=anyadbdg_dgmgrl)
     (ORACLE_HOME=/u01/app/oracle/product/19.15.0/dbhome_1)
     (SID_NAME=anyadbdg1)
    )
 )

在 racnode4 的 listener.ora 中:

MGR_LISTENER =
  (DESCRIPTION =
    (ADDRESS_LIST =
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.48)(PORT=1524))
       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.116.49)(PORT=1524))
    )
  )

SID_LIST_MGR_LISTENER =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME=anyadbdg_dgmgrl)
     (ORACLE_HOME=/u01/app/oracle/product/19.15.0/dbhome_1)
     (SID_NAME=anyadbdg2)
    )
 )

重大

修改后,在所有节点上以 Grid 用户身份启动监听器:lsnrctl start MGR_LISTENER 。

2)静态监听器配置 (主备所有四个节点)

确保所有四个节点的 Grid 和 RDBMS 用户的 $
ORACLE_HOME/network/admin/tnsnames.ora 文件都包含了主备库的 SCAN 连接串。

DGMGR_ANYADBDG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.116.47)(PORT = 1524))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.116.49)(PORT = 1524))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = anyadbdg_dgmgrl)
    )
  )


DGMGR_ANYADB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.116.131)(PORT = 1524))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.116.133)(PORT = 1524))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = anyadb_dgmgrl)
    )
  )
  • 全方位连接性测试 (关键步骤)

必须在所有节点上进行交叉测试。

a. 从主库节点 (racnode1, racnode2) 执行:

sqlplus sys/oracle@DGMGR_ANYADB as sysdba
sqlplus sys/oracle@DGMGR_ANYADBDG as sysdba
  • b. 从备库节点 (racnode3, racnode4) 执行:
sqlplus sys/oracle@DGMGR_ANYADB as sysdba
sqlplus sys/oracle@DGMGR_ANYADBDG as sysdba

成功标准

每一条命令都应成功连接并显示 SQL> 提示符。

在所有测试成功前,切勿进行下一步。

数据库参数配置

  • 主库设置Broker 配置文件位置 (必须在共享存储):

主库的LOG_ARCHIVE_DEST_2不需要清理,在后面enable configuration时会自动配置。

-- 主库 (racdb_p)
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/racdb_p/dgmgrl/config1.dat' SCOPE=BOTH SID='*';
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+RECO/racdb_p/dgmgrl/config2.dat' SCOPE=BOTH SID='*';
  • 备库设置Broker 配置文件位置 (必须在共享存储):
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' SCOPE=BOTH SID='*';
-- 备库 (racdb_s)
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/racdb_s/dgmgrl/config1.dat' SCOPE=BOTH SID='*';
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+RECO/racdb_s/dgmgrl/config2.dat' SCOPE=BOTH SID='*';
  • 启动 Broker 进程(主备库均要执行):
ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH SID='*';

02

配置并启用 Data Guard Broker

1

连接到DGMGRL

dgmgrl sys/oracle@DGMGR_ANYADB

2

创建和添加数据库

--创建主库
DGMGRL>  create configuration anyadb as primary database is anyadb connect identifier is DGMGR_ANYADB;
Configuration "anyadb" created with primary database "anyadb"

--添加备库
DGMGRL> add database anyadbdg as connect identifier is DGMGR_ANYADBDG maintained as physical;
Database "anyadbdg" added

3

查看配置

DGMGRL> show configuration;

Configuration - anyadb

  Protection Mode: MaxPerformance
  Members:
  anyadb   - Primary database
    anyadbdg - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
DISABLED

4

启用配置

ENABLE CONFIGURATION;

5

验证配置

DGMGRL> show Configuration;

Configuration - anyadb

  Protection Mode: MaxPerformance
  Members:
  anyadb   - Primary database
    anyadbdg - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 9 seconds ago)

看到 Configuration Status: SUCCESS 即表明成功。

03

实战演练——执行主备切换

(Switchover)

主备切换是检验 Data Guard 配置是否成功的“试金石”,也是计划内维护和灾备演练的核心操作。

1

切换前的检查 (Pre-Switchover Checks)

检查配置状态

SHOW CONFIGURATION; 确保状态为 SUCCESS。

DGMGRL> show Configuration;

Configuration - anyadb

  Protection Mode: MaxPerformance
  Members:
  anyadb   - Primary database
    anyadbdg - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 9 seconds ago)

验证主备库状态

SHOW DATABASE 'anyadb'; 和 SHOW DATABASE 'anyadbdg'; 确保状态都是 SUCCESS。

DGMGRL> show database anyadb;

Database - anyadb

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    anyadb1
    anyadb2

Database Status:
SUCCESS

DGMGRL> show database anyadbdg;

Database - anyadbdg

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 24.00 KByte/s
  Real Time Query:    ON
  Instance(s):
    anyadbdg1 (apply instance)
    anyadbdg2

Database Status:
SUCCESS

检查主备切换状态,确认主备Ready for Switchover均为Yes

DGMGRL> validate  database anyadbdg;

  Database Role:     Physical standby database
  Primary Database:  anyadb

  Ready for Switchover:  Yes
  Ready for Failover:    Yes (Primary Running)

  Flashback Database Status:
    anyadb  :  Off
    anyadbdg:  Off

  Managed by Clusterware:
    anyadb  :  YES            
    anyadbdg:  YES            

  Log Files Cleared:
    anyadb Standby Redo Log Files:    Cleared
    anyadbdg Online Redo Log Files:   Not Cleared
    anyadbdg Standby Redo Log Files:  Available

  Transport-Related Property Settings:
    Property                        anyadb Value             anyadbdg Value
    RedoCompression                 DISABLE                  ENABLE

DGMGRL> validate  database anyadb;

  Database Role:    Primary database

  Ready for Switchover:  Yes

  Flashback Database Status:
    anyadb:  Off

  Managed by Clusterware:
    anyadb:  YES 

2

执行切换命令

1) 连接到DGMGRL

dgmgrl sys/oracle@DGMGR_ANYADB

2)发出切换指令

DGMGRL> switchover to anyadbdg;

3)观察切换过程

Broker 会接管一切,并实时打印出执行步骤。

Performing switchover NOW, please wait...
Operation requires a connection to database "anyadbdg"
Connecting ...
Connected to "anyadbdg"
Connected as SYSDBA.
New primary database "anyadbdg" is opening...
Oracle Clusterware is restarting database "anyadb" ...
Connected to an idle instance.
Connected to an idle instance.
Connected to an idle instance.
Connected to an idle instance.
Connected to an idle instance.
Connected to an idle instance.
Connected to an idle instance.
Connected to "anyadb"
Connected to "anyadb"
Switchover succeeded, new primary is "anyadbdg"

深度解析

切换时 RAC 实例发生了什么?

一个常见的疑问是:“在执行 SWITCHOVER 时,我需要手动关闭 RAC 的某个节点吗?”

答案是:完全不需要。

Data Guard Broker 的强劲之处就在于它能自动、智能地协调所有 RAC 实例。

其大致流程如下:

1)滚动关闭原主库实例

Broker 会先正常关闭原主库(anyadb )的一个实例(如 anyadb2),并保留另一个实例(anyadb1)作为“工作实例”。

2) 转换角色

通过连接到这个“工作实例” anyadb1,执行 ALTER DATABASE COMMIT TO SWITCHOVER… 命令,将数据库角色安全地转换为 PHYSICAL STANDBY。

3)完成并重启

角色转换成功后,关闭最后的“工作实例” anyadb1。

然后,Broker 会利用我们之前配置的静态监听器,在新备库(即旧主库 anyadb )上以 MOUNT 模式启动一个实例,使其开始接收新主库的日志。

整个过程全自动完成,您只需发出一条 SWITCHOVER 命令,然后静待成功即可。

3

切换后的验证

(Post-Switchover Verification)

在 DGMGRL 中验证

SHOW CONFIGURATION; 确认 racdb_s 已成为 Primary database。

DGMGRL> show configuration;

Configuration - anyadb

  Protection Mode: MaxPerformance
  Members:
  anyadbdg - Primary database
    anyadb   - Physical standby database 

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 239 seconds ago)

在数据库层面验证

  • 连接到新的主库 anyadbdg ,确认其角色为 PRIMARY,打开模式为 READ WRITE。
NAME       DATABASE_ROLE        OPEN_MODE            PROTECTION_MODE           PLATFORM_NAME
---------- -------------------- -------------------- ------------------------- ------------------------------
ANYADB     PRIMARY              READ WRITE           MAXIMUM PERFORMANCE       Linux x86 64-bit
  • 连接到新的备库 anyadb ,确认其角色为 PHYSICAL STANDBY,打开模式为 MOUNTED 或 READ ONLY WITH APPLY。
NAME       DATABASE_ROLE        OPEN_MODE            PROTECTION_MODE           PLATFORM_NAME
---------- -------------------- -------------------- ------------------------- ------------------------------
ANYADB     PHYSICAL STANDBY     READ ONLY WITH APPLY MAXIMUM PERFORMANCE       Linux x86 64-bit

03

结论

Data Guard Broker 是 Oracle 高可用架构的灵魂。

它将复杂的 RAC DG 环境管理和角色切换过程,从一系列繁琐、易错的手动步骤,简化为几条直观、可靠的命令。

对于任何运行着 Oracle RAC Data Guard 的关键系统,部署和使用 Broker 不仅是最佳实践,更是保障系统稳定、简化运维、从容应对灾备演练的必备利器。

写在最后

实际上,多数数据库性能问题的根源,常常与操作系统层面的资源配置、性能瓶颈等因素密切相关。

如果你还想系统补齐 Linux 的实战短板,推荐看看刘峰老师的 Linux 系列课程,循序渐进,从命令行到运维部署,一步到位。

原文链接:
https://mp.weixin.qq.com/s/tJyJHlnMzksDUpmmycS7rw

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...