続いて、「クラスタ構成」となるOracle Real Application Clusters(以下、RAC)環境での接続を説明します。
第7回「ゼロから理解する『Oracle RAC』」で解説した通り、RAC環境では複数のOracleインスタンスが稼働しています。そのために考慮すべきポイントが2つあります。それは、「接続時フェイルオーバー」と「ロードバランス」です。
接続時フェイルオーバーは、障害などでダウンしたインスタンスに接続しないようにする対処のこと。ロードバランスは、各インスタンスへの負荷(接続数や処理数)がなるべく均等になるようにする対処のことです。
これらの機能を実装するために、RAC環境では「SCANリスナー」と呼ばれる機能が存在します。SCANリスナーを使った接続の流れは以下の通りです(図4)。
RAC環境では、Oracleのプロセスによって各インスタンスの情報(稼働状況やパフォーマンス情報)がSCANリスナーに伝えられます。クライアントは「tnsnames.ora」ファイルでSCANリスナーへの接続を指定し、負荷の少ない稼働インスタンスのリスナープロセスへ誘導してもらう仕組みになっています(図5)。SCANリスナーの名前や稼働場所は、Oracle Clusterwareのインストール作業時に設定しておきます。
前述した通り、RAC環境ではSCANリスナーを使うことで「接続時」に稼働しているインスタンスへ接続できます。しかし、「接続後」に障害などでそのインスタンスがダウンしてしまったら、再接続の作業が必要になります。つまり、サービスが止まってしまうことになります。そもそも可用性を高めるためにRAC環境を構築しているのですから、仮に接続中のインスタンスに障害が発生したとしても、自動でその他のインスタンスに切り替えてサービスを継続させたいものです。
この対処には、「透過的アプリケーション・フェイルオーバー(TAF)」や「アプリケーション・コンティニュイティ(AC)」と呼ばれる機能で実現できます。TAFは、障害発生時にアプリケーションへ通知を戻すことで、自動的に待機ノードへ接続を切り替える機能です。接続を切り替えた後、処理中であったSELECT処理を待機ノードで継続できる仕組みとなっています。一方のACはOracle Database 12cからの新機能で、障害発生時に待機ノードで中断したトランザクションを再実行する機能です。
データベースの利用には、「まず接続すること」から始まります。運用・開発の担当を問わず、データベースへの接続の仕組みはきちんと理解するようにしましょう。
また、アプリケーションの処理中に接続が切断されてしまうと、どこまで処理が完了したのかを確認し、把握した上で処理を再実行する必要があり、サービスの再開はより困難になります。そのため、接続障害への耐性を高めるTAFやACという機能が存在することだけでもまずは把握しておくようにしてください。
【2017/6/15】2017年時点の状況に合わせて、内容を追記更新しました
【2009/5/28】初版公開
株式会社アシスト データベース技術本部所属。Oracle研修の講師として、リカバリーやチューニングなどの研修を幅広く担当
株式会社アシスト 東日本顧客支援室(当時)。Oracle Databaseのフィールドエンジニアとして営業支援、構築支援、フィールドサポートなどを担当
Copyright © ITmedia, Inc. All Rights Reserved.