Oracle的service功能簡介

煙花丶易冷發表於2018-06-11

Service 是連線oracle的一種方式。而且可以透過service 將不同的連線區分開來。例如,為不同的部門、業務建立不同的service,從而可以將連線對映到不同的伺服器上(叢集環境)以進行區分。從而也能看出service具有高可用性和負載均衡性。而且透過DRM(資源管理器)可以為不同的service分配不同的資源。

實驗環境:

     11.2.0.4 雙節點RAC,系統為redhat 6.4

    NODE1VIP192.168.17.177

    NODE2VIP 192.168.17.166

   SCANIP192.168.17.100

一、一 service的建立:

建立一個為名為 mgrser service ,優先連線racdb2 racdb2 不可用時連線racdb1,管理策略為automaticFailover方式為basicFailover type session

[oracle@NODE2 ~]$ srvctl add service  -d  racdb -s  mgrser -r racdb2 -a racdb1 -y  automatic -m basic  -e  session -z 3 -w 10

Oracle的service功能簡介

檢視資源狀態:

[grid@NODE2 ~]$ crsctl  status  res  -t

發現建立完mgrser後,會有對應的資源ora.racdb.mgrser.svc,只是現在為離線狀態。

Oracle的service功能簡介

檢視service的狀態:為not running

Oracle的service功能簡介

啟動service

[oracle@NODE2 ~]$ srvctl start service -d  racdb  -s mgrser

檢視service的狀態:發現在racdb2running。因為我們指定的優先例項為racdb2

Oracle的service功能簡介

檢視資源狀態:

[grid@NODE2 ~]$ crsctl  status  res  -t

發現資源ora.racdb.mgrser.svc現在為online狀態,且在node2上。

Oracle的service功能簡介

 

三、二 使用service

tnsnames.ora 中配置連線串,指定service_name = mgrser

manager1=

  (description =

     (address = (protocol = tcp)(host = 192.168.17.100)(port = 1521))

     (connect_data =

   (server = dedicated)

   (service_name = mgrser)

   ))

manager2=

  (description =

     (address = (protocol = tcp)(host = 192.168.17.177)(port = 1521))

     (address = (protocol = tcp)(host = 192.168.17.166)(port = 1521))

   (failover= on)

     (connect_data =

   (service_name = mgrser)

   ))

兩個節點均配置。tnsping保證ping通。

使用連線串manager1連線資料庫:sqlplus lpfei/lpf@manager1

NODE1上:

  Oracle的service功能簡介

NODE2上:

Oracle的service功能簡介

發現均優先連線racdb2,使用連線串manager2連線資料庫也是優先連線到racdb2.

四、三 racdb2例項關閉

檢視mgrser status,自動切換到racdb1

Oracle的service功能簡介

檢查資源狀態,ora.racdb.mgrser.svc也自動切換到racdb1

Oracle的service功能簡介

使用連線串manager1連線資料庫:sqlplus lpfei/lpf@manager1

連線到racdb1

Oracle的service功能簡介

五、四 Open 例項racdb2

racdb2開啟後mgrser依然在racdb1上執行,不會自動切換為racdb2,儘管racdb2為優先例項,但是racdb2宕掉後,服務會自動切換到racdb1(如四的實驗)。
Oracle的service功能簡介

  若要恢復mgrserracdb2上需執行reload

[oracle@NODE2 ~]$ srvctl  relocate  service -d  racdb   -s  mgrser  -i racdb1 -t racdb2

Oracle的service功能簡介

Oracle的service功能簡介

六、注意:建立的mgrse 會被註冊到監聽器上,但是隻註冊到正在running的例項監聽上。
這一點很重要因為在優先例項(如racdb2)宕掉以後,所有的原先連線在racdb2上的連線全都會連線到racdb1上,這是應該的,也是必須的。
但是當racdb2回覆後,所有透過服務名為mgrser的連線不會自動切換到racdb2,這有可能會造成racdb1的負載過高。當不知道因為建立service造成時這種現象時,
很可能會以為問題出現在監聽器上,有可能會手動新增服務(如:alter system set service_names='mgrser' scope=spfile;)切記這樣操作不可行。必須執行reload才行,
或將所有例項都指定為優先組(這樣做似乎沒有意義了)。

節點二的監聽狀況:

Oracle的service功能簡介

 

節點一的監聽狀況:
Oracle的service功能簡介

 

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

相關文章