Come configurare un listener Oracle senza SID_LIST_LISTENER in listener.ora?


13

Ho accesso a un server ORACLE 11g usando il seguente 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))
    )
  )

e serve tutte le istanze su quel server, come posso verificare da

lsnrctl status

Il mio problema è che quando eseguo una nuova installazione di Oracle 11g in una macchina virtuale, devo usare un listener.ora come

# 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

Senza i SID_LIST_LISTENER, cioè usando un listener.ora come quello dell'altro server che ottengo

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.

L'ultimo messaggio si traduce in

Il listener non supporta alcun servizio.

Non ho idea del perché questi due server si comportino diversamente. Non ho trovato suggerimenti nei file di configurazione né nelle chiavi di registro.

Modificare:

Immagino che la risposta sia sepolta da qualche parte in questo post da Burleson Consulting , ma non trovo il punto in cui è effettivamente configurato.

Risposte:


14

Un po 'tardi alla festa su questo ...

Il database dovrebbe registrarsi automaticamente con il listener, rendendo le SID_LISTvoci ridondanti e questo sembra accadere nel proprio 192.168.111.111ambiente. Se il listener viene avviato dopo il database, la registrazione potrebbe richiedere del tempo e potrebbero verificarsi situazioni in cui non lo fa affatto.

Puoi provare a farlo registrare con un alter system registercomando. Il database utilizza il LOCAL_LISTENERparametro per identificare il listener con cui dovrebbe registrarsi. Di default è nullo, che secondo la documentazione equivale a hostname:1521.

Se alter system registeril servizio non viene visualizzato lsnrctl statusnell'output, sospetto che non sia in grado di identificare il nome host o risolverlo, oppure si sta risolvendo in un indirizzo diverso da quello su cui si trova l'ascoltatore o LOCAL_LISTENERè impostato su qualcosa di non valido per il scatola virtuale. È possibile impostare il LOCAL_LISTENERper far corrispondere listener.oradirettamente il, ad esempio:

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

Oppure puoi usare un alias che ha quei dettagli nel tuo tnsnames.ora. Ad esempio, se aggiungi una tnsnames.oravoce come:

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

Quindi potresti:

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

L'unico vero vantaggio che posso vedere dell'utilizzo della tnsnames.oraversione, a parte forse la brevità, è che puoi cambiare la configurazione nei file SQL * Net piuttosto che nel database; e anche questo sembra davvero utile solo se stai clonando database tra macchine o se i tuoi listener e database sono in esecuzione con account diversi (ad esempio con un gridutente per RAC / HA).

C'è di più LOCAL_LISTENER qui .

Modifica: e questo sembra abbastanza completo.


-2

Ho avuto un problema simile e ho scoperto che il semplice riavvio e riavvio dell'istanza ha causato la corretta registrazione.

Questo può essere fatto usando la riga di comando sqlplus. Dovrai accedere come utente con sintassi dei privilegi di SYSDBA (es. Sistema):

sqlplus name/pass as SYSDBA

quindi esegui "shutdown" e attendi che finisca. quindi esegui 'avvio' e attendi che finisca.

dita incrociate dovresti ora avere un'istanza registrata con l'ascoltatore.

Per verificare che sia così, puoi avviare lsnrctl ed eseguire il comando 'status'. se non ha funzionato vedrai ancora il messaggio 'L'ascoltatore non supporta servizi' altrimenti vedrai qualcosa di simile

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

4
Per favore, non ... non è necessario riavviare il database solo per la registrazione del listener. "modifica registro di sistema;" da sqlplus lo fa, ed era già stato scritto nella risposta precedente.
Balazs Papp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.