J'ai configuré Oracle 12c sur Rhel 7. Lorsque j'essaie de me connecter à la base de données à l'aide de la commande suivante, elle se connecte sans problème:
sqlplus system/Forest123@orcl
Je rencontre un problème lorsque j'essaie de mettre la chaîne de connexion avec hostname
et port
comme indiqué ci-dessous:
sqlplus system/Forest123@localhost:1521/orcl
Une erreur s'est produite est
ORA-12514: TNS: l'écouteur ne connaît pas actuellement le service demandé dans le descripteur de connexion
J'ai parcouru les questions posées auparavant, mais aucune ne m'a aidé à résoudre ce problème.
Voici mon tnsnames.ora
, sqlnet.ora
et listener.ora
des dossiers.
tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = Oracle_12C.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.localdomain)
)
)
listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = Oracle_12C.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
fichier hôtes
127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 Oracle_12C.localdomain Oracle_12C
Étant donné que le message d'erreur suivant signifie que hostname
n'est pas correct et/ou le domaine que vous utilisez.
Comment savoir si tout fonctionne bien ou non? Vous devez exécuter la commande hostname
, disons que la sortie est Oracle_12C
, et exécutez cat /etc/resolve.con
permet de dire le nom de domaine mydomain.com
, vous devez alors modifier /etc/hosts
comme suit
127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 Oracle_12C.mydomin.com Oracle_12C
Notez que si vous utilisez pas le domaine, alors /etc/hosts/
devrait ressembler à ce qui suit
127.0.0.1 localhost
127.0.0.1 localhost.localdomain
127.0.0.1 localhost4
127.0.0.1 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::127.0.0.1 localhost.localdomain localhost
172.31.15.86 Oracle_12C
Passons maintenant à tnsnames.ora
, dans ce fichier, vous devez rechercher la section de votre base de données (dans votre question orcl), remplacez-la comme suit (notez que vous devez effectuer une sauvegarde de ce fichier avant de faire des changements):
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = <hostname as /etc/hosts>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Remarque pour l'hôte si vous avez un doming alors Host = Oracle_12C.mydomain.com
, sinon ça devrait être Host = Oracle_12C
Maintenant, enregistrez le fichier et fermez-le.
Passons ensuite à listener.ora
, faites-en une sauvegarde et modifiez-la comme suit:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = <hostname as /etc/hosts>)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
Redémarrez maintenant votre écouteur en exécutant lsnrctl stop
et lsnrctl start
puis essayez de vous connecter à la base de données en utilisant les commandes suivantes
export Oracle_SID=orcl
sqlplus system/Forest123
Le processus ci-dessous est résolu mon problème.
Connectez-vous au serveur à l'aide de la commande sqlplus/as sysdba
vérifiez si l'écouteur local existe ou non en utilisant la commande SQL> show parameter local_listener. Pour moi, la valeur local_listener est vide
définissez l'écouteur dynamiquement en utilisant SQL> alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP) (Host = LOCALHOST) (PORT = 1521))' scope = both; command
Enregistrez-vous ensuite à l'aide de la commande alter SQL> alter system register;
Vérifiez maintenant si l'écouteur est ajouté ou non SQL> show parameter local_listener. L'écouteur est maintenant ajouté avec succès avec Value = (ADDRESS = (PROTOCOL = TCP) (Host = LOCALHOST) (PORT = 1521))
Après avoir ajouté un écouteur local, je peux me connecter avec succès.
Assurez-vous que votre hôte doit être 0.0.0.0 dans listener.ora et tnsnames.ora.
Vous devez également enregistrer votre SID_name dans listner.ora comme mentionné ci-dessous. par exemple, si votre SID_NAME est ORCLCDB, listener.ora devrait ressembler à ceci.
# listener.ora Network Configuration File: /opt/Oracle/product/18c/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCLCDB)
(Oracle_HOME = /opt/Oracle/product/18c/dbhome_1)
(SID_NAME = ORCLCDB)
)
)
Le fichier tnsnames.ora devrait ressembler à ceci.
# tnsnames.ora Network Configuration File: /opt/Oracle/product/18c/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCLCDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLCDB)
)
)
LISTENER_ORCLCDB =
(ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
Ci-dessous a fonctionné pour moi:
services.msc
OracleOraDB12Home1TNSListener
et OracleServiceORCL
Après cela, connecté à l'aide du développeur SQL. Ça a marché!