单实例配置 

(DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.19)(PORT = 1521))
     (CONNECT_DATA = (SID =orcle1)
     )
   )

多实例配置

(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE=off)   (FAILOVER=ON)
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.12)(PORT = 1521))
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.13)(PORT = 1521))
   )
   (CONNECT_DATA =
       (SERVICE_NAME = orcle)
   )
   (FAILOVER_MODE=(TYPE=SELECT))
   (METHOD=BASIC)
  )

多实例配置中 LOAD_BALANCE 属性:

        如果未开启load_balance=yes时,Oracle Net会根据地址列表按顺序来选择一个进行连接,直到连接成功为止。  
        如果第一个host主机连接失败,在有多个地址的情形下,接下来选择第二个地址连接,依此类推,直到连接成功为止。
        当开启了load_balance=yes时,则Oracle Net会从多个地址中随机地选择一个地址进行连接,直到连接成功为止。
        注意,此连接方式仅根据地址列表随机选择,并不考虑到各个实例上当前真正连接数量的多少,也即是没有考虑各个节点真实的连接负载情况。

多实例配置中 FAILOVER 属性:

        oracle的failover是指在oracle集群汇总,客户端当前连接的实例发生故障时,oracle会自动将连接切换到另外一个实例上的情况。
        或者说,当用户连接到RAC环境时,用户实际是连接到RAC中的一个实例,用户的查询等操作也是由该

        实例完成的,如果该实例down掉了,那么用户连接会被转移到其他健康实例,而这种转换对于用户是透明

        的,用户的select语句仍然继续返回结果集,感觉不到异常。

        可以通过 select instance_name from v$instance; 连接一个实例后,先修改端口,再来看具体连接的是否是新的实例。注意新打开一个sql窗口


1. METHOD: 用户定义何时创建到其实例的连接,有BASIC 和 PRECONNECT 两种可选值。 


     BASIC:是指在感知到节点故障时才创建到其他实例的连接。 


     PRECONNECT: 是在最初建立连接时就同时建立到所有实例的连接,当发生故障时,立刻就可以切换到其他链路上。 


两种方法比较: BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源,两者就是是用时间换资源和用资源换时间的区别。 


2. TYPE: 用于定义发生故障时对完成的SQL 语句如何处理,其中有2种类型:session 和select. 


这2种方式对于未提交的事务都会自动回滚,区别在于对select 语句的处理,对于select,用户正在执行的select语句会被转移到新的实例上,在新的节点上继续返回后续结果集,而已经返回的记录集则抛弃。 


假设用户正在节点1上执行查询,整个结果集共有100条记录,现在已从节点1上返回10条记录,这时节点1宕机,用户连接被转移到节点2上,如果是session模式,则需要重新执行查询语句;如果是select方式,会从节点2上继续返回剩下的90天记录,而已经从节点1返回的10条记录不会重复返回给用户,对于用户而言,感受不到这种切换。 


显然为了实现select 方式,Oracle 必须为每个session保存更多的内容,包括游标,用户上下文等,需要更多的资源也是用资源换时间的方案。 


3. DELAY 和 RETRIES: 这2个参数分别代表重试间隔时间和重试次数。 


示例: 


RAC = 
 
 (DESCRIPTION = 
 
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)) 
 
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)) 
 
     (LOAD_BALANCE=YES) 
 
     ( 
 
CONNECT_DATA= 
 
  (SERVER=DEDICATED) 
 
(SERVICE_NAME=RAC) 
 
( 
 
 FAILOVER_MODE= 
 
(TYPE=session) 
 
(METHOD=basic) 
 
(RETRIES=180) 
 
(DELAY=5) 
 
) 
 
     ) 
 
   )