- PR -

oracle-instant-clientでのtnsnames.oraの設置場所

1
投稿者投稿内容
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2006-05-22 14:04
少し質問を変えさせてください。
その後エラーメッセージには2種類あることが分かりました。

oci8://system:system@servername:1521/dbname
oci8://system:system@servername:1521
oci8://system:system@dbname
oci8://system:system@dbname:1521
でDB::connectをすると
ORA-12154: TNS: 指定された接続識別子を解決できませんでした

oci8://system:system@servername
でDB::connectをすると
ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません
になりました。

ORA-XXXXというエラーが出るということはPEARからoci関数を呼び出せているので、
エラーメッセージのように接続文字列に問題があるのかなと考えています。

tnsnames.oraでリスナーの設定をしていないのですが、
oracle_instant_clientの場合は
/usr/lib/oracle/10.1.0.4/client/lib/
にtnsnames.oraを置くだけでよいのでしょうか?


引用:

いつもお世話になっています、koaraと申します。

PHPから(PEAR DB+oracle-instant-client)
ORACLE 9iサーバーへの接続を評価してみようと思い環境を構築したのですがうまくいきません。
試行錯誤してみたのですが、先週末からどうにも行き詰ってしまいました。
どうかアドバイスお願いします。

現在 SQL*PLUSでの接続、PHPでOCILOGON関数を使っての接続できますが、
PEAE DBでの接続だけができません。

動作環境は、
PHP+oracle-instant-client/クライアント
RedHat ES 3.2.3-20
Apache 2.0.46
PHP 5.04
PEAR DB 1.7.6
oracle-instant-client 10.1.0.4-1

Oracle/サーバー
Windows 2003Server
Oracle 9i 9.2.0.1.0

環境構築・動作確認は以下のような手順で行いました。
1.oracle-instant-clientをインストール(順序は忘れました。)
rpm -ivh oracle-instantclient-basic-10.1.0.4-1.i386.rpm
rpm -ivh oracle-instantclient-devel-10.1.0.4-1.i386.rpm
rpm -ivh oracle-instantclient-sqlplus-10.1.0.4-1.i386.rpm

2.環境パスを設定しました。
vi /etc/bashrc
LD_LIBRAY_PATH=/usr/lib/oracle/10.1.0.4/client/lib/
NLS_LANG=JAPANESE_JAPAN.JA16EUC
http_proxy=http://xxx.xxx.xxx.xxx:xxxx

3.SQL*PLUSにて接続を確認できました。
sqlplus username/password@hostname:port/SID

4.既にPHPがインストール済みだったので、下のオプションを指定して再インストールしました。
'./configure'
'--with-apxs2=/usr/local/apache2/bin/apxs'
'--with-pgsql=/usr/local/pgsql/'
'--enable-mbstring'
'--enable-mbgrepex'
'--with-oci8=shared,instantclient,/usr/lib/oracle/10.1.0.4/client/lib/'
'--enable-sigchild'
'--enable-zend-multibyte'

5.出来たoci8.soをextension_dirにコピーしました。
copy /usr/local/src/php-x.x.x/modules/oci8.so /usr/local/lib

6.php.iniを編集しました。
extension_dir="/usr/local/lib/"
extension=oci8.so

7.Apache再起動

8.OCILogon関数での接続は成功しました。
<?php
$conn = OCILogon("username", "password", "hostname:1521/SID");
OCILogoff($conn);
?>

9.PEAR DBでの接続に失敗しました。
$con="oci8://username:password@hostname:1521/SID";
require_once "DB.php";
$con=DB::connect( $dsn );

ORA-12154: TNS: 指定された接続識別子を解決できませんでしたとエラーが出ます、
"oci8://username:password@hostname/SID"
"oci8://username:password@xxx.xxx.xxx.xxx:1521/SID"
"oci8://username:password@xxx.xxx.xxx.xxx/SID"
なども試してみましたがどれも接続できません。

何を確認したら原因を突き止められるでしょうか?
アドバイスお願いします。



[ メッセージ編集済み 編集者: koara 編集日時 2006-05-25 10:49 ]

[ メッセージ編集済み 編集者: koara 編集日時 2006-05-25 10:50 ]

[ メッセージ編集済み 編集者: koara 編集日時 2006-05-25 10:52 ]
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2006-05-25 16:39
koaraです。
少し進展しましたので、情報追加させてください。

WEBを調べるとoracle_instant_clientではtnsnames.oraがないなどの情報もありましたが、
DB::connectを実行しているphpがあるディレクトリにsqlnet.logというファイルが落ちており以下のメッセージが残っていました。

ここから推測するとやはりtnsnames.oraを探しているのではないかと思うのですがどうでしょうか?


Fatal NI connect error 12514, connecting to:
(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=servicename)(CID=(PROGRAM=httpd)(HOST=servername)(USER=nobody)))(ADDRESS=(PROTOCOL=TCP)(HOST=ip)(PORT=1521)))

VERSION INFORMATION:
TNS for Linux: Version 10.1.0.4.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 10.1.0.4.0 - Production
Time: 25-5月 -2006 10:37:39
Tracing not turned on.
Tns error struct:
ns main err code: 12564
TNS-12564: Message 12564 not found; No message file for product=network, facility=TNS
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
nt OS err code: 0
nt OS err code: 0

SERVICE_NAME, HOST, IPはこちらで使用しているサーバーの情報に間違いないのですが、
このように指定した覚えがないのが不思議です。
koara
ベテラン
会議室デビュー日: 2005/09/16
投稿数: 96
投稿日時: 2006-05-30 09:36
koaraです。
一応、自己解決しましたのでご報告させてください。

うまくいかなかった原因は
root(スーパーユーザー)のシェルがcshになっており、
 export $LD_LIBRARY_PATH=/usr/lib/oracle/10.1.0.4/client/lib/
が無効になっていました。そこで、
 setenv LD_LIBRARY_PATH /usr/lib/oracle/10.1.0.4/client/lib/
としました。

oracle_instant_clientのインストールは成功していたので、
php-4.3.2-23.ent.src.rpmをダウンロードしてきて
rpmbuild --define 'oracle 1' php-4.3.2-23.ent.src.rpm
としてrebuildしました。

次に出来上がった
php-4.3.2-23
php-oci8-4.3.2-23
php-pgsql-4.3.2-23
をインストールしました。

最後にApacheを再起動してphpinfo()にて
oci8というセクションが出来ていることを確認しました。





1

スキルアップ/キャリアアップ(JOB@IT)