ora92->OracleInstantClientによる接続へ変更

ora92->OracleInstantClientによる接続変更

はじめに

windows環境でoracleクライアントからoracleへ接続する時の話。
これまでoracleクライアントでoracleへ接続していたが、
ローカルでphp5.3からoracleへ接続することになった。
apachephpwindowsに入れて起動。
php.iniで下記のように設定し、php_oci8.dll
を使用する場合、
※[PHP]
extension=php_oci8.dll

「'C:/PHP/ext\php_oci8.dll' - 指定されたモジュールが見つかりません。」
というエラーが出力。

wiki等で調べてみると
「現状 、oci8拡張モジュールを利用する上での制約(仕様)として
Oracle 10g以降のクライアント、もしくはInstant Clientが必要になります。」
とのこと。

Oracle 10gのクライアントを入れるか、Instant Clientで
接続するように変更せねばならないらしい。
以下、ora92->Instant Clientに変更する手順を記載

作業手順

  • 1.C:\oracle\ora92と同じ階層に、C:\oracle\instantclientとフォルダを作成する
  • 2.Oracleのページから下記3つをダウンロード

http://www.oracle.com/technetwork/jp/topics/winsoft-087812-ja.html

instantclient-basic-win32-11.2.0.1.0.zip
instantclient-odbc-win32-11.2.0.1.0.zip
instantclient-sqlplus-win32-11.2.0.1.0.zip
作成したinstantclient以下に展開。(重複は上書きでOK)

  • 3.tnsnames.oraの作成

C:\oracle\ora92\network\ADMIN\tnsnames.oraを
C:\oracle\instantclient\network\ADMIN\tnsnames.ora
にコピー。

システムプロパティ」−>「詳細設定」ー>「環境変数
のシステム環境変数

Passの先頭にC:\oracle\instantclient;を追記
(先頭に追記ってのがポイント。先にora92等が記載されていた場合、そっちが優先されてしまう)
TNS_ADMINにC:\oracle\instantclientを作成
NLS_LANGにJapanese_Japan.JA16SJISを作成

  • 5.マシンを再起動

その後の確認

  • 1.phpinfo.phpを確認して、「oci8」の項目がenabledになっていることを確認
  • 2.下記phpを試して、oci_connectが認識するか確認する

その他

phpからoracleへ接続するときに、
「ORA-12705」が発生する場合は、NLS_LANGの設定がoracle本体と文字コードが合っていない可能性がある。
正しい文字コードにする。
●UTF8
NLS_LANG=Japanese_Japan.AL32UTF8
SJIS
NLS_LANG=Japanese_Japan.JA16SJIS
EUC
NLS_LANG=Japanese_Japan.JA16EUC