TAF(透過的アプリケーション・フェイル オーバー)の紹介

2017.03.06

こんにちは。YDCの やす です。データベースの可用性を高めるためには様々な方法がありますが、
今回は一つの手段である「TAF(透過的アプリケーション・フェイル オーバー)の紹介」をします。

RACデータベースに接続中のインスタンスで障害が発生した際に、透過的アプリケーションフェイルオーバー(以下、TAF)を
使用していると障害が発生していないインスタンスに自動的に再接続することができます。
TAFを設定することでより高いレベルの可用性を目指すことができそうです。
今回はTAFを設定し、動作を確認してみようと思います。

環境
ホスト名 OS Oracle Database Grid Infrastructure 説明
db-01 Oracle Linux Server release 6.1 12.1.0.1 EE 12.1.0.1 RACのノード1
db-02 Oracle Linux Server release 6.1 12.1.0.1 EE 12.1.0.1 RACのノード2

TAFの事前設定

TAFを使用する場合、事前に設定が必要になります。クライアントが使用するtnsnames.oraをTAF用に設定する方法と
CRSリソースにTAFポリシーを定義したサービスを設定する方法がありますが、
今回はtnsnames.oraに設定を記述する方法で動作を確認してみようと思います。

tnsnames.oraに下記の内容を記載します。

■TAFなしの設定です。
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db12-scan)(PORT = 1529))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
                       
■TAFありの設定です。
ORCL_TAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db12-scan)(PORT = 1529))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
(FAILOVER_MODE=
(METHOD=BASIC)
(TYPE=SELECT)
(RETRIES=20)
)

)
)

tnsnames.oraに設定したパラメータについて簡単に説明します。

■FAILOVER_MODE
TAFオプションを起動するためのパラメータです。

■METHOD
フェイルオーバーの先の接続方法を決定します。
<設定値の説明>
BASIC:フェイルオーバー時に接続を確立します。
PRECONNECT:事前にフェイルオーバー元と先に接続を確立します。

■TYPE:フェイルオーバーのタイプを指定します。
<設定値の説明>
SESSION:セッションをフェイルオーバーします。接続が確立するのみです。
SELECT:セッションをフェイルオーバーします。
実行中のSELECT文をフェイルオーバー先で再実行します。
NONE:フェイルオーバー機能は実装されません。

■RETRIES:フェイルオーバー後の接続試行回数を指定します。

設定は割と簡単なようです。それではTAFを使用した時と使用していない時の動作を比較してみようと思います!

1.TAFを使用しない接続の検証

まずTAFを使用しないで接続してみます。

[oracle@db-01 admin]$ sqlplus SYSTEM/password@ORCL

SQL*Plus: Release 12.1.0.1.0 Production on Wed Mar 1 23:07:25 2017

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> select instance_name ,host_name from v$instance;

INSTANCE_NAME
----------------
HOST_NAME
----------------------------------------------------------------
ORCL2
db-02



SQL>

2号機が繋がったようなので、2号機のインスタンスを停止してみます。

[root@db-02 ~]# srvctl stop instance -d ORCL -i ORCL2
[root@db-02 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASM_ACCO.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ASM_AIMS.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ASM_OCR.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.asm
ONLINE ONLINE db-01 Started,STABLE
ONLINE ONLINE db-02 Started,STABLE
ora.net1.network
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ons
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE db-01 STABLE
ora.cvu
1 ONLINE ONLINE db-01 STABLE
ora.db-01.vip
1 ONLINE ONLINE db-01 STABLE
ora.db-02.vip
1 ONLINE ONLINE db-02 STABLE
ora.oc4j
1 OFFLINE OFFLINE STABLE
ora.orcl.db
1 ONLINE ONLINE db-01 Open,STABLE
2 OFFLINE OFFLINE Instance Shutdown,ST
ABLE

ora.scan1.vip
1 ONLINE ONLINE db-01 STABLE
--------------------------------------------------------------------------------

先ほど接続したSQL*Plusから、続けて同じSQLを実行してみます。

SQL> select instance_name ,host_name from v$instance;
select instance_name ,host_name from v$instance
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 11500
Session ID: 65 Serial number: 15



SQL> exit

やはり切断されてしまいましたね。。続いてTAFを使用した時の
動作を確認してみようと思います!

2.TAFを使用した接続の検証

TAFを使用して接続してみます。

[oracle@db-01 admin]$ sqlplus SYSTEM/password@ORCL_TAF

SQL*Plus: Release 12.1.0.1.0 Production on Wed Mar 1 23:13:10 2017

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

Last Successful login time: Wed Mar 01 2017 23:11:05 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options

SQL> select instance_name ,host_name from v$instance;

INSTANCE_NAME
----------------
HOST_NAME
----------------------------------------------------------------
ORCL2
db-02

また2号機が繋がったようなので、2号機のインスタンスを停止してみます。

[root@db-02 ~]# srvctl stop instance -d ORCL -i ORCL2
[root@db-02 ~]# crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASM_ACCO.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ASM_AIMS.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ASM_OCR.dg
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.asm
ONLINE ONLINE db-01 Started,STABLE
ONLINE ONLINE db-02 Started,STABLE
ora.net1.network
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
ora.ons
ONLINE ONLINE db-01 STABLE
ONLINE ONLINE db-02 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE db-01 STABLE
ora.cvu
1 ONLINE ONLINE db-01 STABLE
ora.db-01.vip
1 ONLINE ONLINE db-01 STABLE
ora.db-02.vip
1 ONLINE ONLINE db-02 STABLE
ora.oc4j
1 OFFLINE OFFLINE STABLE
ora.orcl.db
1 ONLINE ONLINE db-01 Open,STABLE
2 OFFLINE OFFLINE Instance Shutdown,ST
ABLE

ora.scan1.vip
1 ONLINE ONLINE db-01 STABLE
--------------------------------------------------------------------------------

先ほど接続したSQL*Plusから、続けて同じSQLを実行してみます。

SQL> select instance_name ,host_name from v$instance;

INSTANCE_NAME
----------------
HOST_NAME
----------------------------------------------------------------
ORCL1
db-01


SQL> exit

今度は1号機のインスタンスにフェイルオーバーしました!

まとめ

どうでしたか?以外と設定は簡単だったのではないでしょうか。ただし使用する時に注意する点もあります。
「TYPE=SELECT」とすることで実行中のSELECT文をフェイルオーバー先で再開させるが可能ですが、
INSERT、UPDATE、DELETEなどの他のトランザクションの場合は失敗したらロールバックされてしまいます。
また「Enterprise Edition」のみで使用可能なので、エディションはよく確認する必要があります。
検証するのも面白い機能なので皆さまも是非試してみてください!

Standby Expressに関するお問合わせ

  • TEL 042-333-6217
  • FAX 042-352-6101
  • LINE
  • Mail