Як налаштувати слухач Oracle без SID_LIST_LISTENER в listener.ora?


13

У мене є доступ до сервера ORACLE 11g за допомогою наступного listener.ora

# 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.

Останнє повідомлення перекладається на

Слухач не підтримує жодних Сервісів.

Я поняття не маю, чому ці два сервери поводяться по-різному. Я не знайшов підказки у файлах конфігурації, а також у ключах реєстру.

Редагувати:

Я думаю, що відповідь десь похований у цій посаді Burleson Consulting , але я не знаходжу місця, де вона насправді налаштована.

Відповіді:


14

Трохи спізнившись на вечірку на цьому ...

База даних повинна автоматично реєструватися у слухача, що робить SID_LISTзаписи зайвими, і, здається, це відбувається з вашим 192.168.111.111оточенням. Якщо слухач запускається після бази даних, це може зайняти деякий час для його реєстрації, і можуть виникнути ситуації, коли це зовсім не робиться.

Ви можете спробувати змусити його зареєструватися за допомогою alter system registerкоманди. База даних використовує LOCAL_LISTENERпараметр для ідентифікації слухача, для якого він повинен зареєструватися. За замовчуванням це недійсне значення, що згідно з документацією еквівалентно 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, а не в базі даних; і навіть це дійсно здається корисним лише якщо ви клонуєте бази даних між машинами, або якщо ваші слухачі та бази даних працюють під різними обліковими записами (наприклад, з gridкористувачем для RAC / HA).

Більше LOCAL_LISTENER тут .

Редагувати: І це здається досить вичерпним.


-2

У мене була аналогічна проблема, і я виявив, що лише закриття та перезапуск екземпляра призвели до його правильної реєстрації.

Це можна зробити за допомогою командного рядка sqlplus. Вам потрібно буде увійти як користувач із синтаксисом привілеїв SYSDBA (наприклад, системний):

sqlplus name/pass as SYSDBA

потім запустіть "вимкнення" і дочекайтеся його завершення. потім запустіть "запуск" і дочекайтеся його завершення.

пальці схрещені, тепер у вас повинен бути зареєстрований екземпляр у слухача.

Щоб переконатися, що це так, ви можете запустити lsnrctl і запустити команду "status". якщо це не спрацювало, ви все одно побачите повідомлення "Слухач не підтримує послуги", інакше ви побачите щось на кшталт

Service "horse" has 1 instance(s).
 Instance "horse", status READY, has 1 handler(s) for this service...

4
Будь ласка, не ... зовсім не потрібно перезавантажувати базу даних лише для реєстрації слухача. "змінити системний реєстр;" від sqlplus це робить, і це вже було написано в попередній відповіді.
Балаш Папп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.