Considérations de mémoire sous Linux

Tuning

La question qui se pose régulièrement lors du réglage des instances Oracle est comment est gérée la mémoire sous Linux et plus généralement, de combien de mémoire puis-je disposer pour mon instance ( mes instances ? ). En effet, la littérature est assez peu fournie sur la métrologie de la mémoire sous linux et on se retrouve souvent avec des données incompréhensibles. C’est notamment le cas de la commande free, qui peut très bien afficher un espace libre de 0, en permanence, sans que cela ne porte à conséquences ni que cela ne reflète la réalité.

(suite…)

Effacer des vieux fichiers

Une commande de base qu’on oublie tout le temps

La commade pour effacer les fichiers de plus de 3 jours d’une sous arborescence.

find . -mtime +3 -exec rm {} \;

Utile pour purger les fichers d’uadit par exemple
C’était pourtant pas si compliqué

Passer un processus déjà actif en nohup

C’est la commande disown sous Linux ou HP-UX qui s’occupe d’effectuer ce travail:

process_long

[ctrl+z]

bg

ps
   PID TTY         TIME CMD
 25098 pts/1       0:00 sh
 25549 pts/1       0:00 ksh
  9605 pts/1       0:00 ps
 25099 pts/1       0:00 process_long

disown -h 25099

Si le processus ne répond pas à [ctrl+z] on peut, à partir d’une autre session effectuer un ps aux pour récupérer son PID et ensuite faire un kill -20 PID suivi d’un kill -18 PID.

Kill -20 a pour effet de stopper le processus
Kill -18 a pour effet de le relancer en tâche de fond

Et si on n’est ni sous Linux, ni sous HP-UX ?
Pour Solaris et AIX la commande nohup -p fait la même chose que disown, le reste fonctionne.

C’était pourtant pas si compliqué

Installer et configurer linux pour se connecter à Oracle avec PHP

Il existe une multitude de moyens pour développer des applications PHP pour Oracle, si vous souhaitez ensuite les mettre à disposition facilement c’est une autre histoire, à moins bien sûr de les livrer sous forme de machines virtuelle.

Cet article décrit pas à pas la démarche qui vous permettra de configurer une machine virtuelle Centos7 contenant un serveur Apache/PHP capable de se connecter à une base Oracle distante.

(suite…)

Créer un LV sous linux en utilisant le mapper

Disclamer !

Tout les admin sys et autres BOFHs connaissent ça par coeur… Pour le moment j’ai besoin d’un(e) aide mémoire.

Ce que je fais

Je crée un FS de 10 go à partir d’un volume groupe qui s’appelle root_vg afin d’intaller mon tout nouveau moteur oracle flambant neuf …

La démarche à suivre, donc, brute de fonderie

Je prépare le terrain

mkdir /opt/oracle/12.1.0.2

Je crée un volume logique (LV) de 10 Go

lvcreate -L 10G -n lv_ora12102 root_vg

Je crée un système de fichier (FS) à partir du LV

mkfs -t ext4 /dev/mapper/root_vg-lv_ora12102

La commande lvs (qui liste les LV) montre que le fs n’a pas encore le petit ‘o’ qui indique qu’on peut l’utiliser … En gros il n’est pas monté.

lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
[...]
lv_ora12102 root_vg -wi-a---- 10.00g
[...]

Je lance donc la commande mount pour relier le FS à son point de montage (les fichiers /etc/fstab et /etc/mtab sont renseignés)

mount -t ext4 /dev/mapper/root_vg-lv_ora12102 /opt/oracle/12.1.0.2

Je relance lvs pour vérifier la présence du petit ‘o’ …

lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
[...]
lv_ora12102 root_vg -wi-ao--- 10.00g
[...]

Je donne les droits qui vont bien au FS nouvellement créé.

chown oracle:oinstall /opt/oracle/12.1.0.2

Ça y est, j’ai fini, je peux installer un moteur Oracle sur le FS.

Installer Oracle Instant Client sur Ubuntu

L’Instant Client, permet la connexion à Oracle passer par la mise en place d’un moteur ou d’un client lourd. Son installation est au départ prévue pour RHEL, Suze ou Unbreakable Linux mais l’installation peut se faire sur d’autres plateformes. Il y a là assez peu de problématiques à surmonter mais tout de même un ou deux détails à mettre en œuvre.

Dans un premier temps il convient d’installer libaio qui est requis pour le bon fonctionnement du client.

root@ojoly # apt-get install libaio1

Ensuite il faut télécharger les fichiers rpm du logiciel en tant que tel sur le site d’Oracle (ce qui requiert un compte OTN). Il faut bien évidemment accepter la licence et télécharger le ou les packages requis (personnellement j’aime bien SQL*Plus, je télécharge donc SQL*plus avec) ce qui me fait 2 packages :

  • oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm
  • oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm

(suite…)

crs_stat -t c’est pas toujours cool

Un petit script piqué à Jeff Hunter (www.ideveloppement.info) et un poil modifié afin d’obtenir l’état de toutes les ressources du Cluster. Plus sympa à lire qu’un crs_stat -t.

#!/bin/ksh

QSTAT=-u
AWK=/usr/bin/nawk

# +----------------------------------------------------------------------------+
# | TABLE HEADER |
# +----------------------------------------------------------------------------+

$AWK
'BEGIN {printf "%-45s %-10s %-18sn", "HA Resource", "Target", "State";
printf "%-45s %-10s %-18sn", "-----------", "------", "-----";}'

# +----------------------------------------------------------------------------+
# | TABLE BODY |
# +----------------------------------------------------------------------------+

$ORA_CRS_HOME/bin/crs_stat $QSTAT | $AWK
'BEGIN { FS="="; state = 0; }
$1~/NAME/ {appname = $2; state=1;}
$1~/TARGET/ && state == 1 {apptarget = $2; state=2;}
$1~/STATE/ && state == 2 {appstate = $2; state=3;}
state == 3 {printf "%-45s %-10s %-18sn", appname, apptarget, appstate; state=0;}
state == 0 {next;}'

Résultat :

HA Resource                                   Target     State
----------- ------ -----
ora.TESTRAC.TESTRAC1.inst ONLINE ONLINE on rac01
ora.TESTRAC.TESTRAC2.inst ONLINE ONLINE on rac02
ora.TESTRAC.db ONLINE ONLINE on rac02
ora.TOTO.TOTO1.inst ONLINE ONLINE on rac01
ora.TOTO.TOTO2.inst ONLINE ONLINE on rac02
ora.TOTO.db ONLINE ONLINE on rac02
ora.rac01.ASM1.asm ONLINE ONLINE on rac01
ora.rac01.ASM_LIST_rac01.lsnr ONLINE ONLINE on rac01
ora.rac01.gsd ONLINE ONLINE on rac01
ora.rac01.ons ONLINE ONLINE on rac01
ora.rac01.vip ONLINE ONLINE on rac01
ora.rac02.ASM2.asm ONLINE ONLINE on rac02
ora.rac02.ASM_LIST_rac02.lsnr ONLINE ONLINE on rac02
ora.rac02.gsd ONLINE ONLINE on rac02
ora.rac02.ons ONLINE OFFLINE
ora.rac02.vip ONLINE ONLINE on rac02

Le script original auquel il faut passer en paramètre le nom de la ressource de laquelle on souhaite avoir l’état :

#!/bin/ksh

# +----------------------------------------------------------------------------+
# | Jeffrey M. Hunter |
# | jhunter@idevelopment.info |
# | www.idevelopment.info |
# |----------------------------------------------------------------------------|
# | Copyright (c) 1998-2008 Jeffrey M. Hunter. All rights reserved. |
# |----------------------------------------------------------------------------|
# | DATABASE : Oracle |
# | FILE : rac_crs_stat |
# | CLASS : UNIX Shell Scripts |
# | PURPOSE : This KSH script will query all CRS resources using the crs_stat |
# | script. The report will be a formatted version of the |
# | crs_stat -t command, but in tabular form with resource name |
# | and status. Filtering options are available by passing in a |
# | single string parameter to this script. This argument will be |
# | used to limit the output to HA resources whose names match |
# | that string. |
# | USAGE : rac_crs_stat.ksh [RESOURCE_KEY] |
# | NOTE : This script requires the environment $ORA_CRS_HOME to be set to |
# | your CRS installation. |
# | NOTE : As with any code, ensure to test this script in a development |
# | environment before attempting to run it in production. |
# +----------------------------------------------------------------------------+

# +----------------------------------------------------------------------------+
# | GLOBAL VARIABLES |
# +----------------------------------------------------------------------------+

RSC_KEY=$1
QSTAT=-u
AWK=/usr/bin/awk

# +----------------------------------------------------------------------------+
# | TABLE HEADER |
# +----------------------------------------------------------------------------+

$AWK
'BEGIN {printf "%-45s %-10s %-18sn", "HA Resource", "Target", "State";
printf "%-45s %-10s %-18sn", "-----------", "------", "-----";}'

# +----------------------------------------------------------------------------+
# | TABLE BODY |
# +----------------------------------------------------------------------------+

$ORA_CRS_HOME/bin/crs_stat $QSTAT | $AWK
'BEGIN { FS="="; state = 0; }
$1~/NAME/ && $2~/'$RSC_KEY'/ {appname = $2; state=1};
state == 0 {next;}
$1~/TARGET/ && state == 1 {apptarget = $2; state=2;}
$1~/STATE/ && state == 2 {appstate = $2; state=3;}
state == 3 {printf "%-45s %-10s %-18sn", appname, apptarget, appstate; state=0;}'