这篇文章主要讲解了“怎么解决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方便后面做验证
情景1:sqlplus使用172.16.4.125连接rac b
结果:无法连接rac b
情景2:sqlplus使用相同的scan ip 172.16.4.125,但是服务名用的是rac a的db_name
结果:查看dbid后,客户端实际连接的数据库是rac a,并非是rac b
情景3:在rac b上重启数据库,客户再次连接
结果: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后客户端连接异常