在Oracle 11gR2以前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡,failover等等RAC的特性。因此,当数据库RAC集群需要添加或删除节点时,需要及时对客户端机器的tns进行更新。
在11gR2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性,该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅需要配置scan ip的tns信息,通过scan ip listener,连接后端集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对client产生影响。而oracle推荐做3条SCAN IP的目的是为了避免单点故障,加强高可用性。
实际中,2节点的rac使用1条SCAN IP就可以了,因为SCAN IP和SCAN Listener是独立于RAC的各个节点的,SCAN IP和SCAN Listener是在集群中的所有节点上随机选择停留节点的,3条SCAN IP对双节点rac没有太大意义。
scan ip以及scan ip listener停留在哪个节点,lsnrctl status drac-scan:1521才会正常,当该节点故障时,scan ip以及scan ip listener会和vip一样,自动漂移到另一个正常节点,实现failover特性。
实际上,在11gR2中,双节点rac,如果后端节点不会频繁更新,而客户端调整也方便时,完全可以在客户端像以前一样使用vip 的方式。