Ich führe eine Instanz von Oracle 11g lokal auf meinem Entwicklungscomputer aus und kann über SqlPlus eine direkte Verbindung zur lokalen Instanz herstellen:
c:\>sqlplus ace
SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta
SQL> select count(*) from my_table ;
COUNT(*)
----------
5297
Ich kann mich aber nicht über den Listener verbinden:
c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))"
SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:52:40 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
SP2-0751: Unable to connect to Oracle. Exiting SQL*Plus
Wenn ich mich über SqlDeveloper verbinde, erhalte ich ebenfalls eine Fehlermeldung (allerdings ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
).
Diese Instanz ist seit mindestens einem Jahr bis heute, einem Montagmorgen, stabil und funktioniert einwandfrei. Unsere Unternehmens-IT pusht manchmal über das Wochenende neue Richtlinien und Updates. Ich gehe also davon aus, dass sich etwas geändert hat, aber ich konnte nicht herausfinden, was.
Ich habe den Dienst und den Listener mehrmals neu gestartet, das Listener-Protokoll gibt keine Hinweise.
Dem Zuhörer scheint es gut zu gehen:
c:\>lsnrctl status
LSNRCTL for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 11:55:33
Copyright (c) 1991, 2010, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 11.2.0.2.0 - Beta
Start Date 11-MAR-2013 11:17:30
Uptime 0 days 0 hr. 38 min. 3 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora
Listener Log File C:\oraclexe\app\oracle\diag\tnslsnr\FBC305BB46560\listener\alert\log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
Port 1521 scheint in Ordnung zu sein:
c:\>netstat -an -O | find /i "1521"
TCP 0.0.0.0:1521 0.0.0.0:0 LISTENING 4368
TCP 169.243.90.109:55307 159.185.207.100:1521 ESTABLISHED 12416
TCP [::]:1521 [::]:0 LISTENING 4368
(PID 4368 ist TNSLSNR.exe-Prozess.)
Auch kann ich tnsping
zum XE-Service:
c:\>tnsping xe
TNS Ping Utility for 32-bit Windows: Version 11.2.0.2.0 - Beta on 11-MAR-2013 12:27:47
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
OK (210 msec)
Die listenerr.ora
Datei:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = machine.domain.com)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
Außerdem, und ich habe keine Ahnung, ob es damit zusammenhängt, kann ich anscheinend nicht auf Apex zugreifen https://127.0.0.1:8080/apex
(obwohl die Berechtigungen dafür in Ordnung zu sein scheinen).
Also, wo soll ich sonst suchen?
Update mit angeforderten Informationen:
SQL> show parameter service_names
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string XE
SQL> show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
Update2 : Wie @ miracle173 richtig anzeigt , war der Listener nicht in Ordnung. Mit dem aktualisierten Parameter 'local_listener' werden nun zusätzliche Informationen angezeigt:
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=machine.domain.com)(PORT=1521)))
(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 "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
Service "xe" has 1 instance(s).
Instance "xe", status READY, has 1 handler(s) for this service...
The command completed successfully
quelle
INSTANCE_NAME
Initialisierungsparameters und IhrerORACLE_SID
Umgebungsvariablen? Ihre Datenbank wird aus irgendeinem Grund nicht beim Standard-Listener registriert. Versuchen Sie, einealter system register;
Verbindung zur Datenbank herzustellen.Antworten:
Dank @YasirArsanukaev für die Zeit, die er reingesteckt hat, habe ich eine Lösung gefunden, die funktioniert, die ich aber nicht wirklich erklären kann.
Als ich über den
LOCAL_LISTENER
Gedanken nachdachte, las ich diese andere Antwort, in der es hieß:Also habe ich versucht, meinen eigenen Hostnamen zu pingen und konnte es nicht - es sieht nach einem IPv6-Problem aus, bei dem eine allgemeine Fehlermeldung angezeigt wird.
Also nahm ich den Rat von dieser Antwort
und es funktioniert jetzt vermutlich, weil es die localhost-Referenz auflösen kann, bei der es fehlgeschlagen ist, den tatsächlichen Hostnamen aufzulösen.
quelle