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