程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 【Oracle】RACfailover切換之TAF(一)

【Oracle】RACfailover切換之TAF(一)

編輯:Oracle教程

Oracle RAC 客戶端故障轉移(failover),當采用TAF方式時,對於已經建立連接的客戶端,在連接的實例或節點出現故障時,客戶端無需再次發出連接請求,仍然可以繼續之前的數據庫操作,此稱之為透明故障轉移。

使用TAF,需要配置客戶端tnsnames.ora文件,在其中增加了failover_mode選項,failover=on是默認配置,不寫也行。

今天試驗驗證type=select和type=session的區別。

這兩種參數的設置在實例崩潰時都會對事務進行回滾,其不同之處在於對於節點崩潰時正在執行的select語句的處理。type=select會將正在執行的select語句轉移到新的節點上繼續執行返回後續的結果集,而type=session則會終止查詢,想要再此查詢需要重新運行select語句,從頭開始進行查詢。

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

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

下面開始進行試驗

一、type=select

tnsnames配置如下

RACDB=

(description =

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

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

(load_balance = yes)

(connect_data =

(server = dedicated)

(service_name = RACDB)

(failover_mode =

(type = select)

(method = preconnect)

(retries = 180)

(delay = 5)

)

)

)

實驗開始:

首先連接到RAC後查看此時的instance_name,並運行查詢語句

[oracle@jp admin]$ sqlplus sys/oracle@RACDB as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 5 06:17:10 2014

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SYS@RACDB>show parameter instance_name

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

instance_name string RACDB1

SYS@RACDB>select * from dba_objects;

...........

在執行過程中將RACDB1 shutdown abort模擬節點崩潰

SYS@RACDB1>shutdown abort

ORACLE instance shut down.

此時查詢卡住幾秒鐘後,繼續返回查詢結果,不用重新運行查詢語句。

二、type=session

tnsnames.ora配置如下

RACDB=

(description =

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

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

(load_balance = yes)

(connect_data =

(server = dedicated)

(service_name = RACDB)

(failover_mode =

(type = session)

(method = preconnect)

(retries = 180)

(delay = 5)

)

)

)

實驗開始

SYS@RACDB>show parameter instance_name

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

instance_name string RACDB2

SYS@RACDB>select * from dba_objects;

省略。。。。。。

此時將RACDB2 shutdown abort

SYS@RACDB2>shutdown abort

ORACLE instance shut down.

此時查詢卡住,幾秒鐘後報錯並給出已查詢的行數

ERROR:

ORA-25401: can not continue fetches

750 rows selected.

SYS@RACDB>

查詢此時的instance_name

SYS@RACDB>show parameter instance_name

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

instance_name string RACDB1

已經自動切換到RACDB1上,但查詢語句已經中斷。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved