Dyrk.org - Do You Really Know

Petite astuce pour Oracle et ses problèmes de mémoire sous Linux !

Publié le 3 août 2015 par #Ro0t

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

Capture

 

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 :

Capture

 

Ensuite nous allons contrôler que la correspondance entre le retour des variables et le fichier /etc/oratab

 

Capture

 

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 !

 

Capture

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

Capture

En jaune j’ai indiqué les droits sur « shm »

Vous devez donc mettre les droits de votre utilisateur oracle et ceux de son groupe

Capture

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)

Capture

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

 

Capture

 

Illustration de l’ajout du uid et du gid dans le fichier de conf (fstab)

 

Capture

 

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

 

Capture

 

 

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