討論 Oracle RAC services之神奇作用
應用程式工作負載在 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)
有關基於使用者管理的備份和備份恢復的概念請參考
Oracle 基於備份控制檔案的恢復(unsing backup controlfile)
有關RMAN的備份恢復與管理請參考
有關ORACLE體系結構請參考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2129135/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 漫談Oracle RAC servicesOracle
- 【Services】Oracle 11g RAC使用Manual和Policy Managed方法配置和使用ServicesOracle
- dbms_service與dba_services_v$services學習筆記(oracle10g rac)筆記Oracle
- 關於oracle SCN 的討論Oracle
- oracle使用者討論組Oracle
- ORACLE索引組織表討論Oracle索引
- OpenStack入門之若干討論
- GoLang之Concurrency再討論Golang
- 神奇的函式作用域函式
- 關於 RAC VIP (Oracle10G RAC) 的探討(zt)Oracle
- ORACLE中國使用者討論組Oracle
- 中國ORACLE使用者討論組Oracle
- [全程建模]類圖與時序圖作用的對比討論時序圖
- 設計模式討論之abstract factory篇設計模式
- Oracle對RAC gsd服務作用的解釋Oracle
- oracle之 RAC Interconnect之HAIPOracleAI
- Oracle的學習路徑與方法討論Oracle
- ORACLE技術中國使用者討論組Oracle
- Effective c++(筆記) 之 雜項討論C++筆記
- 設計模式討論之abstract factory篇 (轉)設計模式
- Overview of Oracle Net Services (280)ViewOracle
- Oracle Lock Management Services (365)Oracle
- XML安全之Web ServicesXMLWeb
- SetUnhandledExceptionFilter 的討論ExceptionFilter
- [iOS Monkey 討論帖] 整套新的 fastmonkey 討論iOSAST
- [技術討論]關於低耦合開發的討論
- RAC 11.2.0.3 維護命令(三) SRVCTL管理services
- 【話題討論】如何把運維人員從雞肋轉變成雞大腿的故事之討論運維
- oracle 關於例項恢復的一個討論Oracle
- oracle 索引什麼時候重建和重建方法討論Oracle索引
- How Oracle Net Services Works (281)Oracle
- Oracle RAC 日常管理之CRS篇Oracle
- oracle 10g 之RAC 搭建Oracle 10g
- 關於oracle11g RAC 監聽器使用中出現的no services以及no listener分析Oracle
- [譯] 討論 JS ⚡:文件JS
- httprunner 大佬討論群HTTP
- Ruby語言討論
- Oracle11g RAC高可用性理論整理Oracle