web-dev-qa-db-fra.com

ORA-12505, TNS: l'auditeur ne connaît pas actuellement le SID donné dans le descripteur de connexion

J'ai installé Oracle 11g Express Edition Release 2 sur mon système d'exploitation Windows 7 64 bits et essayé d'exécuter le programme JDBC. J'ai alors le message d'erreur suivant:

Java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:412)
    at Oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.Java:531)
    at Oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.Java:221)
    at Oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.Java:32)
    at Oracle.jdbc.driver.OracleDriver.connect(OracleDriver.Java:503)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.Java:28)
    at Lab3O.main(Lab3O.Java:15)
Caused by: Oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at Oracle.net.ns.NSProtocol.connect(NSProtocol.Java:385)
    at Oracle.jdbc.driver.T4CConnection.connect(T4CConnection.Java:1042)
    at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:301)
    ... 8 more
131
Learner

J'ai résolu ce problème en corrigeant ma chaîne jdbc.

Par exemple, la chaîne jdbc correcte doit être ...

jdbc:Oracle:thin:@myserver:1521/XE

Mais la chaîne jdbs que j'utilisais est ...

jdbc:Oracle:thin:@myserver:1521:XE

(Remarque: entre 1521 et XE devrait être un /.)

Cette mauvaise chaîne jdbc me donne aussi une erreur ORA-12505.

157
Wade H

Ce problème peut être dû à plusieurs facteurs, mais avant de commencer à utiliser JDBC, vous devez être sûr de pouvoir vous connecter à la base de données à l'aide de SQL * Plus. Si vous ne connaissez pas bien SQL * Plus, il s'agit d'un outil de ligne de commande pour la connexion à des bases de données Oracle, élément standard d'Oracle depuis longtemps, inclus dans Oracle XE.

Lors de la connexion à une base de données Oracle à l'aide de JDBC, vous ne vous connectez pas directement à la base de données. Au lieu de cela, vous vous connectez à un écouteur TNS, qui vous connecte ensuite à la base de données. L'erreur ORA-12505 signifie que l'écouteur était actif et que vous pouviez vous y connecter, mais il ne pouvait pas vous connecter à la base de données car il ne sait pas que cette base de données est active. Il y a deux raisons à cela:

  • la base de données n'a pas été démarrée,
  • la base de données n'est pas enregistrée avec le programme d'écoute, par exemple. parce que la base de données a été démarrée avant l'auditeur. (Lorsque la base de données démarre, elle s’enregistre elle-même avec un écouteur si elle est déjà en cours d’exécution. Si l’écouteur ne s’exécute pas, la base de données ne s’enregistre pas lui-même et si l’écouteur démarre, il ne cherche pas de bases de données qui pourraient s'inscrire avec elle.)

ORA-12505 signifie que l'auditeur est au courant de cette base de données, mais il n'a pas reçu de notification de la part de la base de données lui indiquant que la base de données est opérationnelle. (Si vous tentiez de vous connecter à la mauvaise base de données en utilisant le mauvais SID, vous obtiendrez une erreur ORA-12154 "TNS: impossible de résoudre l'identificateur de connexion spécifié".)

Quels services Oracle sont en cours d'exécution dans le composant logiciel enfichable Services? (Ouvrez-le depuis Panneau de configuration> Outils d'administration> Services ou tout simplement Démarrer> Exécuter> services.msc.) Vous avez besoin des services OracleServiceXE et OracleXETNSListener pour fonctionner.

Si les deux services ont été démarrés, pouvez-vous vous connecter à la base de données SQL * Plus à l’aide d’une des méthodes suivantes à une invite de commande? (Je suppose que vous les utilisez sur la machine sur laquelle vous avez installé Oracle XE.)

système sqlplus /mot de passe du système@XE
système sqlplus /mot de passe du système
sqlplus/as sysdba

(Remplacez system-password par le mot de passe défini pour les utilisateurs SYS et SYSTEM lors de l'installation d'Oracle XE.)

La première de ces trois personnes se connecte via l'écouteur TNS, tandis que les deux autres se connectent directement à la base de données sans passer par l'écouteur et ne fonctionnent que si vous êtes sur le même ordinateur que la base de données. Si le premier échoue mais que les deux autres réussissent, les connexions JDBC échoueront également. Si tel est le cas, connectez-vous à la base de données à l'aide de l'un des deux autres et exécutez ALTER SYSTEM REGISTER. Quittez ensuite SQL * Plus et réessayez le premier formulaire.

Si le troisième échoue mais que le second fonctionne, ajoutez votre compte utilisateur au groupe ora_dba. Faites-le dans Panneau de configuration> Gestion de l'ordinateur> Utilisateurs et groupes locaux.

Une fois que vous pouvez obtenir des connexions de la forme

système sqlplus /mot de passe du système@XE

pour pouvoir travailler, vous devez pouvoir vous connecter à Oracle XE via JDBC. (Incidemment, vous ne nous avez pas indiqué le code JDBC que vous utilisez pour vous connecter à la base de données, mais je suppose que c'est probablement le cas. Il y aurait diverses autres erreurs si des parties de la chaîne de connexion étaient incorrectes.)

83
Luke Woodward

Moi aussi j'ai eu la même erreur mais quand essayé tous les trois ont échoué. Si les trois précédents échouent. Essayez le statut LSNRCTL si vous trouvez le service (XE dans mon cas) manquant, essayez ceci sqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...

Maintenant vous pouvez voir le service
Même si vous ne voyez pas essayer celui-ci
sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat

Cela devrait probablement fonctionner ...

38
Raj

Lorsque vous obtenez cette erreur "ORA-12505, TNS: le programme d’écoute ne connaît pas actuellement le SID indiqué dans le descripteur de connexion"

Solution: ouvrez Services et démarrez OracleServiceXE, puis essayez de vous connecter ...

28
C Nageswara Reddy

J'ai trouvé quelques raisons pour cette exception.

1) Le nom de la base de données XE par défaut.L'URL sera "jdbc: Oracle: thin: @localhost: 1521: XE".

2) Assurez-vous que OracleServiceXE, OracleXETNSListener est en cours d'exécution. Il sera dans Panneau de configuration\Tous les éléments du panneau de configuration\Outils d'administration\Services

10
rajeesh

J'ai résolu ce problème en corrigeant mon code JDBC.

la chaîne JDBC correcte devrait être ...

conection = DriverManager.getConnection
("jdbc:Oracle:thin:@localhost:1521:xe","system","ishantyagi");

Mais la chaîne JDBC que j'utilisais était ...

conection = DriverManager.getConnection
("jdbc:Oracle:thin:@localhost:1521:orcl","system","ishantyagi");

Ainsi, l'erreur de spécifier orcl au lieu de xe a montré cette erreur car le nom du SID était incorrect.

8
javabeginner

Face à une erreur similaire, aucune des solutions ci-dessus n'a pas aidé. Il y avait un problème dans le fichier listner.ora. Par erreur, j'avais ajouté SID hors du SID_LIST voir ci-dessous (section entre les étoiles *).

 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)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (Oracle_HOME = C:\oraclexe\app\Oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

Corrigé cette erreur comme ci-dessous:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (Oracle_HOME = C:\oraclexe\app\Oracle\product\11.2.0\server)
     )
    (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 = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

Arrêté et la base de données enter image description here

A arrêté manuellement les écouteurs OracleServiceXE et OracleXETNSListener, car ils ne se sont pas arrêtés automatiquement en accédant à Panneau de configuration\Tous les éléments du panneau de configuration\Outils d'administration\Services. Redémarrage de la base de données et cela a fonctionné comme un charme.

7
Nirmal Mangal

Mon problème est résolu lorsque j'utilise le code ci-dessous:

Class.forName("Oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:Oracle:thin:@IPAddress:1521/servicename","userName","Password");
7
Rasheed Puttur

Une possibilité que je n'ai pas beaucoup vue est qu'il pourrait y avoir un problème pour résoudre le nom d'hôte sur la machine hôte elle-même. S'il n'y a pas d'entrée pour $ (nom d'hôte) dans/etc/hosts, le programme d'écoute Oracle est confus et ne s'affiche pas.

Cela s'est avéré être mon problème, et l'ajout du nom d'hôte et de l'adresse IP dans/etc/hosts a résolu le problème.

4
BillT

je suis d'abord venu ici avec le même problème. J'avais déjà installé Oracle 12c sur Windows 8 (64 bits), mais je l’ai depuis résolu par 'TNSPING xe' sur la ligne de commande ... Si la connexion n’est pas établie ou si le nom n’a pas été trouvé, essayez le nom de la base de données, dans mon cas, il s'agissait de 'orcl' ... 'TNSPING orcl' à nouveau et si le test est réussi, vous devez alors remplacer le SID par 'orcl' (ou le nom de la base de données que vous avez utilisé) ...

4
Jose Rego

Oracle: Syntaxe du nom de service de style fin

Les noms de service de style fin ne sont pris en charge que par le pilote JDBC Thin. La syntaxe est la suivante:

@ // nom_hôte: numéro_port/nom_service

http://docs.Oracle.com/cd/B28359_01/Java.111/b31224/urls.htm#BEIDHCBA

4
jeton

J'ai eu le même problème, donc pour résoudre ce problème, j'ai d'abord reconfiguré mon auditeur en utilisant netca, après avoir supprimé mon ancienne base de données, qui était ORCL, à l'aide de dbca, puis j'ai créé la nouvelle base de données en utilisant dbca.

2
The Technokrat

Si vous utilisez Oracle Express Edition, vous devriez avoir cette URL

jdbc: Oracle: mince: @localhost: 1521: xe ou jdbc: Oracle: mince: @localhost: 1521/XE

J'ai eu le même problème avec le plugin liquibase config dans pom.xml. Et j'ai changé ma configuration:

`<configuration>
   <driver>Oracle.jdbc.OracleDriver</driver>
   <url>jdbc:Oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`
2
Pavlo Chechehov

Moi aussi j'ai fait face au même problème. J'avais installé Oracle Express édition 10g sous Windows XP avec VMware et tout fonctionnait bien. Comme il était très difficile de taper des requêtes SQL dans l'utilitaire SQL fourni par 10g et que j'étais habitué à travailler avec un développeur SQL, j'ai installé un développeur SQL 32 bits dans XP et essayé de me connecter à ma base de données SID "XE". . Mais la connexion a échoué avec le programme d’écoute TNS error-ORA-12505 qui ne connaît pas actuellement le SID indiqué dans le descripteur de connexion. J'étais en mer pour savoir comment ce problème se produisait car il fonctionnait bien avec l'utilitaire SQL et j'avais également créé quelques mappages Informatica utilisant le même outil. J'ai parcouru pas mal de choses là-bas et j'ai appliqué les suggestions qui m'étaient proposées après avoir vérifié le statut de "lsnrctl" sur des forums publics, mais en vain. Cependant, ce matin, j'ai de nouveau essayé de créer une nouvelle connexion, et voilà, cela fonctionnait sans problème. Je devine, après avoir lu dans quelques articles, que parfois l'auditeur écoute avant que la base de données ne se connecte (pardonnez-moi pour ma référence brute car je suis un novice ici), mais je suggère de simplement redémarrer la machine et de vérifier à nouveau.

2
user2905345

J'ai fait face au même problème et résolu en redémarrant le service OracleServiceXE. Allez à Services.msc puis vérifiez que le service 'OracleServiceXE' est opérationnel et en cours d'exécution.

2
Vijay Thayalan

J'ai résolu ce problème en remplaçant "SID" par "SERVICE_NAME" dans mon fichier TNSNAMES.ora.

Veuillez vérifier si votre base de données vous demande un SID ou un SERVICE_NAME.

À votre santé

1
Akshay Lokur

J'ai eu le même problème dans SQL Workbench.

URL:

jdbc: Oracle: thin: @ 111.111.111.111: 1111: xe

ne fonctionne pas.

URL:

jdbc: Oracle: thin: @ 111.111.111.111: 1111: asdb

travaux.

Cela m'aide dans ma situation concrète. Je crains que cela puisse exister de nombreuses autres raisons avec différentes solutions.

1
Máťa - Stitod.cz

Vérifiez en faisant tnsping et nom d'instance dans la machine hôte. Cela vous donnera une description de la situation et la plupart du temps, le nom d'hôte est différent, ce qui ne correspond pas.

Je résous mon problème de la même manière

Sous machine Unix $ tnsping (Entrée)

Il me donne une description complète de tns où j'ai trouvé que le nom d'hôte est différent .. :)

1
Abhishek Banik

Connection con = DriverManager.getConnection ("jdbc: Oracle: mince: @localhost: 1521: xe", "scott", "tigre");

Erreur j'ai eu:

Java.sql.SQLException: le programme d'écoute a refusé la connexion avec l'erreur suivante: ORA-12505, TNS: le programme d'écoute ne connaît pas actuellement le SID indiqué dans le descripteur de connexion Le descripteur de connexion utilisé par le client était: localhost: 1521: xe

Comment je l'ai résolu:

Connection con = DriverManager.getConnection ("jdbc: Oracle: mince: localhost: 1521: xe", "scott", "tigre");

(Retirer @)

Je ne sais pas pourquoi, mais ça marche maintenant ...

1

Veuillez vérifier si OracleServiceXE et OracleXETNSListener lorsque le statut a été démarré lorsque vous naviguez dans start->run->services.msc.

Pour mon cas, seul OracleXETNSListener a été démarré mais OracleServiceXE n’a pas été démarré. Lorsque j’ai commencé par right clicking -> start, j’ai vérifié que la connexion fonctionnait pour moi.

1
user5211481

Vous avez soudainement le même problème après avoir bousculé des cmd. En fait, Oracle SERVICE XE avait cessé de fonctionner. Il m'a fallu 2 secondes pour le redémarrer à partir des outils d'administration. tnx!

1
Brian Mk

Outre les services en cours d'exécution (OracleServiceXE, OracleXETNSListener), votre logiciel anti-virus/pare-feu risque toujours de les bloquer. Assurez-vous simplement qu'ils ne sont pas bloqués . enter image description here

0
sql_dummy

Dans mon cas, ça ne fonctionnait pas, j'ai finalement redémarré mon auditeur Oracle et TNS et tout a fonctionné. A lutté pendant 2 jours.

0
Amarjeet

Avait un problème similaire. Le problème a commencé soudainement - nous avons une URL de connexion à la base de données à charge équilibrée, mais dans les connexions jdbc, je pointais directement vers une seule base de données.

Changé pour charger une URL équilibrée et cela a fonctionné.

0
Kisanagaram

J'ai eu cette erreur ORA-12505, TNS: le programme d'écoute ne connaît actuellement pas l'identificateur de sécurité indiqué dans le descripteur de connexion lorsque j'ai tenté de me connecter à Oracle DB à l'aide d'un développeur SQL.

La chaîne JDBC utilisée était jdbc: Oracle: thin: @myserver: 1521/XE, de toute évidence le bon et les deux services Oracle obligatoires OracleServiceXE, OracleXETNSListener étaient opérationnels.

La façon dont j'ai résolu ce problème (sous Windows 10)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
0
r-sunny

Je viens de le réparer en redémarrant/en démarrant oracleService dans les services

0