<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.oci8.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'oci8.fan.php',
    1 => 'OCI8 高速アプリケーション通知 (FAN) サポート',
    2 => 'OCI8 高速アプリケーション通知 (FAN) サポート',
  ),
  'up' => 
  array (
    0 => 'book.oci8.php',
    1 => 'OCI8',
  ),
  'prev' => 
  array (
    0 => 'oci8.connection.php',
    1 => 'OCI8 接続のハンドリングおよびプーリング',
  ),
  'next' => 
  array (
    0 => 'oci8.taf.php',
    1 => 'OCI8 Transparent Application Failover (TAF) Support',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'reference/oci8/fan.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="oci8.fan" class="chapter">
 <h1 class="title">OCI8 高速アプリケーション通知 (FAN) サポート</h1>

  <p class="para">
   FAN サポートは、高速接続フェイルオーバーという
   Oracle Database 高可用性機能を提供します。
   これにより、データベースマシンまたはデータベースインスタンスが使用不能になると、
   PHP OCI8 スクリプトに通知されるようになります。
   FAN を使用しないと、数分間かもしれませんが、
   TCP タイムアウトが発生してエラーが返されるまで
   OCI8 がハングアップすることがありえます。
   OCI8 で FAN を有効にすると、
   Web ユーザーが機能停止に気づかないように
   アプリケーションがエラーを検出し、
   使用可能なデータベースインスタンスに再接続できるようになります。
  </p>
  <p class="para">
   FAN サポートは、PHP とリンクする Oracle クライアントライブラリ、
   および Oracle Database の両方のバージョンが 10gR2 以降の場合に使用可能です。
  </p>
  <p class="para">
   データベースインスタンスを生き残らせるための接続がただちに作成されるので、
   FAN は、Oracle のクラスタリング技術 (RAC) のユーザーに役立ちます。
   ブローカーがある場合の Oracle Data Guard のユーザーは、
   スタンバイ用のデータベースがオンラインになる際に
   FAN イベントが生成されることに気づくでしょう。
   スタンドアローンのデータベースは、データベース再始動の際に FAN イベントを送信します。
  </p>
  <p class="para">
   アクティブな接続の場合、
   データベースマシンまたはデータベースインスタンスが使用できなくなると、
   現在呼び出されている OCI8 拡張モジュールの関数により
   接続失敗エラーが返されます。
   後続の PHP スクリプト再接続時には、
   残存するデータベースインスタンスへの接続が確立されます。
   OCI8 拡張モジュールはまた、
   いかなるサービスの中断もスクリプトで意識しないように
   PHP 接続呼び出しが新鮮な接続を確立するよう、
   データベースマシンまたはデータベースインスタンスの障害の影響を受けた
   すべてのアイドル状態の接続を透過的にクリーンアップします。
  </p>
  <p class="para">
   FAN イベントを有効にすると、サービスの中断により無効にされた
   アイドル状態の接続の積極的な接続管理が提供されるため、
   <a href="oci8.configuration.php#ini.oci8.events" class="link">oci8.events</a> が
   <code class="literal">On</code> の場合、ping を無効にするには
   <a href="oci8.configuration.php#ini.oci8.ping-interval" class="link">oci8.ping_interval</a> を -1 に
   設定することがお勧めです。
  </p>
  <p class="para">
   PHP OCI8 で FAN サポートを有効にするには、
   Oracle 10gR2 以降のライブラリとともに PHP OCI8 をビルドし、
   以下のステップに従います。
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      データベースサービスが FAN イベントをポストできるようにするには、
      特権を持つデータベース管理者として SQL*Plus のようなプログラムを使用します。
      たとえば下記のように使用します。
     </span>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
    SQL&gt; execute dbms_service.modify_service(
                   SERVICE_NAME        =&gt; &#039;sales&#039;,
                   AQ_HA_NOTIFICATIONS =&gt; TRUE);
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <span class="simpara">
      php.ini を編集して以下のように追加します。
     </span>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
    oci8.events = On
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <span class="simpara">
      もし OCI8 のエラー条件をアプリケーションがすでに正しく処理していなければ、
      障害を検出し、適切なアクションを取るように変更します。
      これは、再接続や再実行のステートメントを含むかもしれません。
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      アプリケーションを実行し、Oracle Database 10gR2 以降に接続します。
     </span>
    </li>
   </ul>
  </p>
</div>
<?php manual_footer($setup); ?>