再说 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部门连接与负载都将转移到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、单实例上service的配置

sys@SYBO2SZ> show parameter service_names;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string

sys@SYBO2SZ> alter system set service_names='hr.sybo2sz.com,sales.sybo2sz.com';

System altered.

sys@SYBO2SZ> show parameter service

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c
		                                                 om
oracle@SZDB:/u02/database/SYBO2SZ> lsnrctl status listener_SYBO2SZ
Listener Parameter File   /users/oracle/OraHome10g/network/admin/listener.ora
Listener Log File         /users/oracle/OraHome10g/network/log/listener_sybo2sz.log
Listening Endpoints Summary...
	........
Service "hr.sybo2sz.com" has 1 instance(s).   --#可以看到监听器上已经有了为hr.sybo2sz.com的service
  Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...
Service "sales.sybo2sz.com" has 1 instance(s).
  Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...
	........                                                

Author: Robinson
Blog: http://blog.csdn.net/robinson_0612

此时客户端的tnsnams.ora的配置可以将service_name设置为hr.sybo2sz.com或sales.sybo2sz.com,如下:
HR=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=192.168.7.2)
      (PORT=1915)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=hr.sybo2sz.com)
    )
  )

SALES=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=192.168.7.2)
      (PORT=1915)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=sales.sybo2sz.com)
    )
  )

C:\Users\robinson.cheng>sqlplus scott/tiger@hr

Connected to:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL> show parameter service

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c
		                                                 om                                                   

2、集群中的services的配置.
oracle@bo2dbp:~> ./crs_stat.sh
 Resource name                                Target     State
--------------                                ------     -----
ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs

oracle@bo2dbp:~> export ORACLE_SID=ora10g1
oracle@bo2dbp:~> sqlplus / as sysdba
SQL> show parameter service

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      ora10g
SQL> host
oracle@bo2dbp:~> srvctl add service -d ora10g -s hr_ora10g -r ora10g1 -a ora10g2 -P basic
oracle@bo2dbp:~> ./crs_stat.sh
 Resource name                                Target     State
--------------                                ------     -----
ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
ora.ora10g.hr_ora10g.cs                       OFFLINE    OFFLINE  --#service已经被添加,但处于offline状态
ora.ora10g.hr_ora10g.ora10g1.srv              OFFLINE    OFFLINE
ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs

oracle@bo2dbp:~> srvctl config service -d ora10g -s hr_ora10g -a  --#查看service
hr_ora10g PREF: ora10g1 AVAIL: ora10g2 TAF: basic
oracle@bo2dbp:~> srvctl enable service -d ora10g -s hr_ora10g  --#允许自启动service
oracle@bo2dbp:~> srvctl start service -d ora10g -s hr_ora10g   --#启动service
oracle@bo2dbp:~> ./crs_stat.sh
 Resource name                                Target     State
--------------                                ------     -----
ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs
ora.ora10g.hr_ora10g.cs                       ONLINE     ONLINE on bo2dbp
ora.ora10g.hr_ora10g.ora10g1.srv              ONLINE     ONLINE on bo2dbp  --#service已经被启动
ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs
oracle@bo2dbp:~> exit
exit

SQL> show parameter service  --#参数service_names中也出现了hr_ora10g服务名

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      ora10g, hr_ora10g

oracle@bo2dbp:~> lsnrctl status LISTENER_BO2DBP   --#相应地,监听器中也有对应的Service
.........                                         --#注意,备用的实例并没有注册到当前的Service
Service "hr_ora10g" has 1 instance(s).
  Instance "ora10g1", status READY, has 2 handler(s) for this service...
Service "ora10g" has 2 instance(s).
  Instance "ora10g1", status READY, has 2 handler(s) for this service...
  Instance "ora10g2", status READY, has 1 handler(s) for this service...
		..........  

修改TAF配置
SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services
  2  where name='hr_ora10g';

NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G
-------------------- -------------------- -------------------- ------------ -----
hr_ora10g                                                                   LONG

使用modify_service包来更新data dictionary和listener中的信息
begin
dbms_service.modify_service(
service_name=>'hr_ora10g',
failover_method =>dbms_service.failover_method_basic,
failover_type =>dbms_service.failover_type_select,
failover_retries =>180,
failover_delay=>5);
end;
/

再次查看failover_method,failover_type等值已被显示
SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services
  2  where name='hr_ora10g';

NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G
-------------------- -------------------- -------------------- ------------ -----
hr_ora10g            BASIC                SELECT                            LONG

    对于使用srvctl 移除services后,视图中依然可以查到上述信息,需要使用
    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 网络配置相关基础以及概念性的问题请参考:

        Services in Oracle Database 10g

        配置ORACLE 客户端连接到数据库
        配置非默认端口的动态服务注册
       配置sqlnet.ora限制IP访问Oracle       Oracle 监听器日志配置与管理
       设置 Oracle 监听器密码(LISTENER)       Oracle RAC 监听配置       ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

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

       配置RAC负载均衡与故障转移

   

有关基于用户管理的备份和备份恢复的概念请参考

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

   SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

   Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 

有关RMAN的备份恢复与管理请参考

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

 

有关ORACLE体系结构请参考

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构) 

时间: 2024-09-17 04:52:27

再说 Oracle RAC services的相关文章

Oracle RAC OCR 与健忘症

    OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息.而且是公用的配置,也就是说多个节点共享相同的配置信息.因此该配置应当存储于共享磁盘.本文主要基于Oracle 10g RAC描述了集群的OCR以及OCR产生的健忘问题.   一.OCR的特点   类似于Windows注册表,用于存储所有与集群,RAC数据库相关的配置信息   被多个节点所共享,因此,只能存储于共享磁盘.支持单disk以及镜像方式来存放.大小通常100MB-1GB.   在Oracle 1

Oracle RAC OCR 的管理与维护

   OCR相当于Windows的注册表.对于Windows而言,所有的软件信息,用户,配置,安全等等统统都放到注册表里边.而集群呢,同样如此,所有和集群相关的资源,配置,节点,RAC数据库统统都放在这个仓库里.如果OCR被破坏则导致集群服务启动异常,需要修复OCR.因此OCR的管理与维护对于整个集群而言,是相当重要的.本文主要描述了Oracle 10g RAC下的OCR的管理与维护. 1.环境 oracle@bo2dbp:~> cat /etc/issue Welcome to SUSE Li

Oracle RAC OCR 的备份与恢复

        Oracle Clusterware把整个集群的配置信息放在共享存储上,这些信息包括了集群节点的列表.集群数据库实例到节点的映射以及CRS应用程序资源信息.也即是存放在ocr 磁盘(或者ocfs文件)上.因此对于这个配置文件的重要性是不言而喻的.任意使得ocr配置发生变化的操作在操作之间或之后都建议立即备份ocr.本文主要基于Oracle 10g RAC环境描述OCR的备份与恢复.        OCR 相关参考:        Oracle RAC OCR 与健忘症      

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

      通常情况下,在Oracle RAC 环境中,v$视图可查询到你所连接实例的相关信息,而gv$视图则包含所有实例的信息.然而在RAC环境中,当我们查询v$log视图时说按照常理的话,v$log视图应当看到的是你所连接到实例的日志组的信息.但v$log是个例外,也就是说v$log视图里看到的不仅仅是自身实例所包含的redo日志组,其他所有剩余实例的redo日志组也同样会出现在该视图中.无论你从任意一个节点连接查询v$log视图都将获得相同的结果.该情形同样适用于v$logfile.这到底

Vmware server 下为Oracle RAC 添加共享磁盘

    在VMware下的Oracle RAC 环境中,对于共享存储不够或者需要增加新的共享磁盘来配置ocr或votingdisk的多路镜像,我们可以通过vmware下的命令行来增加共享存储,然后将这些新磁盘逐一追加到虚拟机即可.下面给出具体描述.   1.添加虚拟磁盘 #下面我们为虚拟机增加2块共享磁盘 #一块为添加ocr镜像,一块用于补充asm磁盘不够用的情形 C:\Users\robinson.cheng>cd C:\Program Files (x86)\VMware\VMware Se

Oracle RAC 连接到指定实例

        在某些特定的情形下,有时候需要从客户端连接到RAC中指定的实例,而不是由客户端Load_balance来动态选择或者是通过服务器端的监听器根据负载情形来转发.对此我们可以通过为tnsnames.ora中特定的网络服务名添加instance_name子项,或者是单独建立一个指向所需实例的网络服务名,下面描述这两种情形.   一.测试环境 -->Oracle 版本 SQL> select * from v$version where rownum<2; BANNER ----

Oracle RAC failover 测试(连接时故障转移)

    Oracle RAC 集群最突出的表现就是高可用性,这些内容主要包括load balance以及failover,通过这些技术使得单点故障不影响客户端端应用程序对数据库的正常访问,以及通过创建service实现节点间负载均衡.本文主要描述Oracle 10g rac环境下的Oracle failover测试.    下面是一些关于这方面的基础参考或相关链接:  有关负监听配置,载均衡(load balance)以及Oracle service请参考    ORACLE RAC 监听配置

Vmware 下Oracle RAC搬家引起CRS-1006/CRS-0215/CRS-0233

   最近虚拟机下的Oracle 10g RAC搬家,搬家完毕之后,Oracle 集群resource之VIP无法正常启动,收到了CRS-0233: Resource or relatives are currently involved with another operation 错误提示.为为啥呢,原来啊,搬家了地址发生变化了,你得使用你家里的新地址阿.... 1.环境描述 Oracle 10g RAC + Suse 10 注,将RAC虚拟机搬家之后,通常情况下我们在添加虚拟机时选择复制(

Oracle Net Services - Tracing and Logging at a Glance

    Oracle Net trace 用于跟踪或调试oracle连接故障,连接异常断开或者连接超时等情形,通过产生详细的跟踪信息来进行分析和诊断Oracle Net相关故障.关于这个网络调试主要是通过为相关的网络配置文件添加相关的参数来实现.MetaLink上ID 219968.1有详尽的描述.   一.Oracle trace的相关参数  TRACE_LEVEL_[CLIENT|SERVER|LISTENER]     = [0-16|USER|ADMIN|SUPPORT|OFF] TRA