日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

00600 ora 关闭oracle_Oracle集群高可用故障切换

發(fā)布時間:2025/3/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 00600 ora 关闭oracle_Oracle集群高可用故障切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接

[WK-T]ORACLE 10G 配置故障轉移(Failover)?blog.itpub.net

文章參考:《大話 Oracle RAC 集群 高可用性 備份與恢復》 張曉明 編著

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

Oracle 10g RAC 的Failover 可以分為3種:

1. Client-Side Connect time Failover

2. TAF

3. Service-Side TAF

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

一.Client-Side Connect Time Failover

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

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

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

示例:

在客戶端的tnsnames.ora 配置如下:

批注:SERVER = DEDICATED 表示專用服務器模式設置,數據庫將為每一個客戶機連接分配專用資源。當預期客戶機連接總數較小,或客戶機向數據庫發(fā)出的請求持續(xù)時間較長,使用該模式;SERVER = SHARED 表示共享服務器模式,多個客戶端連接共享一個數據庫分配的資源池,當大量用戶需要同時連接數據庫并且有效地利用系統(tǒng)資源時,使用此模式。

客戶端連接測試:

1)會優(yōu)先從節(jié)點rac1連接數據庫

2)如果節(jié)點rac1出現故障,客戶端的會話就會斷開,不會自動連接到其他正常節(jié)點,需要重啟會話建立連接

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is running on node rac1

[oracle@rac1 ~]$ srvctl stop instance -d orcl -i orcl1

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is not running on node rac1

3)當rac1實例恢復正常之后,新的會話還會優(yōu)先通過該節(jié)點連接數據庫

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is not running on node rac1

[oracle@rac1 ~]$ srvctl start instance -d orcl -i orcl1

[oracle@rac1 ~]$ srvctl status instance -d orcl -i orcl1

Instance orcl1 is running on node rac1

二. TAF(Transparent Application Failover)

客戶端連接故障切換最大的問題是,建立連接后如果節(jié)點發(fā)生故障,是不能做到故障轉移的,這樣數據庫的可用性就會大打折扣,所以oracle又提供了TAF的方法來解決連接時的故障切換,所謂TAF,就是連接建立以后,應用系統(tǒng)運行過程中,如果某個實例發(fā)生故障,連接到這個實例上的用戶會被自動遷移到其他的健康實例上。對于應用程序而言,這個遷移過程是透明的,不需要用戶的介入,當然,這種透明要是有引導的,因為用戶的未提交事務會回滾。 相對與Client-Side Connect Time Failover的用戶程序中斷,拋出連接錯誤,用戶必須重啟應用程序,TAF 這種方式在提高HA上有了很大的進步。

TAF 的配置也很簡單,只需要在客戶端的tnsnames.ora中添加FAILOVER_MODE配置項。這個條目有4個子項目需要定義。

1.METHOD: 用戶定義何時創(chuàng)建到其實例的連接,有BASIC和PRECONNECT兩種可選值。

BASIC: 是指在感知到節(jié)點故障時才創(chuàng)建到其他實例的連接。

PRECONNECT: 是在最初建立連接時就同時建立到所有實例的連接,當發(fā)生故障時,立刻就可以切換到其他鏈路上。

兩種方法比較: BASIC方式在Failover時會有時間延遲,PRECONNECT方式雖然沒有時間延遲,但是建立多個冗余連接會消耗更多資源。

2.TYPE:用于定義發(fā)生故障時對完成的SQL 語句如何處理,其中有2種類型:session和select.

這兩種方式對于未提交的事務都會自動回滾,區(qū)別在于對select 語句的處理,對于select,用戶正在執(zhí)行的select語句會被轉移到新的實例上,在新的節(jié)點上繼續(xù)返回后續(xù)結果集,而已經返回的記錄集則拋棄。

假設用戶正在節(jié)點1上執(zhí)行查詢,整個結果集共有100條記錄,現在已從節(jié)點1上返回10條記錄,這時節(jié)點1宕機,用戶連接被轉移到節(jié)點2上,如果是session模式,則需要重新執(zhí)行查詢語句;如果是select方式,會從節(jié)點2上繼續(xù)返回剩下的90天記錄,而已經從節(jié)點1返回的10條記錄不會重復返回給用戶,對于用戶而言,感受不到這種切換。

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

3.DELAY和RETRIES 這兩個參數代表重試間隔時間和重試次數。

示例:

在客戶端的tnsnames.ora 配置如下:

客戶端連接測試:

1)因為節(jié)點rac1是正常的,所以會從該節(jié)點連接到數據庫

2)關閉節(jié)點rac1,當前會話會自動切換到正常節(jié)點連接數據庫

補充:查看用戶連接的TAF配置,如下

批注:查詢結果中如果是NONE,說明這個連接沒有使用TAF;如果和客戶端tnsnames.ora配置中的相同,說明使用了TAF。
三.Service-Side TAF
Service-Side TAF,服務器透明故障轉移可以看作是TAF的一個變種。首先Service-Side TAF也是TAF,所有TAF的特點它都具有;其次,這種TAF是在服務器
上配置的,而不像TAF在客戶端配置的。
Client-Side TAF 配置過程需要修改客戶端的tnsnames.ora文件,如果有很多客戶端使用這個數據庫,那么每次微小的參數調整都要把所有客戶端的
tnsnames.ora都調整一遍,既低效又易出錯。而Service-Side TAF通過結合Service,在數據庫里保存FAIL-MODE的配置,把所有的TAF配置保存在數據字典
中,從而省去了客戶端的配置工作。
從配置參數而言,Service-Side TAF和TAF相比多了一個Instance Role 的概念。所謂實例Instance Role就是當多個Instance參與一個Service時,可以配置優(yōu)化
使用哪一個Instance為用戶提供服務。用戶共享兩種可選角色。
PREFERRED:首選實例,會優(yōu)先選擇擁有這個角色的實例提供服務。
AVAILABLE:后備實例,用戶連接會優(yōu)先選擇PREFERRED的Instance,當PREFERRED的Instance不可用時,才會轉到AVAILABLE的Instance上。
要使用Service-Side TAF必須配置Service。Service 可以在創(chuàng)建數據庫時創(chuàng)建,也可以在數據庫創(chuàng)建之后修改;既可以通過配置向導也可以通過命令方式進行
配置。
下面分別演示采用DBCA和手工兩種方式配置Service的過程。
方式一:使用DBCA配置Service
1)oracle用戶下運行DBCA出現歡迎界面


2)在已有的RAC數據庫上創(chuàng)建新的Service,此處選擇"Service Management"


3)選擇要配置Service的數據庫


4)添加Service名字以及定義實例角色


5)查看配置的Service是否創(chuàng)建成功
[oracle@rac1 ~]$ crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora.HHPEN1.db application 0/1 0/1 OFFLINE OFFLINE
ora.orcl.db application 0/1 0/1 ONLINE ONLINE rac2
ora....l1.inst application 0/5 0/0 ONLINE ONLINE rac1
ora....l2.inst application 0/5 0/0 ONLINE ONLINE rac2
ora...._TAF.cs application 0/0 0/1 ONLINE ONLINE rac1
ora....cl1.srv application 0/0 0/0 ONLINE ONLINE rac1
ora....SM1.asm application 0/5 0/0 ONLINE ONLINE rac1
ora....C1.lsnr application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.gsd application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.ons application 0/3 0/0 ONLINE ONLINE rac1
ora.rac1.vip application 0/0 0/0 ONLINE ONLINE rac1
ora....SM2.asm application 0/5 0/0 ONLINE ONLINE rac2
ora....C2.lsnr application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.gsd application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.ons application 0/3 0/0 ONLINE ONLINE rac2
ora.rac2.vip application 0/0 0/0 ONLINE ONLINE rac2
SQL> show parameter service;
NAME TYPE VALUE
------------------------------------ -------- ------------------------------
service_names string orcl, orcl_TAF6)如果客戶端想要通過service方式連接數據庫,需要在TNS條目中使用service_name方式引用數據庫。
7)修改Service的TAF配置,需要使用dbms_service.modify_service


批注:無論使用DBCA還是srvctl命令來配置Service,都無法配置TAF的type、delay、retries這三個屬性。必須使用dbms_service包來修改這些屬性。
8)確認修改已經生效


方式二:使用命令配置Service
1)創(chuàng)建Service語法如下:
srvctl add service -d -s -r "preferred-instance-list" -a "avaiable-instance-list" -p
批注:其中TAF-policy選項可以是BASIC或PRECONNECT
2)查看配置
srvctl config service -d database-name [-s service-name] [-a]
客戶端連接測試:
在ORACLE 10G中配置了Service-Side TAF之后,客戶端甚至不需要tnsnames.ora文件,而是使用ORACLE 10G提供的新連接方法Easy Connect Naming
Methods。為了展示這一特性,測試之前先把客戶端的tnsnames.ora文件改名存放,以保證客戶端在沒有TNS的情況下進行這個測試。使用Easy Connect
Naming Methods時的連接串格式如下:
username/password@[//]host[:port][/service_name]
客戶端連接操作如下:


批注:該連接對應的server process的OS PID是14469,在操作系統(tǒng)上殺掉這個進程。
[oracle@rac1 ~]$ ps -ef|grep 14469
oracle 14469 1 0 19:47 ? 00:00:00 oracleorcl1 (LOCAL=NO)
oracle 18000 17607 0 19:50 pts/3 00:00:00 grep 14469
[oracle@rac1 ~]$ kill -9 14469當前會話查詢實例名和運行狀態(tài),此時會話已斷開如下:


批注:按理說應該會跳轉到rac2節(jié)點上,肯定哪個地方配置錯了,稍后重新再看看。
上述方法沒奏效,我選擇關閉節(jié)點rac1的實例,驗證結果。

補充:相同環(huán)境進行測試failover
1.客戶端連接并查詢會話ID


2.通過session ID在服務器端操作系統(tǒng)中刪除該會話連接


3.會話并沒有斷開,服務器為其分配一個新的session ID


批注:當客戶端連接集群數據庫時,由于某些原因session ID被異常終端,已經配置了服務器端的故障轉移,該會話并不會終端,而是服務器為其分配一個
新的session ID,繼續(xù)通過當前會話為用戶提供對數據庫的操作。如果當前會話連接的實例宕掉,會自動去尋找備用實例。

總結

以上是生活随笔為你收集整理的00600 ora 关闭oracle_Oracle集群高可用故障切换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。