怎么解决RAC数据库环境修改scanip后客户端连接异常

  

这篇文章主要讲解了“怎么解决RAC数据库环境修改scanip后客户端连接异常”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决RAC数据库环境修改scanip后客户端连接异常”吧!

摘要:在某个项目上需要将1套rac数据库迁移到另外1套rac,这2套rac的网段一致、数据库名一致。在迁移之后发现新的数据还是会往老的数据库插入,然而新数据库并没有新增数据

一、场景简介

在某个项目上需要将1套rac数据库迁移到另外1套rac,这2套rac的网段一致、数据库名一致。这里将老的rac环境称作rac a,新的rac环境称作rac b,在正式迁移数据库的时候发现一个问题,即使rac b的scan ip与rac a的rac scan ip相同,然而在迁移后发现程序连的还是是老数据库rac a,数据全部存在了老的数据库内,并没有新数据进新的rac b。

经过排查后发现,rac a,rac b在修改scan ip之后并没有重启数据库或者集群,另外应用端程序的数据库连接字符串也没有问题,为什么数据还是会插入到老数据库,经过如下一番场景模拟之后,可以得到答案。

二、场景复现

本地部署了2套rac环境,网段一致,唯一不同的是db_name不一样
rac a
db_name:orcldb
部署后scan ip:172.16.4.125
拟修改新scan ip:172.16.4.140

rac b
db_name:orcl
部署后scan ip:172.16.4.135
拟修改新scan ip:172.16.4.125(rac b使用rac a的scan ip)

以上是为了模拟数据库迁移后,客户端程序在不改变数据库连接字符串的情况下,是否可以连接正确的数据库

使用客户端分别连接2套rac scan ip
在连接之前先查看rac a,rac b的dbid方便后面做验证
怎么解决RAC数据库环境修改scanip后客户端连接异常

怎么解决RAC数据库环境修改scanip后客户端连接异常

情景1:sqlplus使用172.16.4.125连接rac b
怎么解决RAC数据库环境修改scanip后客户端连接异常
结果:无法连接rac b

情景2:sqlplus使用相同的scan ip 172.16.4.125,但是服务名用的是rac a的db_name
怎么解决RAC数据库环境修改scanip后客户端连接异常
结果:查看dbid后,客户端实际连接的数据库是rac a,并非是rac b

情景3:在rac b上重启数据库,客户再次连接
怎么解决RAC数据库环境修改scanip后客户端连接异常

结果:rac b重启之后,查看dbid,sqlplus连接的才是真正的数据库
在项目环境中迁移数据从一个rac到另外一个rac当时之所以没有发现问题,是因为迁移之后的scan ip、db_name都与原来一模一样,但是数据库并没有重启,所以很难在项目现场暴露出问题。

三、验证总结

经过上述实验可知,修改rac scan ip之后需要重启要数据库,另外在MOS 1373350.1上发现此为11g rac的bug,如果不重启数据库,也可以通过重置remote_listener参数解决。mos上虽然说在11.2.0.3已经修复,但是在11.2.0.4依然可以有此bug
mos 文档如下:

Top Issues That Cause Troubles with SCAN VIP and Listeners (文档 ID 1373350.1)
  # 5:Issue  Service  not  getting  registered  with  SCAN  listener  after  failover  of 从而SCAN 听众
  After  SCAN  VIP 以及SCAN  listener 故障转移,instance  does  not  register  with 从而SCAN 听众只
  It  might  happen  for  only  1, of 从而scan 听众只Client  connection  gets  intermittent  ora - 12514, TNS: listener  does  not  currently 知道of  service  requested 拷贝connect 描述符。
  原因:
  1只Unpublished  Bug  12659561,, after  scan  listener 故障转移,database  instance  might  not  register 用,scan  listener  (refer , Note  12659561.8,),, fixed  11.2.0.3.2,拷贝,merge  patch  13354057, for  11.2.0.2  available  for  certain 平台又是;
  2只Unpublished  Bug  13066936,, Instance  does  not  register  services  when  scan  fails 配套;(refer , Note  13066936.8,),
  解决方案:
  1),For  both  above 错误,,,workaround  is 用unregister 以及register  remote  listener 提醒,database  instance  which  does  not  register 用a  SCAN  listener  with  following 步骤又是;
  show  parameter  remote_listener 
  alter  system  set  remote_listener=& # 39; & # 39;,,
  alter  system 注册,
  alter  system  set  remote_listener=& # 39; & lt; scan>: & lt; port> & # 39;;,
  alter  system 注册,
  2),Other  points 用check  if  service  is  not  registered  with  SCAN 听众:,
  又是;remote_listener 以及local_listener  is  defined  correctly 
  b只EZCONNECT  is  defined  sqlnet.ora,拷贝,例如:,NAMES.DIRECTORY_PATH=,(以及,EZCONNECT),
  c只SCAN  name  with  3, IPs  should  NOT  be  defined /etc/主机,拷贝,it  should  be  defined 拷贝DNS 
  d只running  nslookup  & lt; scan>, multiple  times  should  display  SCAN  VIP 拷贝round-robin  fashion 
  null

怎么解决RAC数据库环境修改scanip后客户端连接异常