Nous avons une application en cours d'exécution localement où nous rencontrons l'erreur suivante:
ORA-12514: TNS: l'auditeur ne connaît pas actuellement le service demandé dans le descripteur de connexion
J'ai testé la connexion en utilisant TNSPing
qui a été correctement résolue et j'ai essayé SQLPlus
d'essayer de vous connecter, ce qui a échoué avec la même erreur que ci-dessus. J'ai utilisé cette syntaxe pour SQLPlus
:
sqlplus username/password@addressname[or Host name]
Nous avons vérifié que:
Nous ne sommes au courant d'aucune modification apportée à cet environnement. Quelque chose d'autre que nous pouvons tester?
J'ai eu ce problème et le correctif était de m'assurer que dans tnsnames.ora
le SERVICE_NAME
est un nom de service valide dans votre base de données. Pour connaître les noms de service valides, vous pouvez utiliser la requête suivante dans Oracle:
select value from v$parameter where name='service_names'
Une fois que j'ai mis à jour tnsnames.ora
pour:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
alors j'ai couru:
sqlplus user@TEST
Succès! L'écouteur vous dit en gros que le nom de service que vous utilisez n'est pas un service valide selon la base de données.
(* J'exécutais sqlplus à partir du poste de travail client Win7 vers une base de données distante et blâme les DBA;) *)
Je sais que c'est une vieille question, mais toujours sans réponse. Il m'a fallu une journée de recherche, mais j'ai trouvé la solution la plus simple, du moins dans mon cas (Oracle 11.2 sur Windows 2008 R2) et je souhaitais la partager.
Si l'erreur est examinée directement, l'erreur indique que le programme d'écoute ne reconnaît pas le nom du service. Mais où conserve-t-il les noms de service? Dans %Oracle_HOME%\NETWORK\ADMIN\listener.ora
Le "SID_LIST" est juste cela, une liste de SID et noms de services appariés dans un format que vous pouvez copier ou rechercher.
J'ai ajouté le nom du service qui pose problème, puis, dans le panneau de configuration Windows "Services", j'ai procédé à un "redémarrage" sur le service d'écoute Oracle. Maintenant tout va bien.
Par exemple, votre fichier listener.ora peut initialement ressembler à ceci:
# listener.ora Network Configuration File: C:\app\Oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(Oracle_HOME = C:\app\Oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
... Et pour lui faire reconnaître le nom de service orcl
, vous pouvez le changer en:
# listener.ora Network Configuration File: C:\app\Oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(Oracle_HOME = C:\app\Oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(Oracle_HOME = C:\app\Oracle_user\product\12.1.0\dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
J'ai eu ce problème à Windows Server 2008 R2 et Oracle 11g
sélectionnez Gestionnaire de réseau> Listener> sélectionnez les services de base de données dans la liste déroulante> "Nom de la base de données globale" doit être identique à "SID" et "Répertoire de base Oracle" doit être correct.
Si vous ne disposez d'aucune entrée pour les services de base de données, créez-en une et définissez la base de données globale correcte, sid
et Oracle home.
Dans mes circonstances, l'erreur était due au fait que l'auditeur n'avait pas enregistré le service de la base de données. J'ai résolu ce problème en enregistrant les services. Exemple:
Mon descripteur dans tnsnames.ora
:
LOCALDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = LOCALDB)
)
)
Je vais donc enregistrer le service manuellement dans le listener.ora
:
SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = LOCALDB)
(Oracle_HOME = C:\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = LOCALDB)
)
Enfin, redémarrez le listener avec la commande:
> lsnrctl stop
> lsnrctl start
Terminé!
Démarrer OracleServiceXXX à partir de services.msc a fonctionné pour moi sous Windows.
Cela devrait vraiment être un commentaire à la réponse de Brad Rippe , mais hélas, pas assez de représentants. Cette réponse m'a fourni 90% du chemin. Dans mon cas, l'installation et la configuration des bases de données ajoutent des entrées dans le fichier tnsnames.ora pour les bases de données que j'exécutais. Tout d'abord, j'ai pu me connecter à la base de données en définissant les variables d'environnement (Windows):
set Oracle_SID=mydatabase
set Oracle_HOME=C:\Oracle\product\11.2.0\dbhome_1
puis en utilisant une connexion
sqlplus / as sysdba
Ensuite, exécutez la commande à partir de la réponse de Brad Rippe:
select value from v$parameter where name='service_names';
a montré que les noms ne correspondaient pas exactement. Les entrées telles que créées à l'aide de l'assistant de configuration de base de données Oracle étaient à l'origine:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase.mydomain.com)
)
)
Le nom de service de la requête était simplement mydatabase
plutôt que mydatabase.mydomain.com
. J'ai modifié le fichier tnsnames.ora uniquement pour le nom de base sans la partie domaine afin qu'il ressemble à ceci:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase)
)
)
J'ai redémarré le service TNS Listener (j'utilise souvent lsnrctl stop
et lsnrctl start
à partir d'une fenêtre de commande d'administrateur [ou de Windows Powershell] au lieu du panneau de configuration Services, mais les deux fonctionnent.) Après cela, j'ai pu relier.
ce qui a fonctionné pour moi était très simple, je devais simplement lancer le service manuellement dans les "Services Windows" (services.msc dans cmd trompt). mon nom de service est: OracleServiceXXXXX.
j'avais également rencontré le même problème et passé 3 jours à le creuser. Cela se produit à cause de votre mauvaise entrée de service TNS. Commencez par vérifier si vous êtes en mesure de vous connecter à la base de données en attente depuis la base de données principale à l’aide de sql> sqlplus sys @ orastand en tant que sysdba (orastand est une base de données en attente). Si vous ne pouvez pas vous connecter, le problème est lié au service. Corrigez l'entrée du nom de service dans le fichier TNS à l'extrémité principale. Vérifiez de la même manière dans la base de données en attente, si nécessaire, apportez les modifications ici aussi. et Assurez-vous que le paramètre log_archive_dest_2 a le nom de service correct.
J'ai eu le même problème, pour moi juste d'écrire
sqlplus myusername/mypassword@localhost
fait le tour, ce faisant, il se connecte au nom de service par défaut je suppose.
Cette erreur peut se produire lorsqu'une application établit une nouvelle connexion pour chaque interaction de base de données ou que les connexions ne sont pas fermées correctement. Un des outils gratuits permettant de surveiller et de confirmer ceci est le développeur Oracle Sql (bien que ce ne soit pas le seul outil que vous pouvez utiliser pour surveiller les sessions de base de données).
vous pouvez télécharger l'outil à partir du site Oracle Sql Developer
voici une capture d'écran de la façon de surveiller vos sessions. (Si vous voyez de nombreuses sessions s'accumuler pour votre utilisateur d'application lorsque l'erreur ORA-12514 est détectée, c'est une bonne indication que vous pouvez avoir un problème de pool de connexions).
J'ai résolu ce problème dans mon environnement linux en mettant à jour l'adresse IP de ma machine dans le fichier/etc/hosts.
Vous pouvez vérifier votre IP réseau (inet end.) Avec:
$ifconfig
Vérifiez si votre adresse IP correspond au fichier/etc/hosts:
$cat /etc/hosts
Editez votre fichier/etc/hosts, si incorporé:
$Sudo gedit /etc/hosts
Au revoir.
Pour ceux qui exécutent Oracle dans un VM (comme moi), j'ai constaté ce problème car mon VM manquait de mémoire, ce qui semble avoir empêché OracleDB de démarrer/s'exécuter. correctement. L'augmentation de ma mémoire VM et le redémarrage ont résolu le problème.
Beaucoup de réponses ici, mais voici un exemple de travail avec du code que vous pouvez copier et coller et tester immédiatement:
Pour moi, l'erreur 12514 a été résolue après avoir spécifié le bon SERVICE_NAME. Vous trouvez cela sur le serveur dans le fichier tnsnames.ora
qui vient avec 3 noms de service prédéfinis (l’un d’eux est "XE").
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Sur les machines 64 bits, écrivez en plus sur HKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
qui ne contient que 4 Mo. une pure DLL gérée qui fonctionne également dans les processus 32 bits et 64 bits et ne dépend d'aucun autre DLL et ne nécessite aucune entrée de registre.utilisant Oracle.DataAccess.Client; ou utilisant Oracle.ManagedDataAccess.Client; .... string oradb = "Source de données = (DESCRIPTION =" + "(ADDRESS_LIST = (ADDRESS =), (PROTOCOL = TCP) (Host = 192.168.1.158) (PORT = 1521)))" ". ____.] + "(CONNECT_DATA = (SERVEUR = DÉDIÉ) (SERVICE_NAME = XE)));" + "ID utilisateur = SYSTÈME; Mot de passe = xxx;"; using (OracleConnection conn = new OracleConnection (oradb)) { conn.Open (); à l'aide de (OracleCommand cmd = new OracleCommand ().) { cmd.Connection = conn; cmd.CommandText = "sélectionnez TABLESPACE_NAME à partir de DBA_DATA_FILES"; en utilisant (OracleDataReader dr = cmd.ExecuteReader ()) { while (dr.Read ()) { listBox.Items.Add (dr ["TABLESPACE_NAME"]); } } } }
Si le SERVICE_NAME=XE
est erroné, vous obtenez l'erreur 12514. Le SERVICE_NAME
est facultatif. Vous pouvez également le laisser de côté.
Vérifiez pour voir la base de données est en place. Connectez-vous au serveur, définissez la variable d’environnement Oracle_SID sur votre SID de base de données et exécutez SQL * Plus en tant que connexion locale.
J'ai eu la même erreur parce que le SID distant spécifié était incorrect:
> sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID
J'ai interrogé la base de données système:
sélectionnez * parmi nom_global;
et a trouvé mon SID distant ("XE").
Ensuite, je pourrais me connecter sans aucun problème.
Dans mon cas, la base de données était à court d'espace disque. Ce qui l'a fait ne pas répondre. Une fois que j'ai éclairci cette question, tout a encore fonctionné.
Mon problème a été résolu en remplaçant l'URL 'ID' dans l'URL par 'nom du service' et l'hôte correct.
Pour moi, cela a été causé par l'utilisation d'une adresse IP dynamique utilisant l'installation. J'ai installé Oracle en utilisant une adresse IP statique, puis tout allait bien
Le redémarrage de la VM a fonctionné pour moi