3

私はそれを修正するのに何時間も費やしたという問題に遭遇しました。ここに問題があります:

Oracle11インスタントクライアントを使用してリモートのOracle8iサーバーに接続しようとしています。PHPでの接続文字列は次のとおりです。

$ conn = oci_connect('db_user'、'db_pass'、 "db_ip / db_service");

db_ipは、「12.34.56.78」などのサーバーのIPです。
db_serviceは、「test」などのサーバーのサービスです。

表示されるエラーは

ORA-12514:TNS:listenerは現在、接続記述子で要求されたサービスを認識していません

同じクライアントを使用して、別のOracle10gサーバーに接続できます。phpコードは同じですが、db_userまたはdb_passまたはdb_ipのみを変更してください。db_serviceは提供されていません。

oracle10gサーバーまたはoracle8iサーバーのどちらにもtnsnames.oraを使用していません。サーバーのシンプルなIPを使用しています。これは重要ですか?

Server using: Windows Server 2008 R2
PHP: php 5.2.17
Oracle Instant Client: 11_2

任意のアイデアをいただければ幸いです。

更新された Phpも機能するようになりました。私のphpフォルダーはProgramfiles(x86)の下にあり、括弧は使用できません。そこで、フォルダー全体をC:\ phpに移動し、PHPのバージョンを変更するようにIISを構成しました。参照:http://stackoverflow.com/questions/9215983/php-cant-connect-but-sqlplus-can

更新 ジャスティンの助けをどうもありがとう。できます!!!sidをSCBLIVEではなくscbliveに変更しました。それらのデータベース名はscbliveです。私はまだ10.2.0.1を使用しており、sqlplusを使用して、oracle10gとoracle8iの両方に接続できます。どうもありがとう!

これは、Oracle8iで機能するtns名です。

scblive =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = [oracle 8i ip])(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SID = scblive)))

別の問題が見つかりました。phpコードで、oracle10gまたはoracle8iのどちらでも同じエラーが表示されます。

ORA-12154:TNS:指定された接続識別子を解決できませんでした

次の接続文字列を使用しました。

$ conn = oci_connect('user_name'、'pass'、'scblive');

oracle 10gの場合、以前と同じ接続文字列を使用した場合でも、エラーは次のように表示されます。

$ conn = oci_connect('user_name'、'pass'、[oracle 10g ip]);

何か案は?

以前の更新:@Justinの助けに感謝します。10.2.0.5、10.2.0.4、または10.1.0.0を試しましたが、いずれも機能しませんでした。マトリックスを見ました。インスタントクライアント8.1.7またはインスタントクライアント9.0.1は、Oracle10gとOracle8iの両方で機能するようです。誰かがそれらのファイルへのリンクを持っていますか?Oracleは10.1.0.5以降しか提供できませんでした。

4

2 に答える 2

4

これは予期される動作です。11.2 クライアントは、どのバージョンの Oracle 8i とも接続することが保証されていません。少なくとも Oracle 9.2.0.4 データベースが必要です。8.1.7 データベースに接続する場合は、Oracle 10.2 以前のクライアントが必要です。10.2 クライアントの初期バージョンは、Windows Server 2008 R2 システムと互換性がありませんでしたが、10.2.0.5 クライアント パッチセットをインストールできるはずです。8.1.7 より前の Oracle データベースに接続する場合は、おそらく以前のバージョンの Windows をインストールする必要がある、以前のバージョンの Oracle クライアントが必要です。

Metalink にアクセスできる場合、Metalink 207303.1 はClient/ Server Interoperability Matrixです。

本当に 10.2.0.5 のフル クライアントがインストールされている場合は、TNS エイリアスで SID を使用する必要があります。サービス名は 8.1.7 には存在しませんでした。おそらく、8.1.7 データベースに接続できるマシンから TNS エイリアスをコピーしたいと思うでしょう。私の推測では、あなたがしたいです

SCBLIVE = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = [ORACLE 8i IP])(PORT = 1521)) 
    (CONNECT_DATA = (SERVER = DEDICATED)(SID = SCBLIVE)) 
  )

それでもうまくいかない場合は、コマンド ラインで結果を入力tnsping scbliveし、コピー アンド ペーストします。

于 2012-08-28T23:35:01.087 に答える
0

以前の Oracle 9/8 クライアントの ora.... フォルダーと関連するすべての dll を特定のフォルダーにコピーし、これら 2 つのフォルダーをパス変数に入れます。とりあえずphpでociを使ってOracle 8.1.7に接続することに成功。

于 2013-08-05T03:51:33.650 に答える