ORA-12514 TNS: Der Listener kennt den im Verbindungsdeskriptor angeforderten Dienst derzeit nicht

226

Wir haben eine lokal ausgeführte Anwendung, bei der der folgende Fehler auftritt:

ORA-12514: TNS: Der Listener kennt den im Verbindungsdeskriptor angeforderten Dienst derzeit nicht

Ich habe die Verbindung getestet, TNSPingdie korrekt aufgelöst wurde, und ich habe versucht SQLPlus, eine Verbindung herzustellen, die mit demselben Fehler wie oben fehlgeschlagen ist. Ich habe diese Syntax verwendet für SQLPlus:

sqlplus username/password@addressname[or host name]

Wir haben Folgendes überprüft:

  • Der TNS-Listener auf dem Server wird ausgeführt.
  • Oracle selbst auf dem Server wird ausgeführt.

Wir kennen keine Änderungen, die an dieser Umgebung vorgenommen wurden. Können wir noch etwas testen?

Jacques
quelle
2
Was ist der TNSPing-Befehl (mit Parametern), den Sie verwendet haben?
Grzegorz W
Wenn Sie "lokal ausführen" sagen, bedeutet dies, dass die Anwendung eine Verbindung zu einer Datenbank auf demselben Host herstellt? Was ist der Inhalt Ihrer Datei sqlnet.ora? Welche Versionen werden für sqlplus und tnsping gemeldet, und sind Sie sicher, dass sie sich im selben ORACLE_HOME befinden?
David Aldridge
1
Versuchen Sie, die Datenbank neu zu starten. Da sie den Listener beim Start über ihre Existenz informieren sollen, kann dies Ihr Problem beheben.
Jens Schauder
1
ALTER SYSTEM REGISTER ist weniger drastisch als ein Neustart der Datenbank.
DCookie

Antworten:

209

Ich hatte dieses Problem und das Update war , um sicherzustellen , in tnsnames.orader SERVICE_NAMEein gültiger Service - Namen in Ihrer Datenbank. Um gültige Dienstnamen herauszufinden, können Sie die folgende Abfrage in Oracle verwenden:

select value from v$parameter where name='service_names'

Sobald ich aktualisiert habe tnsnames.oraauf:

TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *<servicenamefromDB>*)
    )
)

dann rannte ich:

sqlplus user@TEST

Erfolg! Der Listener teilt Ihnen im Grunde mit, dass der von Ihnen verwendete Dienstname laut DB kein gültiger Dienst ist.

(* Ich habe sqlplus von der Win7-Client-Workstation zur Remote-Datenbank ausgeführt und den Datenbankadministratoren die Schuld gegeben;) *)

Brad Rippe
quelle
2
Auf win7,% ORACLE_HOME% \ NETWORK \ ADMIN \ tnsnames.ora
Brad Rippe
196
Wie soll ich die Datenbank abfragen, wenn ich nicht einmal eine Verbindung herstellen kann?
Isabelle Malt
2
Können Sie direkt zum DB-Server ssh und von dort aus sqlplus ausführen?
Brad Rippe
1
Dies ist möglicherweise nicht der Fall, wenn mehrere Clients / Server auf demselben Computer installiert sind oder waren. (tnsping gibt den Speicherort des verwendeten Verzeichnisses aus.) - In meinem Fall enthielt listener.ora in diesem Verzeichnis Informationen zu einer alten Datenbankinstanz, die ich deinstalliert hatte. Eine schnelle und schmutzige Methode bestand darin, den gesamten Inhalt von listener.ora zu kopieren Meine aktuelle Installation von Oracle Express in diesem anderen Verzeichnis, das der Listener zu überprüfen scheint (ich glaube, ich habe es über eine Registrierung oder etwas geändert, und es hat Vorrang vor ORACLE_HOME (?))
hallo_earth
8
ORA-00942: Tabelle oder Ansicht existiert nicht
Tommy Holman
44

Ich weiß, dass dies eine alte Frage ist, aber immer noch unbeantwortet. Ich habe einen Tag lang recherchiert, aber zumindest in meinem Fall (Oracle 11.2 unter Windows 2008 R2) habe ich die einfachste Lösung gefunden und wollte sie teilen.

Der Fehler zeigt bei direkter Betrachtung an, dass der Listener den Dienstnamen nicht erkennt. Aber wo werden die Servicenamen aufbewahrt? Im%ORACLE_HOME%\NETWORK\ADMIN\listener.ora

Die "SID_LIST" ist genau das, eine Liste von SIDs und Dienstnamen, die in einem Format gepaart sind, das Sie kopieren oder nachschlagen können.

Ich habe das Problem Dienstname hinzugefügt und dann in der Windows-Systemsteuerung "Dienste" einen "Neustart" für den Oracle-Listener-Dienst durchgeführt. Jetzt ist alles gut.


Beispielsweise könnte Ihre listener.ora-Datei zunächst folgendermaßen aussehen:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.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_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
  )

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

... Und damit ein Dienstname von erkannt wird orcl, können Sie ihn ändern in:

# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.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_user\product\12.1.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
    )
    (SID_DESC = 
        (GLOBAL_DBNAME = orcl)
        (ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
        (SID_NAME = orcl)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
Joseph Argenio
quelle
3
Diese Antwort muss mit der Syntax aktualisiert werden, wie listener.oradie Namen gespeichert werden. Ich habe nicht einmal eine listener.oraDatei. Ich bin auch auf einer Client-Workstation, auf der SQL Developer ausgeführt wird, und versuche, nur einen Datenbanklink zu erstellen, wenn der Fehler auftritt. Ich habe keinen Oracle Listener-Dienst zum Neustart.
Vapcguy
vapcguy, du musst auf dem Datenbankserver sein. es klingt wie Sie auf dem Client sind
Joseph Argenio
Nachdem ich die Anweisungen von Sepideh bezüglich des Net Managers befolgt hatte, stellte ich fest, dass meine Datei listeners.ora aktualisiert wurde, um einen neuen SID_LIST-Eintrag zu enthalten. Ich habe diese Antwort so bearbeitet, dass sie ein Vorher-Nachher-Beispiel für die Syntax enthält, zum Nutzen von Lesern, die den Net Manager aus irgendeinem Grund nicht verwenden können.
Kevin
12

Ich hatte dieses Problem bei Windows Server 2008 R2 und Oracle 11g

Gehen Sie zu Net Manager> Listener> wählen Sie Datenbankdienste aus der Combox aus.> "Globaler Datenbankname" muss mit "SID" identisch sein und "Oracle Home Directory" muss korrekt sein.

Wenn Sie keinen Eintrag für Datenbankdienste haben, erstellen Sie einen und legen Sie die richtige globale Datenbank sidund Oracle Home fest.

Sepideh
quelle
12

Unter meinen Umständen war der Fehler darauf zurückzuführen, dass der Listener den Dienst der Datenbank nicht registriert hatte. Ich habe dies durch die Registrierung der Dienste gelöst. Beispiel:

Mein Deskriptor in tnsnames.ora:

LOCALDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LOCALDB)
    )
  )

Also registriere ich den Dienst listener.oramanuell:

SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = LOCALDB)
      (ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
      (SID_NAME = LOCALDB)
    )

Starten Sie den Listener abschließend mit dem folgenden Befehl neu:

> lsnrctl stop
> lsnrctl start

Getan!

Manix
quelle
8

Das Starten von OracleServiceXXX über die Datei services.msc funktionierte für mich unter Windows.

Ishildur Beutlin
quelle
Wenn Sie in Windows Oracle Release 12.x verwenden, stellen Sie sicher, dass der Dienst OracleServiceORCL ausgeführt wird. Wenn dieser Dienst nicht gestartet wird, erhalten Sie ebenfalls den gleichen Fehlercode.
Street Hawk
5

Dies sollte wirklich ein Kommentar zu Brad Rippes Antwort sein, aber leider nicht genug Wiederholung. Diese Antwort brachte mich zu 90% dorthin. In meinem Fall wurden bei der Installation und Konfiguration der Datenbanken Einträge in die Datei tnsnames.ora für die von mir ausgeführten Datenbanken eingefügt. Zunächst konnte ich durch Festlegen der Umgebungsvariablen (Windows) eine Verbindung zur Datenbank herstellen:

set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1

und dann verbinden mit

sqlplus / as sysdba

Führen Sie als Nächstes den Befehl aus Brad Rippes Antwort aus:

select value from v$parameter where name='service_names';

zeigten, dass die Namen nicht genau übereinstimmten. Die mit dem Datenbankkonfigurationsassistenten von Oracle erstellten Einträge waren ursprünglich:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase.mydomain.com)
    )
  ) 

Der Dienstname aus der Abfrage war nur mydatabaseanstatt mydatabase.mydomain.com. Ich habe die Datei tnsnames.ora nur auf den Basisnamen ohne den Domain-Teil bearbeitet, sodass sie folgendermaßen aussahen:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase)
    )
  ) 

Ich habe den TNS Listener-Dienst neu gestartet (ich verwende häufig lsnrctl stopund lsnrctl startüber ein Administrator-Befehlsfenster [oder Windows Powershell] anstelle der Systemsteuerung "Dienste", aber beide funktionieren.) Danach konnte ich eine Verbindung herstellen.

Steinbock1
quelle
4

Ich hatte das gleiche Problem. Für mich nur schreiben

sqlplus myusername/mypassword@localhost

hat den Trick gemacht, dadurch wird eine Verbindung zum Standarddienstnamen hergestellt, denke ich.

Rika
quelle
1
Wir hatten ein ähnliches Problem mit unserer Verbindungszeichenfolge, das diesen Fehler verursachte. Wir haben eine Verbindung mit dem JDBC-Thin-Treiber von Oracle mit der Verbindungszeichenfolge hergestellt : jdbc:oracle:thin:@//localhost:1521/orcl. Die korrigierte Verbindungszeichenfolge zur Behebung dieses Fehlers war : jdbc:oracle:thin:@localhost:1521.
Dan
Es hängt davon ab, ob dies funktionieren würde. Ich denke, diese Art der Verbindung umgeht, gemessen an den Aussagen anderer, den Listener vollständig zu umgehen und den Hostnamen des Computers anstelle der SID zu verwenden. Diese Art der Verbindung verursacht Probleme bei Clients von Drittanbietern Es funktioniert auch nur, wenn EZCONNECT in sqlnet.ora angegeben ist: NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
hallo_earth
3

Was für mich funktionierte, war wirklich einfach. Ich musste den Dienst nur manuell in den "Windows-Diensten" (services.msc in cmd trompt) starten. Mein Servicename lautet: OracleServiceXXXXX.

Isabelle Malz
quelle
In meinem Fall wird der Starttyp zwar auf Automatisch eingestellt, er startet jedoch nicht, wenn der Computer gestartet wird. Nach dem manuellen Starten des Dienstes "OracleServiceXE" kann Oracle Database 11g Express eine Verbindung zur DB- und APEX-Webseite (Oracle Application Express) herstellen.
Ivan Chau
2

Überprüfen Sie, ob die Datenbank aktiv ist. Melden Sie sich am Server an, setzen Sie die Umgebungsvariable ORACLE_SID auf Ihre Datenbank-SID und führen Sie SQL * Plus als lokale Verbindung aus.

DCookie
quelle
Das war genau mein Problem. Unsere Datenbank wird auf einer VM gehostet, die nicht verfügbar war, als ich versuchte, ein anderes Programm zu verwenden, das den DP verwendete. Nachdem ich diesen Thread gesehen hatte, wurde mir klar, dass er wahrscheinlich nicht verfügbar war.
Sh4d0wsPlyr
2

Dieser Fehler kann auftreten, wenn eine Anwendung für jede Datenbankinteraktion eine neue Verbindung herstellt oder die Verbindungen nicht ordnungsgemäß geschlossen werden. Eines der kostenlosen Tools zum Überwachen und Bestätigen ist der Oracle SQL-Entwickler (obwohl dies nicht das einzige Tool ist, mit dem Sie DB-Sitzungen überwachen können).

Sie können das Tool von der Oracle-Website Sql Developer herunterladen

Hier ist ein Screenshot, wie Sie Ihre Sitzungen überwachen können. (Wenn sich während des ORA-12514-Fehlers viele Sitzungen für Ihren Anwendungsbenutzer häufen, ist dies ein guter Hinweis darauf, dass möglicherweise ein Verbindungspoolproblem vorliegt.)

Geben Sie hier die Bildbeschreibung ein

grepit
quelle
2

Ich habe dieses Problem in meiner Linux-Umgebung behoben, indem ich die IP meines Computers in der Datei / etc / hosts aktualisiert habe.

Sie können Ihre Netzwerk-IP (inet end.) Überprüfen mit:

$ifconfig

Überprüfen Sie, ob Ihre IP-Adresse mit der Datei / etc / hosts übereinstimmt:

$cat /etc/hosts

Bearbeiten Sie Ihre Datei / etc / hosts, falls erforderlich:

$sudo gedit /etc/hosts

Tschüss.

Sergio MC Figueiredo
quelle
2
Dies ist alt, aber es macht nicht viel Sinn, Ihre IP zu / etc / hosts hinzuzufügen. OP fehlt SERVICE_NAME, andere Sachen haben nichts damit zu tun
Ostap
Ich habe meine IP nicht zu / etc / host hinzugefügt. Ich habe es gerade korrigiert. Wie Sie in diesem Thema sehen können, gibt es viele gültige (mit positivem) Antworten und Varianten, um diese Frage zu lösen. Wenn diese Antwort Ihnen nicht geholfen hat, warum dann abstimmen? Diese Antwort kann immer noch jemandem helfen, da sie mir geholfen hat.
Sergio MC Figueiredo
2

Für diejenigen, die Oracle in einer VM ausführen (wie ich), ist dieses Problem aufgetreten, weil auf meiner VM nicht genügend Arbeitsspeicher vorhanden ist, was anscheinend verhindert hat, dass OracleDB ordnungsgemäß gestartet / ausgeführt wird. Durch Erhöhen des VM-Speichers und Neustarten wurde das Problem behoben.

th3uiguy
quelle
2

Viele Antworten hier, aber hier kommt ein funktionierendes Beispiel mit Code, den Sie sofort kopieren, einfügen und testen können:

Für mich wurde der Fehler 12514 behoben, nachdem der richtige SERVICE_NAME angegeben wurde. Sie finden das auf dem Server in der Datei, tnsnames.oradie 3 vordefinierte Dienstnamen enthält (einer davon ist "XE").

  1. Ich habe die Oracle Express-Datenbank OracleXE112 installiert, die bereits einige vorinstallierte Demo-Tabellen enthält.
  2. Wenn Sie das Installationsprogramm starten, werden Sie nach einem Kennwort gefragt. Ich habe "xxx" als Passwort eingegeben. (nicht in der Produktion verwendet)
  3. Mein Server läuft auf dem Computer 192.168.1.158
  4. Auf dem Server müssen Sie den Zugriff für den Prozess TNSLSNR.exe in der Windows-Firewall explizit zulassen. Dieser Prozess überwacht Port 1521.
  5. OPTION A: Für C # (.NET2 oder .NET4) können Sie ODAC11 herunterladen , von dem Sie Oracle.DataAccess.dll zu Ihrem Projekt hinzufügen müssen. Zusätzlich hängt diese DLL ab von: OraOps11w.dll, oci.dll, oraociei11.dll (130 MB!), Msvcr80.dll. Diese DLLs müssen sich im selben Verzeichnis wie die EXE befinden, oder Sie müssen den DLL-Pfad angeben in : HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath. Auf 64-Bit-Maschinen schreiben Sie zusätzlich zuHKLM\SOFTWARE\Wow6432Node\Oracle\...
  6. OPTION B: Wenn Sie ODAC12 heruntergeladen haben , benötigen Sie Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160 MB!), Oraons.dll, msvcr100.dll. Der Registrierungspfad lautetHKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
  7. OPTION C: Wenn Sie keine großen DLLs mit mehr als 100 MB möchten, sollten Sie ODP.NET_Managed12.xxxxxxxx.zip herunterladen, in dem Sie Oracle.ManagedDataAccess.dllnur 4 MB finden und eine rein verwaltete DLL ist, die in 32-Bit- und 64-Bit-Prozessen funktioniert und hängt von keiner anderen DLL ab und erfordert keine Registrierungseinträge.
  8. Der folgende C # -Code funktioniert für mich ohne Konfiguration auf der Serverseite (nur die Standardinstallation):
using Oracle.DataAccess.Client;
oder
using Oracle.ManagedDataAccess.Client;

....

Zeichenfolge oradb = "Datenquelle = (DESCRIPTION ="
    + "(ADDRESS_LIST = (ADDRESS = (PROTOKOLL = TCP) (HOST = 192.168.1.158) (PORT = 1521))"
    + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE));"
    + "Benutzer-ID = SYSTEM; Passwort = xxx;";

using (OracleConnection conn = new OracleConnection (oradb)) 
{
    conn.Open ();
    using (OracleCommand cmd = new OracleCommand ())
    {
        cmd.Connection = conn;
        cmd.CommandText = "TABLESPACE_NAME aus DBA_DATA_FILES auswählen";

        using (OracleDataReader dr = cmd.ExecuteReader ())
        {
            while (dr.Read ())
            {
                listBox.Items.Add (dr ["TABLESPACE_NAME"]);
            }}
        }}
    }}
}}

Wenn das SERVICE_NAME=XEfalsch ist, erhalten Sie den Fehler 12514. Das SERVICE_NAMEist optional. Sie können es auch weglassen.

Elmue
quelle
Vielen Dank, von Ihrer Lösung habe ich den Trick gefunden. In meinem Fall war es das Antivirenprogramm, das das Programm blockierte und daher keine Verbindung zur Oracle-Datenbank herstellen konnte.
robot_alien
2

Ich hatte auch das gleiche Problem und verbrachte 3 Tage damit, es auszugraben.

Dies liegt an Ihrem falschen TNS-Serviceeintrag.

Überprüfen Sie zunächst, ob Sie mit SQL> sqlplus sys@orastand as sysdba( orastandist eine Standby-Datenbank) eine Verbindung zur Standby-Datenbank von der Primärdatenbank aus herstellen können .

Wenn Sie keine Verbindung herstellen können, liegt ein Problem mit dem Dienst vor. Korrigieren Sie die Eingabe des Dienstnamens in die TNS-Datei am primären Ende.

Überprüfen Sie die Standby-Datenbank auf die gleiche Weise. Nehmen Sie die Änderungen bei Bedarf auch hier vor.

Stellen Sie sicher, dass der log_archive_dest_2Parameter den richtigen Dienstnamen hat.

user3778101
quelle
1

Ich habe den gleichen Fehler erhalten, weil die angegebene Remote-SID falsch war:

 > sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID 

Ich habe die Systemdatenbank abgefragt:

Wählen Sie * aus global_name;

und fand meine Remote-SID ("XE").

Dann konnte ich mich problemlos verbinden.

Laura Liparulo
quelle
0

In meinem Fall hatte die Datenbank keinen Speicherplatz mehr. Was dazu führte, dass es nicht reagierte. Nachdem ich das Problem geklärt hatte, funktionierte alles wieder.

Pete Brumm
quelle
Wie kann ich das herausfinden?
CodeSlave
0

Für mich wurde dies durch die Verwendung einer dynamischen IP-Adresse bei der Installation verursacht. Ich habe Oracle mit einer statischen IP-Adresse neu installiert und dann war alles in Ordnung

Steef
quelle
0

Der Neustart der VM hat bei mir funktioniert

Wishman
quelle
0

Mein Problem wurde behoben, indem die 'SID' in der URL durch 'Dienstname' und den richtigen Host ersetzt wurde.

Herr. Igel
quelle
0

tnslsnr ist aktiv, aber die Datenbank ist nicht verfügbar.

Für Oracle-Neulinge ist es nicht offensichtlich, dass die Datenbank möglicherweise nicht verfügbar ist, während Verbindungen akzeptiert werden.

Ich musste die Datenbank so manuell starten

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

Und dann in der SQL-Konsole

startup

In meinem Fall konnte ich nicht starten, bekam aber eine weitere Fehlermeldung und fand die Ursache eines Problems - ich musste den Hostnamen ändern und dann war der automatische Start der Datenbank wieder funktionsfähig.

user3132194
quelle
0

Das Problem war, dass meine Verbindungszeichenfolgen-URL den Datenbanknamen anstelle der SID enthielt. Das Ersetzen des Datenbanknamens durch die SID der Oracle-Datenbankverbindung hat dieses Problem behoben.

Um Ihre Oracle-SIDs zu kennen, können Sie die tnsnames.oraDatei durchsuchen .

XE war die eigentliche SID, so sieht meine Tomcat-Verbindungszeichenfolge jetzt aus:

    <Resource
       name="jdbc/my_db_conn"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
       username="test_user"
       password="test" />

Meine Serverversion war "Oracle 11.2 Express", aber die Lösung sollte auch auf anderen Versionen funktionieren.

Benas
quelle
0

In meinem Fall fehlten in der Datei tnsnames.ora runde Klammern um SERVICE_NAME .

<DBNAME> =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
    )
  )

LISTENER_<DBNAME> =

  (ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))
Mosab Sasi
quelle
0

Für diejenigen, die Spring-Boot und JDBC für die Verbindung verwenden. Sie müssen vorsichtig sein, wenn Sie jdbcUrl in application.properties schreiben

Mit SID in Datenbankverbindung - source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID

Mit Dienstname in Datenbankverbindung globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE

Das hat bei mir funktioniert :)

surajmall
quelle
-1

Ich habe die folgende Problemumgehung implementiert, um dieses Problem zu beheben.

  1. Ich habe ORACLE_HOME über die Eingabeaufforderung festgelegt (Rechtsklick auf cmd.exe und Als Systemadministrator ausführen).

  2. Wird unter dem Befehl verwendet

    set oracle_home="path to the oracle home"

  3. Gehen Sie zu Alle Programme -> Oracle -ora home1 -> Migrationstools für die Konfiguration -> Net Manager -> Listener

  4. Wählen Sie aus der Dropdown-Liste Datenbankdienste aus. Sowohl der globale Datenbankname als auch die SID sind gleich eingestellt (in meinem Fall ORCL). Legen Sie das Oracle Home Directory fest.

Beispiel für ein Oracle Net Manager-Fenster aus der Oracle-Dokumentation: Beispiel für Oracle Net Manager

  1. Klicken Sie auf Datei und speichern Sie die Netzwerkkonfiguration.
Raman B.
quelle