4

最近、開発サーバーの 1 つに 1 つの Web アプリケーションをデプロイしました。私はオラクル、asp.net、およびc#を使用しています。サーバーでアプリケーションを実行するとすべて正常に動作しますが、サーバーの外部で (たとえば、PC を使用して) アプリケーションを実行しようとすると、次のエラーが発生します。

ORA-12154: TNS:could not resolve the connect identifier specified

Visual Studio を使用して PC でアプリケーションを実行すると、正常に動作します。

Oracle はサーバー「A」にインストールされ、アプリケーションはサーバー「B」にインストールされます。サーバー「A」は1つのドメインにあり、サーバー「B」は他のドメインにあります。私のPCは同じドメインにあり、サーバー「A」があります。

私のPCでは、C:\oracle\product\10.2.0\client_1\NETWORK\ADMINでtnsname.oraファイルを見つけることができますが、サーバー「B」ではどこにも見つかりません

何か案が?助けてくれてありがとう。

4

9 に答える 9

3

これはもう試しましたか?( http://ora-12154.ora-code.com/より)

ORA-12154: TNS: 指定された接続識別子を解決できませんでした
原因: 接続識別子を使用してデータベースまたは他のサービスへの接続がリクエストされましたが、構成されたネーミング・メソッドのいずれかを使用して、指定された接続識別子を接続記述子に解決できませんでした. たとえば、使用された接続識別子のタイプがネット・サービス名である場合、ネーミング・メソッド・リポジトリでネット・サービス名が見つからないか、リポジトリが見つからないか到達できませんでした。
処置: - ローカル・ネーミング(TNSNAMES.ORAファイル)を使用している場合:

  • Oracle Netプロファイル(SQLNET.ORA)のNAMES.DIRECTORY_PATHパラメータの値の1つとして「TNSNAMES」がリストされていることを確認してください。

  • TNSNAMES.ORA ファイルが存在し、適切なディレクトリにあり、アクセス可能であることを確認してください。

  • 接続識別子として使用されるネット・サービス名が TNSNAMES.ORA ファイルに存在することを確認してください。

  • TNSNAMES.ORA ファイルのどこにも構文エラーがないことを確認してください。一致しない括弧またははぐれた文字を探します。TNSNAMES.ORA ファイルにエラーがあると、使用できなくなる場合があります。

  • ディレクトリ命名を使用している場合:

  • Oracle Netプロファイル(SQLNET.ORA)のNAMES.DIRETORY_PATHパラメータの値の1つとして「LDAP」がリストされていることを確認します。

  • LDAP ディレクトリ サーバーが起動していて、アクセス可能であることを確認します。

  • 接続識別子として使用されるネット・サービス名またはデータベース名がディレクトリに構成されていることを確認してください。

  • 完全修飾ネット サービス名または完全な LDAP DN を接続識別子として指定して、使用されているデフォルト コンテキストが正しいことを確認します。

  • 簡易接続ネーミングを使用している場合:

  • Oracle Netプロファイル(SQLNET.ORA)のNAMES.DIRETORY_PATHパラメータの値の1つとして「EZCONNECT」がリストされていることを確認します。

  • 指定されたホスト、ポート、およびサービス名が正しいことを確認してください。

  • 接続識別子を引用符で囲んでみてください。ネーミングの詳細は、『Oracle Net Services管理者ガイド』またはOracleオペレーティング・システム固有のガイドを参照してください。

于 2008-10-02T14:59:15.820 に答える
3

TNS エラーを解決することは、本当に大変なことです。注意すべき点がいくつかあります。

ほとんどの開発環境 (Visual Studio など) は、TNS 接続情報の独自のコピーを保持し、TNSNAMES.ora ファイルを使用しません。この情報が保持されるファイルは、TNSNAMES.ora という名前である必要はありません。これは単なるデフォルト名です。これが、サーバー B で見つからない理由である可能性があります。

Oracle クライアント ソフトウェア (または Oracle データベース) がある場合は、tnspingを使用して、TNSNAMES.ora ファイルが正しく構成されているかどうかを確認できます。

TNSNAMES.ora ファイル構成で最もよくある問題は、間違ったサービス名や間違ったホスト名を使用していることです。SQL NETの設定によっては、「ODB_A」を「ODB_A.WORLD」に、またはその逆に変更する必要がある場合があります。Oracle 10 では、後者がデフォルトの SQL NET 設定です。後者の場合、pingを使用してサーバー「A」を確認し、「SERVERA」または「SERVERA.DOMIN.COM」または IP アドレスを使用する必要があるかどうかを確認する必要があります。

于 2008-10-02T15:14:51.680 に答える
0

考えられる解決策 -

TNSNAMES.ORA が存在し、アクセス可能であることを確認します。

TNSNAMES.ORA に構文エラーがないことを確認してください。

接続文字列が正しいことを確認します。

DNS の問題があるかどうかを確認します。

PL sql developer client.try を使用してサーバーに接続中に問題が発生した場合は、Program Files(x86) の代わりに Program File 内に SQL 開発者をインストールしてください。

于 2013-12-24T02:41:17.130 に答える
0

推測: Oracle クライアントはサーバー B にインストールされていません。

Oracle クライアントがインストールされている場合でも、tnsnames ファイルを任意の場所 (ネットワーク共有上のディレクトリなど) に置くことができます。これを行うには、TNS_ADMIN システム変数 (XP では [システム プロパティ] -> [詳細設定] -> [環境変数]) を tnsnames ファイルを含むディレクトリに設定します。

たとえば、私にはシステム変数があります: TNS_ADMIN - C:\oracle\ora92\network\ADMIN

于 2008-10-02T14:59:28.193 に答える
0

ORACLE_HOME はサーバー B に設定されていますか?

于 2008-10-02T14:59:57.223 に答える
0

「サーバーB」(アプリケーションサーバー)にOracleクライアントをインストールし、TNSNAMES.ORAファイルを構成する必要があるようです。そうしないと、実行中のコードがアプリケーションで使用するデータベースを探す場所がわからないため、これが必要です (おそらく、web.config でデータ ソースを構成するか、何かをハードコーディングしています)。覚えておいてください - Oracle Client がなければ、Oracle に (簡単に) アクセスすることはできません。

于 2008-10-02T15:00:29.937 に答える
0

同じ問題がありました。展開環境の TNSNAMES.ORA には異なる ADDRESS_NAME と SID/SERVICE_NAME があり、アプリケーションは SID を使用するように構成されていたことが判明しました。これが問題の原因でした。

接続文字列には、SID ではなく ADDRESS_NAME を含める必要があります

于 2012-10-22T08:02:33.817 に答える
0

環境を追加します。

Variable Name: TNS_ADMIN

Variable Value: (YourDrive):\app\(UserName)\product\11.2.0\dbhome_1\NETWORK\ADMIN
于 2014-01-07T07:34:53.797 に答える
0

私は同様の問題に直面していました。以下のコードは私のシステムでは機能していましたが、tnsnames.ora ファイルに tns エントリを追加したにもかかわらず、別のサーバーでは機能していませんでした。

con = new OracleConnection();
con.ConnectionString = "User Id=username;Password=password;Data Source=uit45";
con.Open(); // throws error here

掘り下げて掘り下げた後、私はこれに対する解決策を見つけました。tns ファイルのエントリを無視する必要があり、接続文字列として tns エントリを指定できます。これは私にとってはうまくいきました。以下のコードを試してください。

con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=db-uit45.xxx)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=uit45)));User Id=username;Password=password");
con.Open();

HOST,PORT,SID,User Id特にとの場合、関連する値を指定する必要があることに注意してくださいPassword

于 2016-09-17T11:56:47.690 に答える