dimanche 13 août 2017

L'erreur ORA-12547: TNS:lost contact dans un environnement RAC

Dans mon environnement de test RAC composé d'un serveur "dns12c" qui joue les roles DNS et DHCP et de deux noeuds, "rac1" et "rac2", j'ai décidé d'ajouter un troisième noeud "rac3". Au début, tous fonctionnait très bien mais à la fin l'instance cdb1_3 refusait de démarrer. La cause du problème était l'erreur  :

ORA-12547: TNS:lost contact

Système : Oracle Linux 7.3
Base de données : Oracle 12c

Erreur :
[oracle@rac3 rdbms]$ srvctl start instance -db cdb1 -instance cdb1_3
PRCR-1013 : Failed to start resource ora.cdb1.db
PRCR-1064 : Failed to start resource ora.cdb1.db on node rac3
ORA-12547: TNS:lost contact
CRS-5017: The resource action "ora.cdb1.db start" encountered the following error:
ORA-12547: TNS:lost contact
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/rac3/crs/trace/crsd_oraagent_oracle.trc".

CRS-2674: Start of 'ora.cdb1.db' on 'rac3' failed
ORA-12547: TNS:lost contact

Après quelques recherches sur le site du support oracle et en consultant la note : 
Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1)
la cause du problème a été détecté. Il s'agit d'un problème de permission sur le répertoire oracle.

Cause:
[root@rac3 ~]# cd /u01/app/oracle/
[root@rac3 oracle]# ls -l
total 16
drwx------.  3 oracle oinstall 4096 Aug  6 14:30 admin
drwxr-x---.  3 oracle oinstall 4096 Aug  6 17:46 cfgtoollogs
drwxrwxr-x. 19 oracle oinstall 4096 Aug  6 15:14 diag
drwxrwxr-x.  3   1000 oinstall 4096 Aug  5 10:34 product

Solution:

[root@rac3 oracle]# chown -R oracle:oinstall product/

Problème résolu.

samedi 2 juillet 2016

Liste des utilisateurs Oracle qui utilisent encore le mot de passe par défaut

Pour afficher la liste des utilisateurs de la base de données Oracle qui utilisent encore le mot de passe par défaut, ce qui représente un risque élevé que n’importe quel DBA doit éviter, la requête suivante peut être utilisée :
select u.user_id, df.username, u.account_status
from dba_users_with_defpwd df, dba_users u
where df.username = u.username
and u.account_status = 'OPEN'
order by 2;
Dans le cas ou la requête renvoie un résultat, il faut soit modifier les mots de passe ou bien verrouiller les comptes:
alter user <nom utilisateur> identified by <Nouveau mot de passe>;
alter user <nom utilisateur> account lock;