OCI8 高速アプリケーション通知 (FAN) サポート

FAN サポートは、高速接続フェイルオーバーという Oracle Database 高可用性機能を提供します。 これにより、データベースマシンまたはデータベースインスタンスが使用不能になると、 PHP OCI8 スクリプトに通知されるようになります。 FAN を使用しないと、数分間かもしれませんが、 TCP タイムアウトが発生してエラーが返されるまで OCI8 がハングアップすることがありえます。 OCI8 で FAN を有効にすると、 Web ユーザーが機能停止に気づかないように アプリケーションがエラーを検出し、 使用可能なデータベースインスタンスに再接続できるようになります。

FAN サポートは、PHP とリンクする Oracle クライアントライブラリ、 および Oracle Database の両方のバージョンが 10gR2 以降の場合に使用可能です。

データベースインスタンスを生き残らせるための接続がただちに作成されるので、 FAN は、Oracle のクラスタリング技術 (RAC) のユーザーに役立ちます。 ブローカーがある場合の Oracle Data Guard のユーザーは、 スタンバイ用のデータベースがオンラインになる際に FAN イベントが生成されることに気づくでしょう。 スタンドアローンのデータベースは、データベース再始動の際に FAN イベントを送信します。

アクティブな接続の場合、 データベースマシンまたはデータベースインスタンスが使用できなくなると、 現在呼び出されている OCI8 拡張モジュールの関数により 接続失敗エラーが返されます。 後続の PHP スクリプト再接続時には、 残存するデータベースインスタンスへの接続が確立されます。 OCI8 拡張モジュールはまた、 いかなるサービスの中断もスクリプトで意識しないように PHP 接続呼び出しが新鮮な接続を確立するよう、 データベースマシンまたはデータベースインスタンスの障害の影響を受けた すべてのアイドル状態の接続を透過的にクリーンアップします。

FAN イベントを有効にすると、サービスの中断により無効にされた アイドル状態の接続の積極的な接続管理が提供されるため、 oci8.eventsOn の場合、ping を無効にするには oci8.ping_interval を -1 に 設定することがお勧めです。

PHP OCI8 で FAN サポートを有効にするには、 Oracle 10gR2 以降のライブラリとともに PHP OCI8 をビルドし、 以下のステップに従います。

  • データベースサービスが FAN イベントをポストできるようにするには、 特権を持つデータベース管理者として SQL*Plus のようなプログラムを使用します。 たとえば下記のように使用します。

        SQL> execute dbms_service.modify_service(
                       SERVICE_NAME        => 'sales',
                       AQ_HA_NOTIFICATIONS => TRUE);
    

  • php.ini を編集して以下のように追加します。

        oci8.events = On
    

  • もし OCI8 のエラー条件をアプリケーションがすでに正しく処理していなければ、 障害を検出し、適切なアクションを取るように変更します。 これは、再接続や再実行のステートメントを含むかもしれません。
  • アプリケーションを実行し、Oracle Database 10gR2 以降に接続します。