web-dev-qa-db-ja.com

listener.oraでSID_LIST_LISTENERを使用せずにOracleリスナーを構成する方法

次のlistener.oraを使用してOracle 11gサーバーにアクセスできます

# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(Host = 192.168.111.111)(PORT = 1521))
    )
  )

そして、私が確認できるように、それはそのサーバー上のすべてのインスタンスを提供します

lsnrctl status

私の問題は、仮想マシンにOracle 11gのフレッシュインストールを作成するときに、listener.oraを使用する必要があることです。

# listener.ora Network Configuration File: C:\app\Oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )

   (SID_DESC =
     (GLOBAL_DBNAME = ORCL)
     (Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
     (SID_NAME = orcl)
    )

   (SID_DESC =
     (GLOBAL_DBNAME = BMBK)
     (Oracle_HOME = C:\app\Oracle\product\11.2.0\dbhome_1)
     (SID_NAME = BMBK)
    )

 )

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

ADR_BASE_LISTENER = C:\app\Oracle

SID_LIST_LISTENERエンティティがない場合、つまり、取得した他のサーバーからそのようなlistener.oraを使用する

C:\Windows\system32>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 27-NOV-2011 10:14
:24

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Anmeldung bei (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS des LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
Startdatum                27-NOV-2011 10:14:08
Uptime                    0 Tage 0 Std. 0 Min. 18 Sek.
Trace-Ebene               off
Sicherheit                ON: Local OS Authentication
SNMP                      OFF
Parameterdatei des Listener C:\app\Oracle\product\11.2.0\dbhome_1\network\admin\
listener.ora
Log-Datei des Listener    c:\app\Oracle\diag\tnslsnr\WSV-BK-W7en64-S\listener\al
ert\log.xml
Zusammenfassung Listening-Endpunkte...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=169.254.200.102)(PORT=1521)))
Der Listener unterst³tzt keine Services
Der Befehl wurde erfolgreich ausgef³hrt.

最後のメッセージは次のように変換されます

リスナーはサービスをサポートしていません。

これら2つのサーバーの動作が異なる理由はわかりません。構成ファイルやレジストリキーにヒントは見つかりませんでした。

編集:

答えはこの投稿のどこかに埋もれていると思います Burleson Consulting ですが、実際に構成されている場所は見つかりません。

13
bernd_k

これでパーティーに少し遅れました...

データベースは自動的にリスナーに登録され、SID_LISTエントリが冗長になります。これは、192.168.111.111環境で発生しているようです。リスナーがデータベースの後に起動された場合、リスナーが登録されるまでに時間がかかる場合があり、それがまったく行われない場合があります。

alter system registerコマンドを使用して登録を試みることができます。データベースはLOCAL_LISTENERパラメーターを使用して、登録するリスナーを識別します。デフォルトではnullです。これは documentation によるとhostname:1521と同等です。

alter system registerによってサービスがlsnrctl statusの出力に表示されない場合、ホスト名を識別または解決できないか、リスナーがアドレスとは異なるアドレスに解決しているのではないかと思います。オン、またはLOCAL_LISTENERが仮想ボックスに対して無効なものに設定されています。 LOCAL_LISTENERは、listener.oraに直接一致するように設定できます。例:

alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope=both;
alter system register;

または、tnsnames.oraにこれらの詳細が含まれているエイリアスを使用できます。たとえば、次のようなtnsnames.oraエントリを追加するとします。

MY_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
  )

次に、次のことができます。

alter system set local_listener='MY_LISTENER' scope=both;
alter system register;

tnsnames.oraバージョンを使用することで得られる本当の利点は、おそらく簡潔さは別として、データベースではなくSQL * Netファイルの構成を変更できることです。マシン間でデータベースのクローンを作成している場合、またはリスナーとデータベースを異なるアカウントで実行している場合(RAC/HAのgridユーザーを使用している場合など)は、それが本当に役立つように思えます。

LOCAL_LISTENERhere の詳細があります。

編集:そして this は非常に包括的なようです。

14
Alex Poole