应用程序工作负载在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部门连接与负载都将转移到srv1。
       所有连接到当前的两个部门无需关心当前连接的是哪个数据库与那个节点上的实例。
  
       从上面的描述可知
       各节点连接对于客户端而言是透明的,用户根本无需关心连接到的数据库以及实例,撇开了复杂的后台配置
       在RAC中可以将多个services由集群(dbca,srvctl)来集中管理,简化管理成本

三、添加或修改services方式
       可以使用DBCA或者srvctl以及OEM来创建或管理services,在创建services的同时,可以指定首选的实例、备用实例以及TFA等相关选项
      下面描述使用srvctl命令创建以及管理services.
1、创建services
      srvctl add service -d <db_name> -s <service_name> -r "preferred-instance-list" -a "available-instance-list" -P <TFA-policy>
      TFA-policy 选项为basic 或preconnect
2、查看services配置
      srvctl config service -d <db_name> [-s service_name] [-a]

3、配置services自动运行
      srvctl enable|disable service -d <db_name> -s service_name -i instance_name

4、启动services
      srvctl start service -d <db_name> -s <service_name> -i instance_name -o start-option -c connect-string -q

5、停止services
      srvctl stop service -d <db_name> -s <service_name> -i instance_name -c connect-string -q -f

6、查看service状态
      srvctl status service -d <db_name> -s <service_name> -f -v

7、转载services
      srvctl relocate service -d <db_name> -s <service_name> -i old_instance_name -t new_instance_name

8、删除services
      srvctl remove service -d <db_name> -s <service_name> -i instance_name [-f]
       详细的srvctl使用方法,提示符下直接输入srvctl即可得到命令帮助信息

四、演示srvctl创建及管理services

  1. 1、单实例上service的配置
  2. sys@SYBO2SZ> show parameter service_names;
  3. NAME                                 TYPE        VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. service_names                        string
  6. sys@SYBO2SZ> alter system set service_names='hr.sybo2sz.com,sales.sybo2sz.com';
  7. System altered.
  8. sys@SYBO2SZ> show parameter service
  9. NAME                                 TYPE        VALUE
  10. ------------------------------------ ----------- ------------------------------
  11. service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c
  12. om
  13. oracle@SZDB:/u02/database/SYBO2SZ> lsnrctl status listener_SYBO2SZ
  14. Listener Parameter File   /users/oracle/OraHome10g/network/admin/listener.ora
  15. Listener Log File         /users/oracle/OraHome10g/network/log/listener_sybo2sz.log
  16. Listening Endpoints Summary...
  17. ........
  18. Service "hr.sybo2sz.com" has 1 instance(s).   --#可以看到监听器上已经有了为hr.sybo2sz.com的service
  19. Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...
  20. Service "sales.sybo2sz.com" has 1 instance(s).
  21. Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...
  22. ........
  23. Author: Robinson
  24. Blog: http://blog.csdn.net/robinson_0612
  25. 此时客户端的tnsnams.ora的配置可以将service_name设置为hr.sybo2sz.com或sales.sybo2sz.com,如下:
  26. HR=
  27. (DESCRIPTION=
  28. (ADDRESS=
  29. (PROTOCOL=TCP)
  30. (HOST=192.168.7.2)
  31. (PORT=1915)
  32. )
  33. (CONNECT_DATA=
  34. (SERVICE_NAME=hr.sybo2sz.com)
  35. )
  36. )
  37. SALES=
  38. (DESCRIPTION=
  39. (ADDRESS=
  40. (PROTOCOL=TCP)
  41. (HOST=192.168.7.2)
  42. (PORT=1915)
  43. )
  44. (CONNECT_DATA=
  45. (SERVICE_NAME=sales.sybo2sz.com)
  46. )
  47. )
  48. C:\Users\robinson.cheng>sqlplus scott/tiger@hr
  49. Connected to:
  50. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
  51. SQL> show parameter service
  52. NAME                                 TYPE        VALUE
  53. ------------------------------------ ----------- ------------------------------
  54. service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c
  55. om
  56. 2、集群中的services的配置.
  57. oracle@bo2dbp:~> ./crs_stat.sh
  58. Resource name                                Target     State
  59. --------------                                ------     -----
  60. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  61. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
  62. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  63. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  64. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  65. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  66. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
  67. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  68. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  69. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  70. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
  71. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
  72. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs
  73. oracle@bo2dbp:~> export ORACLE_SID=ora10g1
  74. oracle@bo2dbp:~> sqlplus / as sysdba
  75. SQL> show parameter service
  76. NAME                                 TYPE        VALUE
  77. ------------------------------------ ----------- ------------------------------
  78. service_names                        string      ora10g
  79. SQL> host
  80. oracle@bo2dbp:~> srvctl add service -d ora10g -s hr_ora10g -r ora10g1 -a ora10g2 -P basic
  81. oracle@bo2dbp:~> ./crs_stat.sh
  82. Resource name                                Target     State
  83. --------------                                ------     -----
  84. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  85. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
  86. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  87. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  88. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  89. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  90. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
  91. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  92. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  93. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  94. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
  95. ora.ora10g.hr_ora10g.cs                       OFFLINE    OFFLINE  --#service已经被添加,但处于offline状态
  96. ora.ora10g.hr_ora10g.ora10g1.srv              OFFLINE    OFFLINE
  97. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
  98. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs
  99. oracle@bo2dbp:~> srvctl config service -d ora10g -s hr_ora10g -a  --#查看service
  100. hr_ora10g PREF: ora10g1 AVAIL: ora10g2 TAF: basic
  101. oracle@bo2dbp:~> srvctl enable service -d ora10g -s hr_ora10g  --#允许自启动service
  102. oracle@bo2dbp:~> srvctl start service -d ora10g -s hr_ora10g   --#启动service
  103. oracle@bo2dbp:~> ./crs_stat.sh
  104. Resource name                                Target     State
  105. --------------                                ------     -----
  106. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  107. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
  108. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  109. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  110. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  111. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  112. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
  113. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  114. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  115. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  116. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
  117. ora.ora10g.hr_ora10g.cs                       ONLINE     ONLINE on bo2dbp
  118. ora.ora10g.hr_ora10g.ora10g1.srv              ONLINE     ONLINE on bo2dbp  --#service已经被启动
  119. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
  120. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs
  121. oracle@bo2dbp:~> exit
  122. exit
  123. SQL> show parameter service  --#参数service_names中也出现了hr_ora10g服务名
  124. NAME                                 TYPE        VALUE
  125. ------------------------------------ ----------- ------------------------------
  126. service_names                        string      ora10g, hr_ora10g
  127. oracle@bo2dbp:~> lsnrctl status LISTENER_BO2DBP   --#相应地,监听器中也有对应的Service
  128. .........                                         --#注意,备用的实例并没有注册到当前的Service
  129. Service "hr_ora10g" has 1 instance(s).
  130. Instance "ora10g1", status READY, has 2 handler(s) for this service...
  131. Service "ora10g" has 2 instance(s).
  132. Instance "ora10g1", status READY, has 2 handler(s) for this service...
  133. Instance "ora10g2", status READY, has 1 handler(s) for this service...
  134. ..........
  135. 修改TAF配置
  136. SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services
  137. 2  where name='hr_ora10g';
  138. NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G
  139. -------------------- -------------------- -------------------- ------------ -----
  140. hr_ora10g                                                                   LONG
  141. 使用modify_service包来更新data dictionary和listener中的信息
  142. begin
  143. dbms_service.modify_service(
  144. service_name=>'hr_ora10g',
  145. failover_method =>dbms_service.failover_method_basic,
  146. failover_type =>dbms_service.failover_type_select,
  147. failover_retries =>180,
  148. failover_delay=>5);
  149. end;
  150. /
  151. 再次查看failover_method,failover_type等值已被显示
  152. SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services
  153. 2  where name='hr_ora10g';
  154. NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G
  155. -------------------- -------------------- -------------------- ------------ -----
  156. hr_ora10g            BASIC                SELECT                            LONG
  157. 对于使用srvctl 移除services后,视图中依然可以查到上述信息,需要使用
  158. dbms_service.delete_service(service_name   in varchar2) 来移除;

五、总结
1、单实例通过修改service_name参数以及tnsnames.ora等来启用services特性
2、service_name可以指定一个或多个,最多可以创建64个,去除两个隐藏的services,可供添加的为62个。总长度为4k
3、使用dbca会配置services会自动更新ocr,启动services,当删除时,同样会从自动停止services以及从ocr移除
4、srvctl 工具只更新ocr,需要使用dbms_service包来更新data dictionary和listener中的信息
5、配置services可以基于业务逻辑来实现负载均衡(load balance),即将不同的服务请求分布到特定的实例
6、配置services也可以实现故障转移(failover),通过设定TAF选项来指定failover方式(basic,preconnect)以及类型(select,session)
7、services被整合到集群当中,可以通过srvctl,dbca,oem等工具进行集中化管理,如服务的自启动,重新分配等
8、可以为oracle job通过services将job分布到不同的实例上来完成

转:// 再说 Oracle RAC services的更多相关文章

  1. Oracle RAC 环境下的 v$log v$logfile

    通常情况下,在Oracle RAC 环境中,v$视图可查询到你所连接实例的相关信息,而gv$视图则包含所有实例的信息.然而在RAC环境中,当我们查询v$log视图时说按照常理的话,v$log视图应当看 ...

  2. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  3. oracle rac安装

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4681351&uid=29655480 参考 1.百度文库中的收藏 2. ...

  4. oracle rac理解和用途扩展

    Oracle RAC的优势在于利用多个节点(数据库实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展.实现Oracle RAC需要 ...

  5. Oracle RAC 服务器端连接负载均衡(Load Balance)

    Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到 ...

  6. ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

    不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数 ...

  7. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.6.重新配置与缷载11R2 Grid Infrastructure

    1.[root@linuxrac1 ~]# /u01/app/oraInventory/orainstRoot.sh 2.[root@linuxrac2 ~]# /u01/app/oraInvento ...

  8. Oracle RAC Failover

    Oracle  RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会 ...

  9. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

随机推荐

  1. python的Web框架,Django框架中的请求与响应

    请求与响应 简单流程图 我们先来了解一个请求与响应的大概流程  视图函数接受到的request到底是个什么对象呢? 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的 ...

  2. AutoIt介绍

    AutoIt的下载网址: https://www.autoitscript.com/site/autoit/downloads/ AutoIt在线文档:http://www.autoit3.cn/Do ...

  3. 一个小时学会PHP

    一.PHP概要 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广 ...

  4. ExtJS4中设置tabpanel的tab高度问题

    最近碰到个问题,在ExtJS中应该如何设置tabpanel的tab的高度?因为默认情况下,tab的高度太矮了,以至于tab的标题底部字都被截掉.设置了个tabpanel.minHeight = ‘50 ...

  5. 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

    首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能 ...

  6. IDEA maven 项目如何上传到私服仓库

    前言:idea maven 发布版本到私服(快照和正式版).我有个项目( jar 包源码),其他 maven 项目能直接引入依赖就最好了,所以必须将这个 jar 包源码发布到 maven 私服仓库里去 ...

  7. jsp使用servlet实现用户登录 及动态验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...

  8. HDU2196(SummerTrainingDay13-D tree dp)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. element-ui 的el-button组件中添加自定义颜色和图标

    我使用的element-ui的版本是V1.4.13. 如上图所示,如果使用el-button,加颜色是可以通过设置type属性的值,加图标就设置icon属性的值. 现在产品给了一个需求,就是自定义的很 ...

  10. 【读书笔记】iOS-设计简单的Frenzic式益智游戏

    如果你决定用UIView动画或Core Animation,一定要编写一些测试用例,模拟游戏可能遇到的要求最高的动画,另外不要忘记播放声音.不要等到最后才增加声音,因为在iPhone上播放音乐和音效确 ...