J'ai installé Oracle Database 11gR2 ainsi que Oracle Grid Infrastructure sur une machine Linux, puis j'ai créé la base de données orcl
.
J'ai toujours été capable de me connecter à ma base de données avec SQL * Plus ou OEM. Mais dernièrement, je rencontre un problème lorsque je tape la commande lsnrctl status
. Je ne parviens donc pas à me connecter à la base de données.
Mon fichier listener.ora
:
# listener.ora Network Configuration File: /u01/app/Oracle/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(Host = pc.company.com)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/Oracle
Mon fichier tnsnames.ora:
# tnsnames.ora Network Configuration File: /u01/app/Oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = pc.company.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
)
En tapant lsnrctl status
, j'obtiens ce qui suit:
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 21-JUL-2014 03:35:48
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(Host=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 21-JUL-2014 03:25:58
Uptime 0 days 0 hr. 9 min. 50 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/Oracle/diag/tnslsnr/pc151/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=pc.company.com)(PORT=1521)))
The listener supports no services
The command completed successfully
En tapant sqlplus / as sysdba
puis startup
, j'obtiens ceci:
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATA/orcl/spfileorcl.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/orcl/spfileorcl.ora
ORA-29701: unable to connect to Cluster Synchronization Service
Et la commande srvctl start database
ne parvient pas non plus à démarrer la base de données.
Mon fichier oratab
est le suivant:
#Backup file is /u01/app/Oracle/product/11.2.0/dbhome_1/srvm/admin/oratab.bak.pc150 line added by Agent
#
# This file is used by Oracle utilities. It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
# $Oracle_SID:$Oracle_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $Oracle_SID are not allowed.
#
#
+ASM:/u01/app/Oracle/product/11.2.0/grid:N
orcl:/u01/app/Oracle/product/11.2.0/dbhome_1:N # line added by Agent
La base de données enregistre son ou ses noms de service auprès de l'écouteur lors de son démarrage. S'il ne peut pas le faire, il essaie de nouveau périodiquement. Par conséquent, si l'écouteur démarre après la base de données, il peut s'écouler un délai avant que le service ne soit reconnu.
Cependant, si la base de données n'est pas en cours d'exécution, le service n'a pas été enregistré. Vous ne devez donc pas vous attendre à ce que l'écouteur en soit informé: lsnrctl status
ou lsnrctl services
ne signalera pas un service qui n'est pas encore enregistré.
Vous pouvez démarrer la base de données sans le listener. à partir du compte Oracle et avec vos ensembles Oracle_HOME
, Oracle_SID
et PATH
, vous pouvez effectuer les opérations suivantes:
sqlplus /nolog
Ensuite, à partir de l'invite SQL * Plus:
connect / as sysdba
startup
Ou, via l’infrastructure de grille, à partir du compte de grille, utilisez la commande srvctl start database
:
srvctl start database -d db_unique_name [-o start_options] [-n node_name]
Vous voudrez peut-être vérifier si la base de données est configurée pour démarrer automatiquement dans votre fichier oratab
et selon ce que vous utilisez si elle aurait dû démarrer automatiquement. Si vous vous attendez à ce qu'il fonctionne et si ce n'est pas le cas, ou si vous essayez de le démarrer sans que cela ne se produise, il s'agit d'un scénario totalement différent: vous devez consulter les messages d'erreur, le journal des alertes, éventuellement, tracez des fichiers, etc. pour voir exactement pourquoi cela ne démarre pas, et si vous ne pouvez pas le comprendre, demandez peut-être à Database Adminsitrators plutôt qu'à Stack Overflow.
Si la base de données ne peut pas voir +DATA
, il est possible que ASM ne soit pas en cours d'exécution; vous pouvez voyez comment commencer ici ; ou en utilisant srvctl start asm
. Comme le dit la documentation, assurez-vous de le faire à partir de la base de la grille, pas de la base de données.
Vous devez ajouter votre définition Oracle_HOME
dans votre fichier listener.ora. Pour l'instant, ce n'est pas enregistré avec aucun Oracle_HOME
.
Exemple listener.ora
abc =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = abc.kma.com)(PORT = 1521))
)
)
SID_LIST_abc =
(SID_LIST =
(SID_DESC =
(Oracle_HOME= /abc/DbTier/11.2.0)
(SID_NAME = abc)
)
)
Vérifiez la définition de local_listener dans votre fichier spfile ou pfile. Dans mon cas, le problème venait du pfile, j'avais déplacé le pfile d'un environnement similaire et il avait LISTENER_sid comme LISTENER et pas seulement LISTENER.
pour les services d'écoute, aucun service, vous pouvez utiliser la commande suivante pour définir le paramètre local_listener dans votre spfile, utiliser votre port d'écoute et l'adresse IP du serveur
alter system set local_listener = '(DESCRIPTION = (ADRESSE = (PROTOCOL = tcp) (hôte = 192.168.1.101) (PORT = 1520)))' sid = 'testdb' scope = spfile;
vous devez reconfigurer votre tnsnames.ora afin qu’il puisse pointer sur votre nom d’hôte après que cet écouteur sera en mesure de choisir le nouveau nom d’hôte. Après quoi, vérifiez l’état de votre statut lsnrctl de l’écouteur et lancez l’écouteur lsnrctl start puis enregistrez votre écouteur. Modifier le registre du système