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

154

J'ai installé Oracle 11g Express Edition Release 2 dans mon système d'exploitation Windows 7 64 bits et j'ai essayé d'exécuter le programme JDBC, puis j'ai eu l'erreur suivante:

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
Apprenant
la source
1
Le démarrage manuel d'OracleServiceXE à partir des services a fonctionné pour moi.
Sen

Réponses:

184

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 1521et XEdevrait être a /)

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

Wade H
la source
53
Si vous utilisez un / c'est un nom de service réseau, si vous utilisez un signe deux-points, c'est un SID.
eckes le
89

Il y a plusieurs choses qui peuvent causer ce problème, mais avant de commencer avec JDBC, vous devez vous assurer que vous pouvez vous connecter à la base de données à l'aide de SQL * Plus. Si vous n'êtes pas familier avec SQL * Plus, c'est un outil de ligne de commande pour la connexion aux bases de données Oracle qui fait partie d'Oracle depuis longtemps et qui est inclus avec Oracle XE.

Lorsque vous vous connectez à 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-12505signifie que l'écouteur était actif et que vous pouviez vous y connecter, mais il n'a pas pu 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 ne s'est pas enregistrée auprès de l'écouteur, par exemple parce que la base de données a été démarrée avant l'écouteur. (Lorsque la base de données démarre, elle s'enregistre auprès d'un écouteur si elle est déjà en cours d'exécution. Si l'écouteur n'est pas en cours d'exécution, la base de données ne s'enregistre pas et si l'écouteur démarre, il ne cherche pas les bases de données qui pourraient inscrivez-vous avec.)

ORA-12505 signifie que l'auditeur connaît cette base de données, mais que l'auditeur n'a pas reçu de notification de la base de données indiquant que la base de données est active. (Si vous tentiez de vous connecter à la mauvaise base de données, en utilisant le mauvais SID, vous obtiendrez une erreur ORA-12154 "TNS: n'a pas pu résoudre l'identifiant de connexion spécifié".)

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

Si les deux services ont été démarrés, pouvez-vous vous connecter à la base de données dans SQL * Plus à l'aide de l'un des éléments suivants à une invite de commandes? (Je suppose que vous les exécutez sur la machine sur laquelle vous avez installé Oracle XE.)

système sqlplus / mot de passe système @XE
système sqlplus / mot de passe système
sqlplus / comme sysdba

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

Le premier de ces trois se connecte via l'auditeur TNS, mais les deux seconds se connectent directement à la base de données sans passer par l'auditeur, et ne fonctionnent que si vous êtes sur la même machine 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 en utilisant 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 cela dans Panneau de configuration> Gestion de l'ordinateur> Utilisateurs et groupes locaux.

Une fois que vous pouvez obtenir des connexions du formulaire

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

pour fonctionner, vous devez pouvoir vous connecter à Oracle XE via JDBC. (Incidemment, vous ne nous avez pas montré le code JDBC que vous utilisez pour vous connecter à la base de données, mais je soupçonnerais qu'il est très probablement correct; il y aurait diverses autres erreurs si des parties de la chaîne de connexion étaient incorrectes.)

Luke Woodward
la source
3
@Raj: Je ne vois pas ce que votre modification apporte à la réponse, donc je l'ai supprimée. Si vous souhaitez apporter une contribution importante à une question, veuillez publier votre propre réponse plutôt que de modifier celle de quelqu'un d'autre.
Luke Woodward
@LukeWoodward J'obtiens cette erreur SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. sur les 3
vaibhavcool20
1
@qtpseleniumSupport: ce message dit que vous étiez dans SQL * Plus et que vous avez entré la ligne system/ora...(ou SQL * Plus a lu cette ligne à partir d'un fichier que vous lui aviez demandé de lire). Les lignes de commande que j'ai données ci-dessus sont destinées à être utilisées à partir d'une fenêtre d'invite de commande / shell / Terminal. Si vous exécutez déjà SQL * Plus, remplacez-le sqlpluspar connect.
Luke Woodward
"la base de données ne s'est pas enregistrée auprès de l'auditeur, par exemple parce que la base de données a été démarrée avant l'auditeur." - c'était ça, merci!
Ursache le
47

J'ai moi aussi eu la même erreur, mais une fois essayé, les trois ont échoué. Si les trois ci-dessus échouent, essayez le statut LSNRCTL si vous trouvez le service (XE dans mon cas) manquant, essayez ceci

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

Maintenant, vous pouvez voir le service
Même si vous ne voyez pas, essayez celui-ci

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

Cela devrait probablement fonctionner ...

Raj
la source
2
Vous l'avez fait, mec! Après avoir défini le local_listener, l'écouteur orcl est maintenant affiché dans lsnrctl. Mille mercis!
asgs
Cela a permis à mon système de fonctionner, mais notez que j'ai exécuté ce qui suit: ALTER SYSTEM set local-listener = XE;
Daniel Williams le
quand je tape: 'alter system set local_listener =' (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) 'scope = both;' Il renvoie une erreur: ORA-65040: operation not allowed from within a pluggable databasequ'est-ce que cela signifie? Impossible de configurer le JDBC: /
Alg_D
1
les deux réponses les plus votées ont aidé, mais celle-ci a aidé davantage. Il semble que je n'avais pas 127.0.0.1 comme adresse d'écoute (j'en avais une avec le nom local de mon PC). Donc, en ajoutant ce nouveau, il a commencé à fonctionner
johnbr
alter system set local_listener = ... travaillé pour moi.
Ben Asmussen
31

Lorsque vous obtenez cette erreur "ORA-12505, TNS: l'auditeur ne connaît pas actuellement le SID indiqué dans le descripteur de connexion"

Solution: ouvrez les services et démarrez OracleServiceXE, après cela, essayez de vous connecter ...

C Nageswara Reddy
la source
J'ai eu le même problème mais avec l'exécution d'OracleServiceXE. Par conséquent, le redémarrage d'un service OracleServiceXE a fonctionné pour moi. Je ne sais pas pourquoi?!
Hamedz du
Lorsque vous recherchez OracleServiceXE, gardez à l'esprit que XE correspond au SID de la base de données, alors assurez-vous que vous recherchez le bon service, OracleService [SID]
Sandoval0992
10

J'ai trouvé quelques raisons à cette exception.

1) Le nom de la base de données XE par défaut, donc l'url sera " jdbc: oracle: thin: @localhost: 1521: XE ".

2) Assurez-vous qu'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

Rajeesh
la source
8

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

la chaîne JDBC correcte doit ê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 SID était incorrect.

javabeginner
la source
Dans mon cas, a conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");fonctionné.
Pran Kumar Sarkar
8

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");
Rasheed Puttur
la source
7

Face à une erreur similaire, aucune des solutions ci-dessus n'a aidé. Un problème est survenu dans le fichier listner.ora. Par erreur j'avais ajouté SIDhors de la SID_LISTvoir 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)

Correction de 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 entrez la description de l'image ici

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

Nirmal Mangal
la source
4

Je suis d'abord venu ici avec le même problème. J'avais juste 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 que le nom n'est pas trouvé, essayez le nom de la base de données, dans mon cas, c'était 'orcl' ... 'TNSPING orcl' à nouveau et s'il pings avec succès, vous devez changer le SID en 'orcl' dans ce cas (ou quel que soit le nom de base de données utilisé) ...

José Rego
la source
4

Une possibilité que je n'ai pas vue largement discutée est qu'il peut 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 $ (hostname) dans / etc / hosts, l'écouteur Oracle devient confus et ne s'affichera 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.

BillT
la source
4

Si vous disposez d'une connexion fonctionnelle dans Oracle SQL Developer, utilisez les informations du menu de connexion pour créer votre URL, comme décrit dans l'image suivante:

entrez la description de l'image ici

Dans l'exemple ci-dessus, l'URL serait: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

Notez que si vous utilisez un SID, il y a un signe deux-points (":") au lieu d'une barre oblique ("/") après le nom d'hôte.

Pierre C
la source
2

Moi aussi, j'ai été confronté au même problème. J'avais installé l'édition Oracle Express 10g dans le système d'exploitation Windows XP à l'aide de VMware et cela 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 j'ai essayé de me connecter à mon DB SID "XE". Mais la connexion a échoué avec l'erreur-ORA-12505 L'auditeur TNS ne connaît pas actuellement le SID indiqué dans le descripteur de connexion. J'étais en mer pour savoir comment ce problème s'est produit car il fonctionnait bien avec l'utilitaire SQL et j'avais également créé quelques mappages Informatica en utilisant le même. J'ai parcouru beaucoup de choses sur ce truc ici et appliqué les suggestions qui m'ont été proposées après avoir envoyé un ping sur le statut de "lsnrctl" sur les forums publics, mais en vain. Cependant, ce matin, j'ai essayé à nouveau de créer une nouvelle connexion, et Voila, cela a fonctionné sans problème. Je suppose qu'après avoir lu quelques articles, l'auditeur écoute parfois avant que la base de données ne se connecte ou quelque chose (pardonnez-moi pour ma référence grossière car je suis un débutant ici) mais je suggère de simplement redémarrer la machine et de vérifier à nouveau.

user2905345
la source
2

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

Le Technokrat
la source
2

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

Vijay Thayalan
la source
2

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

Veuillez voir si votre base de données demande SID ou SERVICE_NAME.

À votre santé

Akshay Lokur
la source
2

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

jdbc: oracle: thin: @localhost: 1521: xe ou jdbc: oracle: thin: @localhost: 1521 / XE

J'ai eu un problème similaire avec le plugin de configuration liquibase 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>`
Pavlo Chechehov
la source
2

Connection con = DriverManager.getConnection ("jdbc: oracle: thin: @localhost: 1521: xe", "scott", "tiger");

Erreur que j'ai:

java.sql.SQLException: l'auditeur a refusé la connexion avec l'erreur suivante: ORA-12505, TNS: l'auditeur 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: thin: localhost: 1521: xe", "scott", "tiger");

(Retirer @)

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

Srikar Madhavapeddy
la source
1

Vérifiez en faisant tnsping et nom de l'instance sur la machine hôte. Cela vous donnera la description tns 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

Dans la machine Unix $ tnsping (Entrée)

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

Abhishek Banik
la source
1

Veuillez vérifier les deux OracleServiceXEet OracleXETNSListeneravoir le statut commencé lorsque vous naviguez start->run->services.msc.

Pour mon cas, seul a OracleXETNSListenerété commencé mais OracleServiceXEn'a pas été commencé, quand j'ai commencé right clicking -> startet vérifié la connexion, cela fonctionnait pour moi

user5211481
la source
1

J'ai eu un problème similaire dans SQL Workbench.

URL:

jdbc: oracle: fin: @ 111.111.111.111: 1111: xe

ne fonctionne pas.

URL:

jdbc: oracle: fin: @ 111.111.111.111: 1111: asdb

travaux.

Cela m'aide dans ma situation concrète. J'ai peur, cela pourrait exister de nombreuses autres raisons avec des solutions différentes.

Máťa - Stitod.cz
la source
0

Eu 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 l'URL de base de données équilibrée et cela a fonctionné.

Kisanagaram
la source
2
Nous vous recommandons d'utiliser l'URL de la chaîne de connexion entièrement qualifiée comme indiqué jdbc: oracle: thin: @ (DESCRIPTION = (ADDRESS = (HOST = myhost) (PORT = 1521) (PROTOCOL = tcp)) (CONNECT_DATA = (SERVICE_NAME = myorcldbservicename)))
Nirmala le
0

Dans mon cas, cela ne fonctionnait pas, j'ai finalement redémarré mon oracle et mon auditeur TNS et tout a fonctionné. A eu du mal pendant 2 jours.

Amarjeet
la source
0

J'ai eu cette erreur ORA-12505, TNS: l'auditeur ne connaît actuellement pas le SID donné dans le descripteur de connexion lorsque j'ai essayé de me connecter à Oracle DB à l'aide du développeur SQL.

La chaîne JDBC utilisée était jdbc: oracle: thin: @myserver: 1521 / XE , évidemment la bonne 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.
r-ensoleillé
la source
0

Outre l'exécution des services (OracleServiceXE, OracleXETNSListener), il est possible que votre logiciel antivirus / pare-feu les bloque toujours. Assurez-vous simplement qu'ils ne sont pas bloqués.entrez la description de l'image ici

sql_dummy
la source
0

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

Shahid Hussain Abbasi
la source
0

Mon oracle a cessé de fonctionner et j'obtenais cette erreur. J'ai redémarré ma machine et j'ai également essayé les solutions ci-dessus. En fin de compte, j'ai ouvert les services de composants et redémarré les services oracle et tout a commencé à fonctionner. J'espère que cela aide quelqu'un.

rj4u
la source
0

Je créais juste le lien de base de données de manière incorrecte.

Une solution simple pour moi était de simplement remplacer "SID" par SERVICE_NAME

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

En changeant

SID=theNameOfTheDatabase

à

SERVICE_NAME=theNameOfTheDatabase 

résolu mon problème.

Paul
la source