日期:2014-05-16  浏览次数:20409 次

再说 Oracle RAC services

        应用程序工作负载在Oracle 10g中可以被定为services,也称之为服务,能够在单实例中使用,也能够在RAC中单独使用和管理。因此整个数据库负载能够被分割为多个不同的services,通过管理service能够简化用户或session的管理。其次services特性的重要体现在RAC之中用于实现负载均衡与故障转移。本文描述什么是services,以及使用services的好处,以及如何使用services.

 

一、services与service_name
services
       对于客户端应用程序而言,仅仅需要关心的是数据库提供了哪些服务,而不需要知道它到底连接是哪个数据库或者那个实例。
       因此在数据库服务器端我们可以创建一个或多个services供客户端时所用,是一个或多个service_name的统称。
       对于这些提供的服务,Oracle会将其注册到监听器以供外部建立连接。
       可以通过lsnrctl status [listener_name] 查看当前的服务下有多少个实例为其响应该服务。
       也可以通过lsnrctl service [listener_name] 查看更详细的信息,包括当前的连接状况,ip,端口号等。

service_name
       指客户端连接到实例的服务名。在Oracle 8i时就有提出service_name的概念,通常用于代替tnsnames.ora中的ORACLE_SID。
       9i之后,Oracle推荐使用service_name而不是SID。
       可以通过定义多不不同的服务名来区分不同的用户连接,该参数缺省的格式为db_name.domain_name。
       下面是一个客户端的tnsnames.ora,两个不同的连接标识符下一个使用了ORACLE_SID,一个使用SERVICE_NAME,两种方式都可行。
       SYBO2SZ_SID=
         (DESCRIPTION=
           (ADDRESS=
             (PROTOCOL=TCP)
             (HOST=192.168.7.2)
             (PORT=1915)
           )
           (CONNECT_DATA=
             (ORACLE_SID=SYBO2SZ)  #此处使用了ORACLE_SID=<>,也可以直接使用SID=<>
           )
         )
  
       SYBO2SZ=
         (DESCRIPTION=
           (ADDRESS=
             (PROTOCOL=TCP)
             (HOST=192.168.7.2)
             (PORT=1915)
           )
           (CONNECT_DATA=
             (SERVICE_NAME=SYBO2SZ) #Oracle 9i之后推荐使用SERVICE_NAME
           )
         )


二、使用services的益处
       如前所述,可以为同一个数据库创建多个不同的services来为不同的客户端分组提供服务。对于单实例而言,尽管可以为其创建多个不同的services,然而提供这些服务始终是单数据库单实例,因此性能体现的并不明显。而对于多实例的情形下,能够在不同的时段或根据不同的商业逻辑规则来决定将不同的服务分布到不同的实例,以及可以为services设定首选实例,备用实例。一旦首选实例出现单点故障,则services会自动failover到备用实例。

       假如定义当前RAC数据库有3个节点srv1,srv2,srv3
       有两个不同的service分别sales.2gotrade.com和settlement.2gotrade.com在当前数据库运行
       则sales部门通过sales.2gotrade.com服务名来建立连接,settlement部门通过settlement.2gotrade.com服务名来建立连接。
       其次sales部分的负载通常运行在srv1,srv2,而其对应的备用节点则为srv3,即当节点srv1,srv2失败后,所有基于sales的连接与负载都将转移到节点srv3。
       假定settlement部门负载通常较小,因此设定首选节点为srv3,备用节点为srv1,则节点srv3单点故障后,则所有settlement部门连接与