web-dev-qa-db-fra.com

ORA-12514: TNS: l'écouteur ne connaît pas actuellement le service demandé dans le descripteur de connexion sur Linux

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
2
Abhaya Ghatkar

É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
2
Ahmad Abuhasna

Le processus ci-dessous est résolu mon problème.

  1. Connectez-vous au serveur à l'aide de la commande sqlplus/as sysdba

  2. 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

  3. définissez l'écouteur dynamiquement en utilisant SQL> alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP) (Host = LOCALHOST) (PORT = 1521))' scope = both; command

  4. Enregistrez-vous ensuite à l'aide de la commande alter SQL> alter system register;

  5. 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))

  6. Après avoir ajouté un écouteur local, je peux me connecter avec succès.

1
prasadg

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))
1
Prateek Sen

Ci-dessous a fonctionné pour moi:

  • Services vérifiés à l'aide de services.msc
  • Redémarrage des services OracleOraDB12Home1TNSListener et OracleServiceORCL

Après cela, connecté à l'aide du développeur SQL. Ça a marché!

1
user188304