fuelPHP で PDOを使ってOracle接続する時の注意点 その3


fuelPHPでPDOを使ってOracle接続する時の注意点 の3つ目のトピックです。

fuelPHPでサポートされるデータベース接続のためのドライバは「MySQL、MySQLiそしてPDOです。」とfuelのマニュアルにも記載されています。したがって、Oracleをデータベースとして選択する場合はPDO(PHP Data Object)でのアクセスとなり、PHPにもPDO_OCIの拡張モジュールが必要になります。拡張モジュールのインストールについては別の機会に述べるとして、ここではfuelPHPでPDO_OCIでOracleデータベースと接続する場合のコンフィグ・パラメータ設定の注意点について記しておきます。

結論から先に述べると、fuelPHPでPDO_OCIを使ってOracle接続する場合は、db.phpのコンフィグ設定で ‘persistent’ 設定はtrueではなく必ずfalseにしておく方が無難だということです。



このpersistent設定は、”Oracleのコネクションの永続接続を有効とするか否か”の設定になります。

これをtrueにするとどういうことが起きるかというと.....
実際にシステム開発も総合テスト段階を迎えてリリース間近というところで問題に直面したのですが、下のようなOracleの接続エラーが時々発生し、再現性も見つからずしばらく困ってしまいました。
WEB画面を操作していると、時々これが発生して動作が非常に不安定な状態になってしまったのです。

最終的には、このpersistentをtrueに設定していたことが原因で、デフォルトのfalseにしたら、この問題は解消されました。

fuelPHPで出力されていたエラーメッセージは↓こんな感じです。

=====================
ERROR – 2015-11-02 17:49:25 –> 3135 – SQLSTATE[HY000]: General error: 3135 OCIStmtExecute: ORA-03135: 接続が失われました
(/usr/local/src/PDO_OCI-1.0/oci_statement.c:142) with query: “SELECT ….” in /fuel/core/classes/database/pdo/connection.php on line 270
=====================
とか
=====================
ERROR – 2015-11-02 17:49:28 –> 3114 – SQLSTATE[HY000]: General error: 3114 OCIStmtExecute: ORA-03114: Oracleに接続されていません。
(/usr/local/src/PDO_OCI-1.0/oci_statement.c:142) with query: “SELECT …” in /fuel/core/classes/database/pdo/connection.php on line 270
=====================
どちらかのエラーが表示されました。

なんとなく、mysqlやpostgreではいつも永続接続で使っていたのでOracleの場合も永続接続の方が良いかな思ってわざわざデフォルトの設定を変えて設定していたのが、思わぬ結果を招いていました。

カテゴリー: PHP, データベース

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

カテゴリー