Skip to main content
Enterprise applications
La version française est une traduction automatique. La version anglaise prévaut sur la française en cas de divergence.

Les verrous NFSv3 et les bases de données Oracle obsolètes

Contributeurs

Si un serveur de base de données Oracle tombe en panne, des verrous NFS obsolètes peuvent se présenter au redémarrage. Ce problème peut être évité en portant une attention particulière à la configuration de la résolution de nom sur le serveur.

Ce problème survient parce que la création d'un verrou et l'effacement d'un verrou utilisent deux méthodes légèrement différentes de résolution de nom. Deux processus sont impliqués, Network Lock Manager (NLM) et le client NFS. Le NLM utilise uname n pour déterminer le nom d'hôte, pendant que le système rpc.statd utilisations des processus gethostbyname(). Ces noms d'hôte doivent correspondre pour que le système d'exploitation efface correctement les verrous obsolètes. Par exemple, l'hôte peut rechercher des verrous appartenant à dbserver5, mais les verrous ont été enregistrés par l'hôte comme dbserver5.mydomain.org. Si gethostbyname() ne renvoie pas la même valeur que uname –a, le processus de déverrouillage n'a pas réussi.

L'exemple de script suivant vérifie si la résolution des noms est parfaitement cohérente :

#! /usr/bin/perl
$uname=`uname -n`;
chomp($uname);
($name, $aliases, $addrtype, $length, @addrs) = gethostbyname $uname;
print "uname -n yields: $uname\n";
print "gethostbyname yields: $name\n";

Si gethostbyname ne correspond pas uname, des verrous obsolètes sont probables. Par exemple, ce résultat indique un problème potentiel :

uname -n yields: dbserver5
gethostbyname yields: dbserver5.mydomain.org

La solution est généralement trouvée en modifiant l'ordre dans lequel les hôtes apparaissent dans /etc/hosts. Par exemple, supposons que le fichier hosts inclut l'entrée suivante :

10.156.110.201  dbserver5.mydomain.org dbserver5 loghost

Pour résoudre ce problème, modifiez l'ordre dans lequel le nom de domaine complet et le nom d'hôte court apparaissent :

10.156.110.201  dbserver5 dbserver5.mydomain.org loghost

gethostbyname() renvoie maintenant le court dbserver5 nom d'hôte, qui correspond à la sortie de uname. Les verrous sont donc effacés automatiquement après une panne de serveur.