1. 接続フェイルオーバー
接続フェイルオーバーは、何らかの障害によりRACデータベースへの接続が確立できない場合に他のノードへ再接続する機能です。
Oracle RAC には新規接続時にエラーが発生した場合に再接続を試みる接続時フェイルオーバー(CTF:Connection Time Failover)と接続中にエラーが発生した場合に再接続を試みる透過的アプリケーション・フェイルオーバー(TAF:Transparent Application Failover)という 2 種類の接続フェイルオーバーが提供されています。
接続時フェイルオーバー(CTF)
接続時フェイルオーバーは、新規接続時にあるリスナーへの接続に失敗すると、別のリスナーに対して接続を試行する機能です。
設定は tnsnames.ora の接続記述子に FAILOVER=ON を記述します。SCAN が導入されていないリリース11.1 以前では ADDRESS_LIST句 に VIP を列記していました。SCAN 利用時は、ADDRESS_LIST句に SCAN 名を指定すると、自動的に 3 つの SCAN VIP を使用した接続時フェイルオーバーの設定が行われます。また、ADDRESS_LIST句 に VIP を列記する必要がなくなることでノードの追加、削除の際に各クライアントの tnsnames.ora を編集する必要がなくなりました。
例:SCAN未導入時の設定方法(tnsnames.ora) ================================================================================= TEST_CTF = (DESCRIPTION = (ADDRESS_LIST = (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP1])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP2])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP3])(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) =================================================================================
例:SCANを利用した設定方法(tnsnames.ora) ================================================================================= TEST_CTF = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [SCAN])(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) =================================================================================
透過的アプリケーション・フェイルオーバー(TAF)
透過的アプリケーションフェイルオーバーは、RAC データベースに接続中のインスタンスで障害が発生した際に、障害が発生していないインスタンスに自動的に再接続する機能です。また、実行中の SELECT 文を再開させる設定も可能です。INSERT、UPDATE、DELETEなどの他のトランザクションの場合は、アプリケーションで失敗したトランザクションをロールバックし再実行する必要がある事に注意してください。
設定はサービスに TAF ポリシーを定義するサーバー・サイドと tnsnames.ora に記述するクライアント・サイドの 2 つの方法が提供されており、両方設定した場合はサーバー・サイドの設定が優先されます。
例:サーバー・サイドの設定方法 ================================================================================= $ srvctl modify service -d orcl -s service_taf -P BASIC -e SELECT ================================================================================= ※ポリシー管理では -P オプションは利用できません。 例:SCAN未導入時のクライアント・サイドの設定方法(tnsnames.ora) ================================================================================= TEST_TAF = (DESCRIPTION = (ADDRESS_LIST = (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP1])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP2])(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP3])(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)) ) ) ================================================================================= 例:SCANを利用したクライアント・サイドの設定方法(tnsnames.ora) ================================================================================= TEST_TAF = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [SCAN])(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)) ) ) =================================================================================