2つのノードがあるRAC環境でOracle 11gR2をセットアップしています。 SCANを設定しました。例:DNSに2つのエントリが設定されているので、SCAN名をpingして、どちらのノードにも到達できます。両方の-vip
アドレスにpingすることもできます。
理論的には、新しいSCAN機能は、透過的なアプリケーションフェイルオーバー(TAF)よりも優れた機能を提供するはずであり、すべてのクライアントで追加の構成が必要でした。 SCANを使用すると、SCANアドレスに接続するだけで、次のことができるようになります。
データベースに接続し、接続しているインスタンスを確認します(例:(SQL * Plus)):
select instance_name, Host_name from v$instance;
(別のセッションで)shutdown abort
を使用して接続しているインスタンスをシャットダウンします。
手順1を実行したのと同じセッションで、同じselect
ステートメントを再実行すると、正常に動作しているノードに自動的にバウンスするはずです。
代わりに、私は得ています:
ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ
どうしたの?
注:ステップ2の後、SQL * Plusを終了して、正常に再接続できます。同じセッションを続けようとするとうまくいきません。
クライアントのtnsnames.oraを次のように変更すると、
RAC =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(Host = cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5)
)
)
)
次に、期待どおりに動作します。そして、これは11gR2より前に実行する必要があったことですが、SCANはこれらすべてを自動的に処理することになっているため、次のような単純なエントリです。
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
まったく同じように動作するはずです。
SCANは接続時フェイルオーバーを提供することになっていますが、実行時フェイルオーバー(TAFなど)は提供しません。 SCANはTAFも意味する(誤)情報をどこで入手しましたか?
SCANは「より良いフェイルオーバー」に直接関係していません。唯一の違いは、複数の_Host=
_エントリを指定する必要がないことです。これは、内部ですべてのアドレスをホストリストに追加するためです。したがって、これは管理を簡単にするためのものです(基本的にはサービスディレクトリとしてDNSを使用します)。
TAFが必要な場合は、SCANに加えてこれを構成する必要があります。これはサービスで構成できるので、接続文字列を変更する必要はありません。
DBMS_SERVICE.CREATE_SERVICE()
には特に_failover_type=BASIC, failover_retries=100, failover_delay=5
_設定があります。