[PHP-users 34831] Re: PHP PEARでOracleにアクセスするにはどうすればいいでしょうか。

KAMIJO.Yasuyoshi yasuyoshi_kamijo @ ac.auone-net.jp
2009年 11月 6日 (金) 16:34:35 JST


上條@自宅と申します。

 kondoさん、お世話になります。

> サンプルを参考に、以下の接続プログラムを作りましたが、つながりません。
> 気になるのが、'oci8://ユーザ名:パスワード@IPアドレス:ポート番号/DB名';
> と指定しているのにMDB2::connect($dsn)すると、エラーが
> 「** oci8(oci8)://DB名:xxx @ IPアドレス:ポート番号/DB名"」
> となることです。
> 何故かユーザ名がDB名に置き換わってます。

 DB名の指定が間違っていませんか。

> # php test.php
> string(254) "_doConnect: [Error message: unable to establish a connection]
> [Native code: 12162]
> [Native message: ORA-12162: TNS: 指定されたNetサービス名は正しくありません。] 
> 
>  ** oci8(oci8)://DB名:xxx @ IPアドレス:ポート番号/DB名"
> MDB2 Error: connect failed

 ORA-12162はPEARの問題ではなく、TNSNAMES.ORA内の記述と接続文字列の記
 述に誤りがあることを示しています。

 エラーメッセージの解説より引用
---------------------------------------------------------------------------
 「TNS: 指定されたNetサービス名は正しくありません。」
 「TNSNAMES.ORA内またはディレクトリ・サーバー(Oracle Internet Directory)
 内のネット・サービス名に対応する接続記述子が誤って指定されています。」
 「ローカル・ネーミングを使用している場合は、TNSNAMES.ORAファイル内で対応
 する接続記述子に構文エラーがないことを確認してください。ディレクトリ・ネ
 ーミングを使用している場合は、ディレクトリ・ネーミング用に管理を介して提
 供された情報を確認してください。」
---------------------------------------------------------------------------

> ■サーバA側
> ・OSはRedHatEL5です。
> ・サーバAにはoracle-instantclient11.2をインストールしました。

 これはサーバAの方ですよね。
 サーバaより次のコマンドをチェックしてみてください。
 >TNSPING DB名

> ・/usr/lib/oracle/11.2/client/network/admin/tnsnames.oraの内容
> ------------------------------------------------------------
> DB名 =
>   (DESCRIPTION=
>     (ADDRESS_LIST=
>         (ADDRESS =
>           (COMMUNITY=tcp.world)
>           (PROTOCOL=TCP)
>           (Host=IPアドレス)
>           (Port=ポート番号)
>         )
>     )
>     (CONNECT_DATA=(SID=SID)
>     )
>   )
> ------------------------------------------------------------

 sql*plusから接続可能とのことですが、DB名に何を指定していますか?


 以上、再チェックをよろしくお願いいたします。


 ● 作成者:上條 靖芳 e-mail:yasuyoshi_kamijo @ ac.auone-net.jp  ●
			 blog:http://blogs.dion.ne.jp/yasuyoshi/
 on DELL Vostro 1520 Genuine Intel(R) CPU 2.00GHz WinXP SP3
 Becky! 2.52.00_ja + VB2008 EE + IE8.0 + Oracle11gR1(11.1.0.7)


PHP-users メーリングリストの案内