91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle RAC的Failover分為哪幾種

發布時間:2021-12-22 09:31:08 來源:億速云 閱讀:213 作者:iii 欄目:關系型數據庫

這篇文章主要介紹“Oracle RAC的Failover分為哪幾種”,在日常操作中,相信很多人在Oracle RAC的Failover分為哪幾種問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle RAC的Failover分為哪幾種”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

OracleRAC同時具備HA(HighAvailiablity)和LB(LoadBalance).而其高可用性的基礎就是Failover(故障轉移).它指集群中任何一個節點的故障都不會影響用戶的使用,連接到故障節點的用戶會被自動轉移到健康節點,從用戶感受而言,是感覺不到這種切換。

Oracle10gRAC的Failover可以分為3種:
1.Client-SideConnecttimeFailover
2.TAF
3.Service-SideTAF

注意事項:不能在listener.ora文件中設置GLOBAL_NAME,因為這個參數會禁用Connect-time Failover和Transparent Application Failover.


一.Client-Side Connect Time Failover
Client-Side Connect Time Failover的含義:如果用戶端tnsname中配置了多個地址,用戶發起連接請求時,會先嘗試連接地址表中的第一個地址,如果這個連接嘗試失敗,則繼續嘗試使用第二個地址,直至連接成功或者遍歷了所有的地址。

這種Failover的特點: 只在建立連接那一時刻起作用,也就是說,這種Failover方式只在發起連接時才會去感知節點故障,如果節點沒有反應,則自動嘗試地址列表中的下一個地址。一旦連接建立之后,節點出現故障都不會做處理,從客戶端的表現就是會話斷開了,用戶程序必須重新建立連接。


啟用這種Failover的方法就是在客戶端的tnsnames.ora中添加FAILOVER=ON條目,這個參數默認就是ON,所以即使不添加這個條目,客戶端也會獲得這種Failover能力。


示例:
RAC=
     (DESCRIPTION=
         (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
        (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
       (LOAD_BALANCE=YES)
     (
        CONNECT_DATA=
   (SERVER=DEDICATED)
       (SERVICE_NAME=RAC)
     )
 )

注:rac1-vip,rac2-vip要添加到hosts文件中,不然可能解析不了。

二.TAF(Transparent Application Failover)

這塊的配置,參考:10g & 11g Configuration of TAF(Transparent Application Failover) and Load Balancing [ID 453293.1]

現在的大部分流行的應用系統(如:weblogic,Jboss),都是啟動時就建立若干到數據庫的長連接,在應用程序整個生命周期內重用這些連接。而Client-Side Connet Time Failover的工作方式是它對應用程序的可用性沒有太大幫助。

所以從Oracle8.1.5版本只有引入了新的Failover機制—-TAF。所謂TAF,就是連接建立以后,應用系統運行過程中,如果某個實例發生故障,連接到這個實例上的用戶會被自動遷移到其他的健康實例上。對于應用程序而言,這個遷移過程是透明的,不需要用戶的介入,當然,這種透明要是有引導的,因為用戶的未提交事務會回滾。相對與Client-Side Connect Time Failover的用戶程序中斷,拋出連接錯誤,用戶必須重啟應用程序,TAF這種方式在提高HA上有了很大的進步。

TAF的配置也很簡單,只需要在客戶端的tnsnames.ora中添加FAILOVER_MODE配置項。這個條目有4個子項目需要定義。
1.METHOD:用戶定義何時創建到其實例的連接,有BASIC和PRECONNECT兩種可選值。
BASIC:是指在感知到節點故障時才創建到其他實例的連接。
PRECONNECT:是在最初建立連接時就同時建立到所有實例的連接,當發生故障時,立刻就可以切換到其他鏈路上。
兩種方法比較:BASIC方式在Failover時會有時間延遲,PRECONNECT方式雖然沒有時間延遲,但是建立多個冗余連接會消耗更多資源,兩者就是是用時間換資源和用資源換時間的區別。

2.TYPE:用于定義發生故障時對完成的SQL語句如何處理,其中有2種類型:session和select.
這2種方式對于未提交的事務都會自動回滾,區別在于對select語句的處理,對于select模式,用戶正在執行的select語句會被轉移到新的實例上,在新的節點上繼續返回后續結果集,而已經返回的記錄集則拋棄。假設用戶正在節點1上執行查詢,整個結果集共有100條記錄,現在已從節點1上返回10條記錄,這時節點1宕機,用戶連接被轉移到節點2上。如果是session模式,則需要重新執行查詢語句;如果是select方式,會從節點2上繼續返回剩下的90天記錄,而已經從節點1返回的10條記錄不會重復返回給用戶,對于用戶而言,感受不到這種切換。

顯然為了實現select方式,Oracle必須為每個session保存更多的內容,包括游標,用戶上下文等,需要更多的資源也是用資源換時間的方案。

3.DELAY和RETRIES:這2個參數分別代表重試間隔時間和重試次數。
示例:
RAC=
    (DESCRIPTION=
     (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
     (LOAD_BALANCE=YES)
  (
     CONNECT_DATA=
  (SERVER=DEDICATED)
    (SERVICE_NAME=RAC)
  (
  FAILOVER_MODE=
    (TYPE=session)
    (METHOD=basic)
    (RETRIES=180)
    (DELAY=5)
    )
   )
  )


三.Service-Side TAF

Service-Side TAF的配置參考: How To Configure Server Side Transparent Application Failover [ID 460982.1]

Service-Side TAF可以看作是TAF的一種變種,首先Service-SideTAF也是TAF,所有TAF的特點它都有,其次這種TAF是在服務器上配置的,而不像TAF是在客戶端配置的。

Client-SideTAF是在客戶端修改tnsnames.ora文件來配置的,如果有很多客戶端使用這個數據庫,那么每次微笑調整都需要把所有的計算機更改一遍,既低效又容易出錯。而Service-Side TAF通過結合Service,在數據庫里保存FAIL_MODE的配置,把所有的TAF配置保存在數據字典中,從而省去了客戶端的配置工作,現在客戶端的TNS文件就不需要任何TAF的配置選項了。

從配置參數而言,Service-Side TAF和TAF相比多了一個Instance Role(實例角色)的概念。所謂的實例角色,就是當有多個Instance參與一個Service時,可以配置優先使用哪一個Instance為用戶提供服務。用戶共有兩種可選角色。

PREFERRED:首選實例,會優先選擇擁有這個角色的實例提供服務。
AVAILABLE:后備實例,用戶連接會優先連接PREFFERRED的Instance,當PREFERRED的Instance不可用時,才會被轉到AVAILBALE的Instance上。
要使用Server-Side TAF必須配置Service。Service可以在創建數據庫時創建,也可以在創建數據庫之后修改,既可以使用dbca配置向導,也可以用命令行的方式配置。

3.1用DBCA配置Service
1).運行DBCA,選擇ORACLE RACApplication Clusters database
2).在第二個界面選擇:Services Management
3).第三個界面會出現RAC數據庫列表,用戶可以在這個列表中選擇要配置Service的數據庫
4).在Serice配置界面中,單擊Add創建新的Service,輸入service名字。在Instance列表框定義實例角色,選擇那個service1作為Preferred(首選實例),Service2作為   availiable(后備實例)。TAFPolicy有三個選項:None,Basic,Pre-connect。我們選Basic。最后點擊Finish,完成Service配置。
5)在結束Service配置后,服務會自動啟動。

3.2用srvctl命令配置Service
用命令行方式配置Service對遠程維護很有用。先來看一下相關命令
1)創建service
#Srvctl add service -d -s -r "preferred-instance-list" -a "available-instance-list" -P
其中TAF-Policy可選:basic和preconnect。

例如:srvctl add service -d RAC -s Service2 -r "RAC1,RAC2" -a "RAC3,RAC4" -P basic
注意:srvctl add service中,只有perferred才會創建服務。即在OCR中注冊一個ora.raw.dmm.Raw1.Srv的服務。

2)查看配置信息
#srvctl config service -d database_name [-s service_name][-a]
如果這里不指定"-s service-name",就會顯示所有Service的配置,這些配置包括preferred和availableinstance.使用-a選項,還會顯示TAF相關信息。

3)是否自動運行service
數據庫啟動時,會自動啟動所有的Service。有時為了為了維護需要,需要禁用這個特性,在維護完成后再啟動這個特性。
#srvctl enable/disable service -d database-name -s service-name -i instance-name

4)啟動service
 #srvctl start service -d -s -i instance-name -o start -option -cconnect-string-q
如果不指定service-name,則所有的service都會被啟動,可以使用逗號分隔方式,同時啟動多個service。-i指定在那個實例上啟動service。

5)停止service
#srvctl stop service -d -s -iinstance-name -cconnect -string-q-f
其中-f選項可以強制關閉service,并中斷了其所有用戶的連接。

6)查看service狀態
#srvctl status service -d -s service-name- i instance-name -f -v
其中-f可以顯示被disable的instance信息,而-v可以顯示詳細輸出

7)刪除service
#srvctl remove service -d database-name -s service-name -i instance-name [-f]

注意:在使用srvctl創建service時,需要注意TAF策略選項必須通過dbms_service包來配置。

示例:
Begin
  dbms_service.modify_service(Service_name = '>Service1',
                              Failover_method => dbms_service.failover_method_basic,
                              Failover_type => dbms_service.failover_type_select,
                              Failover_retries => 180,
                              Failover_delay => 5);
End;



3.3配置Service的注意事項
1).數據庫的服務名是用service_name參數來指定的,一個數據庫可以有多個服務名,但是service_name最長是4kb,不要手工來修改這個參數

2)最多可以創建64個service,每個數據庫有2個隱含的service,因此留給用戶的就只有62個service。不能修改這兩個隱含service的配置,并且也不能手工啟動或停止這2個服務。這兩個隱含的service分別是:SYS$BACKGROUND和SYS$USERS.

3)當使用dbca配置Service時,dbca會自動更新OCR,啟動Service,當刪除service時,會停止service,并更新OCR.

4)使用srvctl這個工具時,命令只更新OCR中的配置,不會更新data dctionary和listener中的信息,因此還需要使用dbma_servie包來更新data dictionary,手工更改listener配置文件。故推薦使用DBCA工具來配置更改service配置

5)如果客戶端想通過Service方式連接數據庫,需要在tns條目中使用service_name方式引用數據庫。如:
RAC=

    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
    (LOAD_BALANCE=YES)
    (
   CONNECT_DATA=
 (SERVER=DEDICATED)
   (SERVICE_NAME=RAC)
   )
  )

注意:無論是使用dbca工具還是使用srvctl命令來配置service,都無法配置TAF的TYPE,DELAY,RETRIES三個屬性,必須使用dbms_service包來修改這些屬性。

11g中TAF的TYPE,DELAY,RETRIES三個屬性配置可以用srvctl目錄配置了。


注意:
客戶端tnsnames.ora 中的service_name 要寫我們的service-side TAF的名稱。可以通過一下方式查看:

SQL> showparameter service

NAME                                      TYPE           VALUE
----------------------------------------------- -----------------
service_names                      string           dave, dave_taf

然后可以驗證:
SQL>show parameter instance_name

NAME            TYPE      VALUE
-----------------------------------------------------
instance_name   string    rac1

SQL>select sid from v$mystat where rownum=1;

SID

----------
146

SQL>select failover_type,failover_method,failed_over from v$session where sid=146;

FAILOVER_TYPE     FAILOVER_METHOD   FAILED_OVER
----------------------------------------------------
SELECT                 BASIC          YES

--如果客戶端寫的不是SERVICE-SIDE TAF的名稱,而是實例的名稱,那么不影響數據庫的連接,但是無法實現TAF功能。



四.Srvctl命令測試實例

1.使用srvctl命令創建dmm
[oracle@raw2bin]$srvctl add service -d raw -s dmm -r"raw1,raw2" -P basic
$crs_stat-t
省略..................................................


$srvctl add service -d raw -s dmm -r raw1 -a raw2 -P basic

注意:srvctl add service中,只有perferred才會創建服務。即在OCR中注冊一個ora.raw.dmm.Raw1.Srv的服務。

3)確認服務創建成功,offline表示還沒有啟動
$crs_stat-t

4)配置這個服務自啟動
$srvctl enable service -d raw -s dmm


5)啟動服務
$srvctl start service -d raw -s dmm

6)確認服務狀態。Online說明已啟動
$crs_stat-t


新建的服務會自動添加到初始話參數中:
show parameter service


7)用serviceTAF修改配置,需要用dbms_service.Modify_service包。
Begin
  Dbms_service.modify_service(Service_name     => 'dmm',
                              Failover_method  => dbms_service.failover_method_basic,
                              Failover_type    => dbms_service.failover_type_select,
                              Failover_retries => 180,
                              Failover_delay   => 5);
End;
/



8)確認參數已經生效
select name,failover_method,failover_type,goal,clb_goal from dba_services;


9)也可以用srvctl命令查看配置情況
$srvctl config service -d raw -s dmm -a


10)刪除Service
--先關閉service:
$srvctl stop service -d raw -s dmm
$srvctl disable service -d raw -s dmm

--再刪除服務:
$srvctl remove service -d raw -s dmm

如果該命令清楚不掉,我們可以加上-f參數
$srvctl remove service -d raw -s dmm -f


OCR中的信息已經被刪除了,但是數據字典中的還有該service的內容,繼續清除數據字典中的內容。

先查看數據字典內容:
select name,failover_method,failover_type,goal,clb_goal from dba_services;

清除數據字典里的內容:
begin
  dbms_service.delete_service(service_name => 'dmm');
end;
/


再次查詢數據字典,沒有了數據。清除完成
select name,failover_method,failover_type,goal,clb_goal from dba_services

到此,關于“Oracle RAC的Failover分為哪幾種”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修武县| 化德县| 新营市| 吴忠市| 三明市| 铜陵市| 如皋市| 巨鹿县| 绥阳县| 崇仁县| 堆龙德庆县| 阜平县| 芦山县| 右玉县| 隆德县| 体育| 安化县| 万全县| 临沂市| 昂仁县| 禄劝| 南澳县| 佛冈县| 年辖:市辖区| 三亚市| 秦安县| 吉隆县| 汝阳县| 邯郸县| 饶河县| 巴青县| 仙桃市| 额尔古纳市| 同仁县| 诸城市| 沿河| 日土县| 额济纳旗| 镇原县| 陈巴尔虎旗| 遂宁市|