0

OSユーザーを使用してUbuntuにOracleをインストールしましたoracle。別のOSユーザー(以外oracle)としてログオンしているときにOracleに接続しようとすると、次のエラーが発生します。

SQL> connect user1/user1@orcl 
ORA-12154: TNS:could not resolve the connect identifier specified

ただし、Oracle SIDについて言及しない場合、エラーは発生しません。

SQL> connect user1/user1
Connected to:
Oracle Database 
SQL>

私は宣言ORACLE_HOMESID、ユーザープロファイルで。しかし、それは機能しませんでした。誰かが私が問題を理解するのを手伝ってくれませんか。

4

1 に答える 1

1

ある意味では、実際には問題はありません。ORACLE_HOMEおよびORACLE_SID環境変数を使用してローカルに接続できますが、これで問題ありません。

connect user1/user1@orclバージョンを使用する場合、これはSIDでorclはありません。ドキュメントで説明されているように、これは「Oracle Net接続識別子」です。

connect_identifier

Oracle Net接続識別子。正確な構文は、Oracle Net 構成によって異なります。詳細は、Oracle Net のマニュアルを参照するか、DBA にお問い合わせください。SQL*Plus はサービス名を要求しませんが、接続識別子を含めない場合はデフォルトのデータベースを使用します。

したがって、IPC を内部的に使用するのではなく、同じホストに接続していても、ネットワーク接続を介して接続しています。ORACLE_SIDこれは IPC に使用され、ネットワーク接続の一部ではないため、設定する必要さえありません。

ここで、接続識別子は実際には SID と同じ文字列である可能性がありますが、そうである必要はありません。通常、ファイルorclで定義されている「ネット サービス名」を使用しているように、単一の用語を使用している場合。tnsnames.ora(接続識別子がどのように解決されるかを決定する、でネーミングメソッドがどのように構成されているsqlnet.oraかによって異なりますが、これはまだ私が考える最も一般的な構成です)。

Oracle Net構成は、netca構成アシスタントをoracleユーザーとして使用して構成できますが、プライベートを作成してtnsnames.oraそれをオーバーライドできます。

接続の仕組みと構成の詳細については、Oracle Net 管理者ガイドを参照してください。短いバージョンについては、 SQL*Plus ユーザー ガイドを参照してください。

接続が機能するには、次のようなエントリuser1/user1@orclが必要です。tnsnames.ora

orcl = 
 (DESCRIPTION = 
   (ADDRESS = (PROTOCOL=tcp)(HOST=my_host)(PORT=1521))
   (CONNECT_DATA = (SERVICE_NAME = orcl)))

... ここmy_hostで、 は Oracle サーバーの DNS 名または IP アドレスであり、1521はリスナーが実行するように構成されているポートです。(この方法でも接続できるようにするには、リスナーが実行されている必要があります)。これSERVICE_NAMEは必ずしも SID と同じであるとは限りませんが、データベースの構成によって異なります。このlsnrctl statusコマンドは、利用可能なサービス名を表示します。

ORA-12154 エラーは、tnsnames.oraファイルがまったくないか、エイリアスのエントリが含まれていないことを示していますorcl

@a_horse_with_no_name が指摘しているように、接続識別子には他の形式がありtnsnames.ora、ネットワーク接続用のファイルは必ずしも必要ではありません。オプションについては、こちらで説明しています。私はあなたが使おうとしていたものに集中しました。ただし、ローカルで接続できるため、必ずしもそれらを使用する必要はありません。

于 2013-02-15T09:36:40.203 に答える