前提知识

  • 客户端连接RAC的TNS串使用多IP方式连接,会默认先连接IP1,若IP1无法连接时,才会连接IP2,以此类推
    参考试验 http://www.821121.com/?p=2042不同连接串配置产生的效果
  • 当主库为集群环境并配置有本节点静态监听时,若IP1所在集群环境的数据库关闭(不关闭监听、集群服务),客户端连接IP1会受到静态监听影响,不会尝试后续IP2,从而造成连接异常
  • 此次模拟试验时在上述前提下模拟该连接串配置对ADG的影响

环境介绍

主从情况

操作系统 CentOS 7.6.1810 (Core) CentOS 7.6.1810 (Core)
数据库类型 RAC 单机
版本 19.3 19.3
IP 192.168.0.85 rac1/192.168.0.86 rac2/10.0.0.85 rac1priv/10.0.0.86 rac2priv/192.168.0.87 rac1vip/192.168.0.88 rac2vip/192.168.0.89 racscanip 192.168.0.143 oracle
log_archive_dest_2 log_archive_dest_2='SERVICE=orcl19cdg2 LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl19cdg2'; log_archive_dest_2='SERVICE=89orcl19c LGWR ASYNC NOAFFIRM delay=0 max_failure=0 reopen=60 VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'

从库143的tnsnames.ora

89orcl19c =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.85)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

orcl19cdg2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.143)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl19cdg2)
    )
)

85监听情况

[grid@rac1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 10-DEC-2024 11:22:48

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                09-DEC-2024 17:27:51
Uptime                    0 days 17 hr. 54 min. 56 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.3.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.85)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.87)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_ARCH" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_OCR" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_TEST" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "24821e337619f56ee0635600a8c08e13" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "266aeef7edadba24e0635500a8c080e0" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status UNKNOWN, has 1 handler(s) for this service...
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "pdb" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "testpdb" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
The command completed successfully

86监听情况(略)

模拟步骤(因博客篇幅有限,日志或文件记录过长,改为省略不展示)

实验一、ADG正常情况下,85关闭,同步是否正常

85节点切集群日志并关库

85实例日志(略)

检查Asm里的归档文件(略)

从库143实例日志情况(略)

从库143归档目录情况(略)

85停库情况下86切日志(略)

从库143实例日志情况(略)

从库143归档情况(略)

结论

可正常同步

实验二、ADG异常,85关闭,86切换日志,从库143重新开启后同步是否正常

86实例日志(略)

86日志显示,连接断开,后续归档没能自动传给从库143,每300秒尝试连接从库143

从库143日志(略)

结论

受监听影响,从库143重新开库并开启同步是无法主动获取到归档的,需要主库进程恢复连接(默认300秒轮询)后主动发送给从库143

实验三、再实验二的基础上修改连接串为scanIP

从库143的tnsnames.ora

89orcl19c =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.89)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

orcl19cdg2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.143)(PORT = 1521))
    )

结论

若从库143连接串改为连接SCANIP ,从库143开库就能主动连接上86,不用等待300秒的主库轮询

file

Related Posts