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
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.
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:
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.)
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-cisqlplus /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 ...
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 ...
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
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.
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)
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.
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");
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.
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é) ...
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
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
.
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>`
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.
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.
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é
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.
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 .. :)
Connection con = DriverManager.getConnection ("jdbc: Oracle: mince: @localhost: 1521: xe", "scott", "tigre");
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
Connection con = DriverManager.getConnection ("jdbc: Oracle: mince: localhost: 1521: xe", "scott", "tigre");
(Retirer @)
Je ne sais pas pourquoi, mais ça marche maintenant ...
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.
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!
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.
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é.
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.
Je viens de le réparer en redémarrant/en démarrant oracleService dans les services