Plusieurs facteurs peuvent être à l'origine de ce problème, mais avant de commencer à utiliser JDBC, vous devez vous assurer que vous pouvez vous connecter à la base de données à l'aide de SQL*Plus. Si vous ne connaissez pas SQL*Plus, il s'agit d'un outil de ligne de commande permettant de se connecter aux bases de données Oracle, qui fait partie intégrante d'Oracle depuis longtemps et qui est inclus dans Oracle XE.
Lorsque vous vous connectez à une base de données Oracle en utilisant JDBC, vous ne vous connectez pas directement à la base de données. Au lieu de cela, vous vous connectez à un auditeur TNS, qui vous connecte ensuite à la base de données. L'erreur ORA-12505
signifie que l'écouteur était opérationnel et que vous pouviez vous y connecter, mais qu'il ne pouvait pas vous connecter à la base de données parce qu'il ne savait pas que la base de données était opérationnelle. Il y a deux raisons à cela :
- la base de données n'a pas été démarrée,
- la base de données n'a pas été enregistrée auprès du listener, par exemple parce que la base de données a été lancée avant le listener. (Lorsque la base de données démarre, elle s'enregistre auprès d'un listener si celui-ci est déjà en cours d'exécution. Si le listener n'est pas en cours d'exécution, la base de données ne s'enregistre pas, et si le listener démarre, il ne va pas chercher les bases de données qui pourraient s'enregistrer auprès de lui).
ORA-12505 signifie que le listener connaît cette base de données, mais qu'il n'a pas reçu de notification de la base de données indiquant que celle-ci est en service. (Si vous essayiez de vous connecter à la mauvaise base de données, en utilisant le mauvais SID, vous obtiendriez une erreur ORA-12154 "TNS : could not resolve the connect identifier specified").
Quels services Oracle sont exécutés dans le snap-in Services ? (Ouvrez-le à partir du Panneau de configuration > Outils d'administration > Services, ou simplement à partir de Démarrer > Exécuter > ). services.msc
.) Les services OracleServiceXE et OracleXETNSListener doivent être en cours d'exécution.
Si les services ont tous deux été lancés, pouvez-vous vous connecter à la base de données dans SQL*Plus à l'aide de l'une des commandes suivantes (je suppose que vous les exécutez sur la machine sur laquelle vous avez installé Oracle XE) ?
sqlplus system/_system-password_@XE sqlplus system/_system-password_ sqlplus / as sysdba
(Remplacer _system-password_
avec le mot de passe que vous avez défini pour les utilisateurs SYS et SYSTEM lors de l'installation d'Oracle XE).
La première de ces trois connexions se fait via l'écouteur TNS, mais les deux autres se connectent directement à la base de données sans passer par l'écouteur, et ne fonctionnent que si vous êtes sur la même machine que la base de données. Si la première échoue mais que les deux autres réussissent, alors les connexions JDBC échoueront également. Si c'est le cas, connectez-vous à la base de données en utilisant l'une des deux autres et exécutez ALTER SYSTEM REGISTER
. Ensuite, quittez SQL*Plus et réessayez le premier formulaire.
Si la troisième échoue mais que la deuxième 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
sqlplus system/_system-password_@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çonne qu'il est très probablement correct ; il y aurait diverses autres erreurs si des parties de la chaîne de connexion étaient erronées).