web-dev-qa-db-fra.com

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

J'utilise la base de données Oracle. J'ai écrit un petit programme de connexion JDBC en Java, mais je suis confronté à un problème avec l'auditeur.

import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.PreparedStatement;
import Java.sql.ResultSet;
import Java.sql.SQLException;

public class JdbcConnection {
    public static void main(String[] args) throws SQLException,ClassNotFoundException {
        String url = "jdbc:Oracle:thin:@localhost:1521:orcl";
        String user = "system";
        String password = "password";
        Connection connection = null;

        Class.forName("Oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection(url, user, password);
        if(connection!=null){
            System.out.println("Success in connnection");
        } else {
            System.out.println("failure in connection ");
        }
    }
}

Je reçois l'exception suivante:

C:\Users\Administrator\Desktop>Java JdbcConnection
Exception in thread "main" Java.sql.SQLException: Listener refused the connectio
n with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
localhost:1521:orcl

        at Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java
:112)
        at Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java
:261)
        at Oracle.jdbc.driver.T4CConnection.logon(T4CConnection.Java:387)
        at Oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.Java:
441)
        at Oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.Java:165)
        at Oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtensio
n.Java:35)
        at Oracle.jdbc.driver.OracleDriver.connect(OracleDriver.Java:801)
        at Java.sql.DriverManager.getConnection(Unknown Source)
        at Java.sql.DriverManager.getConnection(Unknown Source)
        at JdbcConnection.main(JdbcConnection.Java:18)

Ceci est la sortie de lsnrctl status

LSNRCTL for 64-bit Windows: Version 12.1.0.1.0 - Production on 16-JUN-2015 13:43
:41

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 12.1.0.1.0 - Produ
ction
Start Date                16-JUN-2015 12:02:52
Uptime                    0 days 1 hr. 40 min. 52 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   C:\app\orauser\product\12.1.0\dbhome_1\network\admin\l
istener.ora
Listener Log File         C:\app\orauser\diag\tnslsnr\hydwemvm\listener\alert\lo
g.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=hydwemvm)(PORT=1521)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
5
Rajesh Koppala

Si vous connaissez votre SID de base de données Oracle, utilisez 

jdbc:Oracle:thin:@localhost:1521:orcl

sinon utilisez ci-dessous si vous avez le nom du service

jdbc:Oracle:thin:@localhost:1521/orcl

Assurez-vous également que le nom du service avec le nom ORCL devrait être opérationnel. Si cela ne fonctionne toujours pas, vous devez redémarrer votre ordinateur et réessayer ci-dessus. 

Tu ne travailles toujours pas? Ensuite, essayez de suivre:

Connectez-vous avec SYSTEM utilisateur et enregistrezLOCAL_LISTENERen exécutant en dessous de SQL.

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

Comment vérifier le SID Oracle et le nom du service:

SELECT sys_context('USERENV', 'SID') FROM DUAL; -- It will return your Oracle database SID

SELECT sys_context('USERENV', 'SERVICE_NAME') FROM DUAL; -- It will return your Oracle database service name
16
Ravi

Pouvez-vous utiliser l'URL ci-dessous?
Notez la différence, il s’agit d’utiliser le SERVICENAME au lieu d’un SID. 

jdbc:Oracle:thin:@localhost:1521/orclservice
1
Nirmala

Si vous voulez connaître le SID par défaut de votre base de données, utilisez cette requête dans sqlplus:

SELECT sys_context('USERENV', 'SID') FROM DUAL;

Utilisez cette valeur dans l'URL JDBC au lieu de "orcl".

1
Jean de Lavarene