web-dev-qa-db-ja.com

Oracle RACフェイルオーバーが正しく機能しない

2つのノードがあるRAC環境でOracle 11gR2をセットアップしています。 SCANを設定しました。例:DNSに2つのエントリが設定されているので、SCAN名をpingして、どちらのノードにも到達できます。両方の-vipアドレスにpingすることもできます。

理論的には、新しいSCAN機能は、透過的なアプリケーションフェイルオーバー(TAF)よりも優れた機能を提供するはずであり、すべてのクライアントで追加の構成が必要でした。 SCANを使用すると、SCANアドレスに接続するだけで、次のことができるようになります。

  1. データベースに接続し、接続しているインスタンスを確認します(例:(SQL * Plus)):

    select instance_name, Host_name from v$instance;
    
  2. (別のセッションで)shutdown abortを使用して接続しているインスタンスをシャットダウンします。

  3. 手順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)
    )
  )

まったく同じように動作するはずです。

5

SCANは接続時フェイルオーバーを提供することになっていますが、実行時フェイルオーバー(TAFなど)は提供しません。 SCANはTAFも意味する(誤)情報をどこで入手しましたか?

7
Uwe Hesse

SCANは「より良いフェイルオーバー」に直接関係していません。唯一の違いは、複数の_Host=_エントリを指定する必要がないことです。これは、内部ですべてのアドレスをホストリストに追加するためです。したがって、これは管理を簡単にするためのものです(基本的にはサービスディレクトリとしてDNSを使用します)。

TAFが必要な場合は、SCANに加えてこれを構成する必要があります。これはサービスで構成できるので、接続文字列を変更する必要はありません。

DBMS_SERVICE.CREATE_SERVICE()には特に_failover_type=BASIC, failover_retries=100, failover_delay=5_設定があります。

0
eckes