Petite astuce pour Oracle et ses problèmes de mémoire sous Linux !
Salut à tous,
Et surtout bon début de semaine ! Je vous partage aujourd’hui un petit « truc », rien de bien fou, mais ça peut toujours servir, surtout si vous utilisez oracle !
Bon en réalité ça ne concerne pas tout le monde, mais surtout les personnes qui seraient confronté à ce genre d’erreur :
ORA-00845: MEMORY_TARGET not supported on this system
ORA-27102: out of memory
ORA-27101: shared memory realm does not exist tips
Bon d’une part quelques petites pistes de réflexion … qui peut être, en avançant « pas à pas », vous aiderons à résoudre vos différents soucis ;)
Etape 1 :
Faites un petit df -h et voyez l’espace alloué à tmpfs :
Filesystem Size Used Avail Use% Mounted on tmpfs 2,0G 259M 1,8G 13% /dev/shm
Etape 2 :
Controlez depuis votre utilisateur oracle les variables d’env
echo $ORACLE_HOME
echo $ORACLE_SID
ORACLE_HOME, doit être le chemin vers votre Base de donnée, et ORACLE_SID, doit être le nom de celle-ci.
Je vous invite donc à controler que ORACLE_HOME existe déjà bel et bien :
Ensuite nous allons contrôler que la correspondance entre le retour des variables et le fichier /etc/oratab
Donc si vous avez été attentif au début, vous devriez trouver la correspondance avec le contenu des variables
$ORACLE_SID : $ORACLE_HOME : Y/N
Si tout est ok au niveau des variables et de la configuration vous êtes bon !!!!
Passons maintenant à l’étape 3 !
Etape 3 :
On va contrôler l’espace mémoire « partagée » qui est configurée :
avec cette petite commande :
strings $ORACLE_HOME/dbs/spfileorcl.ora | grep memory
/!\ N’allez pas modifier le fichier spfileorcl.ora avec un éditeur de texte !
Ci-dessus le retour de ma commande.
On m’indique ici que ma base de donnée a besoin de 400 Mo d’espace « Mémoire Partagée »
Je vous invite dans cette partie de ce « tutoriel » à faire le rapprochement avec l’etape 1.
Si la mémoire partagée configurée dans votre base est supérieur à celle configurée sur votre machine, le problème vient de là !
Etape 4 :
Une petite étape intermédiaire qui n’est pas à négligé, ici nous allons contrôler les droits d’accès à la mémoire partagé ….
ls -l /dev | grep shm
En jaune j’ai indiqué les droits sur « shm »
Vous devez donc mettre les droits de votre utilisateur oracle et ceux de son groupe
Ici notre utilisateur oracle c’est « oracle » et son groupe c’est « oinstall »
Dans mon cas, les droits sont bon.
Si dans le votre, ça n’est pas le ca, vous devrez mettre les droits à shm de la manière suivante :
chown -R oracle:oinstall /dev/shm
Etape 5 :
Ensuite, nous allons modifier le fichier « /etc/fstab »
Vous y rechercherez la ligne qui correspond à tmpfs.
Une fois trouvé, indiquez l’attribut « size » en indiquant une valeur supérieur à memory_target
(Dans le cas ci-dessous, j’avais indiqué 2G => 2 Giga)
Pour plus de sérénité, ajoutez y l’user id et le groupe id que vous pouvez récupérer ainsi (si vous avez suivi l’étape 4)
stat /dev/shm
Illustration de l’ajout du uid et du gid dans le fichier de conf (fstab)
Une fois ce fichier mis à jour, il ne vous reste plus qu’a redémarrer votre machine, pour controler que tous les montages se font sans problème (grosso merdo, que vous n’avez rien cassé)
reboot
Etape 6 :
Enfin et pour terminer, il ne vous reste plus qu’a redémarrer oracle avec les commandes suivantes (et toujours connecté avec l’utilisateur « oracle » )
sqlplus « /as sysdba »
SQL >> shutdown abort
SQL >> startup
Conclusion :
Les erreur de mémoire d’oracle sont souvent dues à :
- Un problème de droit
- Un problème de chemin
- Un problème de taille