討論 Oracle RAC services之神奇作用

kunlunzhiying發表於2016-11-26

應用程式工作負載在 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

[sql] view plain copy
 print?
  1. 1、單例項上service的配置  
  2.   
  3. sys@SYBO2SZ> show parameter service_names;  
  4. NAME                                 TYPE        VALUE  
  5. ------------------------------------ ----------- ------------------------------  
  6. service_names                        string  
  7.           
  8. sys@SYBO2SZ> alter system set service_names='hr.sybo2sz.com,sales.sybo2sz.com';  
  9.           
  10. System altered.  
  11.           
  12. sys@SYBO2SZ> show parameter service  
  13.           
  14. NAME                                 TYPE        VALUE  
  15. ------------------------------------ ----------- ------------------------------  
  16. service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c  
  17.                                                          om  
  18. oracle@SZDB:/u02/database/SYBO2SZ> lsnrctl status listener_SYBO2SZ  
  19. Listener Parameter File   /users/oracle/OraHome10g/network/admin/listener.ora  
  20. Listener Log File         /users/oracle/OraHome10g/network/log/listener_sybo2sz.log  
  21. Listening Endpoints Summary...  
  22.     ........  
  23. Service "hr.sybo2sz.com" has 1 instance(s).   --#可以看到監聽器上已經有了為hr.sybo2sz.com的service  
  24.   Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...  
  25. Service "sales.sybo2sz.com" has 1 instance(s).  
  26.   Instance "SYBO2SZ", status READY, has 1 handler(s) for this service...   
  27.     ........                                                  
  28.           
  29. Author: Robinson  
  30. Blog: http://blog.csdn.net/robinson_0612  
  31.           
  32. 此時客戶端的tnsnams.ora的配置可以將service_name設定為hr.sybo2sz.com或sales.sybo2sz.com,如下:  
  33. HR=  
  34.   (DESCRIPTION=  
  35.     (ADDRESS=  
  36.       (PROTOCOL=TCP)  
  37.       (HOST=192.168.7.2)  
  38.       (PORT=1915)  
  39.     )  
  40.     (CONNECT_DATA=  
  41.       (SERVICE_NAME=hr.sybo2sz.com)  
  42.     )  
  43.   )  
  44.           
  45. SALES=  
  46.   (DESCRIPTION=  
  47.     (ADDRESS=  
  48.       (PROTOCOL=TCP)  
  49.       (HOST=192.168.7.2)  
  50.       (PORT=1915)  
  51.     )  
  52.     (CONNECT_DATA=  
  53.       (SERVICE_NAME=sales.sybo2sz.com)  
  54.     )  
  55.   )  
  56.           
  57. C:\Users\robinson.cheng>sqlplus scott/tiger@hr  
  58.           
  59. Connected to:  
  60. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  61.       
  62. SQL> show parameter service  
  63.           
  64. NAME                                 TYPE        VALUE  
  65. ------------------------------------ ----------- ------------------------------  
  66. service_names                        string      hr.sybo2sz.com,sales.sybo2sz.c  
  67.                                                          om                                                     
  68.           
  69. 2、叢集中的services的配置.                                                   
  70. oracle@bo2dbp:~> ./crs_stat.sh  
  71.  Resource name                                Target     State               
  72. --------------                                ------     -----               
  73. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp    
  74. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp    
  75. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp    
  76. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp    
  77. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp    
  78. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs    
  79. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs    
  80. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs    
  81. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs    
  82. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs    
  83. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs    
  84. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp    
  85. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs  
  86.           
  87. oracle@bo2dbp:~> export ORACLE_SID=ora10g1  
  88. oracle@bo2dbp:~> sqlplus / as sysdba  
  89. SQL> show parameter service  
  90.           
  91. NAME                                 TYPE        VALUE  
  92. ------------------------------------ ----------- ------------------------------  
  93. service_names                        string      ora10g  
  94. SQL> host  
  95. oracle@bo2dbp:~> srvctl add service -d ora10g -s hr_ora10g -r ora10g1 -a ora10g2 -P basic  
  96. oracle@bo2dbp:~> ./crs_stat.sh  
  97.  Resource name                                Target     State               
  98. --------------                                ------     -----               
  99. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp    
  100. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp    
  101. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp    
  102. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp    
  103. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp    
  104. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs    
  105. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs    
  106. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs    
  107. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs    
  108. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs    
  109. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs    
  110. ora.ora10g.hr_ora10g.cs                       OFFLINE    OFFLINE  --#service已經被新增,但處於offline狀態      
  111. ora.ora10g.hr_ora10g.ora10g1.srv              OFFLINE    OFFLINE             
  112. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp    
  113. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs  
  114.           
  115. oracle@bo2dbp:~> srvctl config service -d ora10g -s hr_ora10g -a  --#檢視service  
  116. hr_ora10g PREF: ora10g1 AVAIL: ora10g2 TAF: basic  
  117. oracle@bo2dbp:~> srvctl enable service -d ora10g -s hr_ora10g  --#允許自啟動service  
  118. oracle@bo2dbp:~> srvctl start service -d ora10g -s hr_ora10g   --#啟動service  
  119. oracle@bo2dbp:~> ./crs_stat.sh  
  120.  Resource name                                Target     State               
  121. --------------                                ------     -----               
  122. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp    
  123. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp    
  124. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp    
  125. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp    
  126. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp    
  127. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs    
  128. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs    
  129. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs    
  130. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs    
  131. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs    
  132. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbs    
  133. ora.ora10g.hr_ora10g.cs                       ONLINE     ONLINE on bo2dbp    
  134. ora.ora10g.hr_ora10g.ora10g1.srv              ONLINE     ONLINE on bo2dbp  --#service已經被啟動   
  135. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp    
  136. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs    
  137. oracle@bo2dbp:~> exit  
  138. exit  
  139.       
  140. SQL> show parameter service  --#引數service_names中也出現了hr_ora10g服務名  
  141.           
  142. NAME                                 TYPE        VALUE  
  143. ------------------------------------ ----------- ------------------------------  
  144. service_names                        string      ora10g, hr_ora10g  
  145.           
  146. oracle@bo2dbp:~> lsnrctl status LISTENER_BO2DBP   --#相應地,監聽器中也有對應的Service  
  147. .........                                         --#注意,備用的例項並沒有註冊到當前的Service  
  148. Service "hr_ora10g" has 1 instance(s).  
  149.   Instance "ora10g1", status READY, has 2 handler(s) for this service...  
  150. Service "ora10g" has 2 instance(s).  
  151.   Instance "ora10g1", status READY, has 2 handler(s) for this service...  
  152.   Instance "ora10g2", status READY, has 1 handler(s) for this service...  
  153.         ..........    
  154.   
  155. 修改TAF配置  
  156. SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services    
  157.   2  where name='hr_ora10g';  
  158.       
  159. NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G  
  160. -------------------- -------------------- -------------------- ------------ -----  
  161. hr_ora10g                                                                   LONG  
  162.   
  163. 使用modify_service包來更新data dictionary和listener中的資訊  
  164. begin  
  165. dbms_service.modify_service(  
  166. service_name=>'hr_ora10g',  
  167. failover_method =>dbms_service.failover_method_basic,  
  168. failover_type =>dbms_service.failover_type_select,  
  169. failover_retries =>180,  
  170. failover_delay=>5);  
  171. end;  
  172. /  
  173.           
  174. 再次檢視failover_method,failover_type等值已被顯示  
  175. SQL> select name,failover_method,failover_type,goal,clb_goal from dba_services  
  176.   2  where name='hr_ora10g';  
  177.           
  178. NAME                 FAILOVER_METHOD      FAILOVER_TYPE        GOAL         CLB_G  
  179. -------------------- -------------------- -------------------- ------------ -----  
  180. hr_ora10g            BASIC                SELECT                            LONG  
  181.       
  182.     對於使用srvctl 移除services後,檢視中依然可以查到上述資訊,需要使用  
  183.     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體系結構) 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2129135/,如需轉載,請註明出處,否則將追究法律責任。

相關文章