3

Win7x64 ラップトップに Oracle 11.2 をインストールしましたが、ほとんどすべて正常に動作します。しかし、私が理解していないことが1つあります。サンプルの HR スキーマには次のように接続できます。

sqlplus hr/password

ただし、次の場合は除きます。

sqlplus hr/password@orcl

を取得しORA-12154: TNS:could not resolve the connect identifier specifiedます。

2番目のオプションが正しいと思っていたので、これを偶然見つけました。TNS エイリアスを省略できるのはなぜですか? 私は Oracle の初心者ですが、他の環境に接続するときに TNS エイリアスが必要であるか、接続できません。

私の中には次のものがありますtnsnames.ora

LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

ORACLR_CONNECTION_DATA = (DESCRIPTION =
  (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)))
  (CONNECT_DATA = (SID = CLRExtProc)(PRESENTATION = RO)))

ORCL, DUMMY = (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))

tnsping orclとの両方が問題ないので、使用されていることは確かtnsping dummyです。誰かが私にこれを説明できますか?

UPDATE 1 : の出力lsnrctl statusは次のとおりです。

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
Start Date                11-NOV-2012 00:43:22
Uptime                    0 days 0 hr. 15 min. 53 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   C:\app\Ronald\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File         c:\app\ronald\diag\tnslsnr\Ronald-PDC\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

の結果SELECT name FROM v$databaseは 1 つのデータベースです: ORCL

UPDATE 2 : tnsping orcl(読みやすいようにフォーマットされた) の出力。

Used parameter files:
C:\app\Ronald\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (20 msec)
4

1 に答える 1

2

実際にORCLという名前のデータベースインスタンスを作成しましたか?

コマンドを使用してデータベースの実際の名前を確認します

lsnrctl status

これにより、リスナーが知っているサービスがわかります。これは、@構文で接続するときに話しているものです。@ORCLなしで接続できる理由は、データベースがSQL * Plusクライアントセッションと同じコンピュータ上にあるため、プロセス間通信(IPC)を使用し、リスナーをバイパスしているためです。

また、最初の例で次のように接続すると、データベース名を確認できます。

SELECT name FROM v$database;

編集:

EZConnect構文を試して、それが機能するかどうかを確認してください。

sqlplus user/pw@localhost/ORCL

TNSPINGリスナーに連絡する以外に何もしないことに注意してください。データベースにアクセスできることを確認しません。

もう1つ、TCPはリスナー用に構成されたプロトコルではないようです。(tnsnames.oraファイルと同じディレクトリにある)listener.oraファイルを確認してください。LISTENERのエントリは次のようになります。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

私のTNSPING出力は、出力の開始近くの1行で少し異なって見えます。

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))
于 2012-11-10T20:18:16.937 に答える