lundi 21 mai 2007

Recupérer le résultat d'une requête SQL dans un script Shell

Salut,

aujourd'hui c'est plutôt une astuce.

Ce script est simple, et ça peut être très utile.

Donc, il suffit de copier ce texte dans un fichier .sh et de modifier le login/pass, ainsi que la requête (le select ou autre :-) ) , et enfin le echo final à modifier à votre convenance.


#! bash

# ----------------------------------------
# fonction appelle contenant la requete
# prend en param la requete et login/pass
# ----------------------------------------
read_sql_stmt() {
typeset stmt=$1
typeset login=$2

echo "
set feedback off verify off heading off pagesize 0
$stmt;
exit
" | sqlplus -s $login
}

# -----------------------------------------------
# Appel de la fonction (pour executer la requete
# et traitement du resultat, affichage
# -----------------------------------------------
read_sql_stmt "select username, user_id from dba_users" "system/password" | while read u i
do
echo "user $u has userid $i"
done

dimanche 20 mai 2007

Tuning simple de requête : Visualiser les plans d'execution

Les plans d'excution (explain plan) représentent toutes les étapes réalisé par le software Oracle pour éxecuter votre requête. C'est en quelque sorte sa feuille de route.

Pour afficher le plan d'execution des requetes, il suffit de parametrer sa session en executant la commande suivante :

set autot trace EXPLAIN stat


Ensuite toutes les requetes vont afficher leur plan d'execution ainsi que de precieuses informations comme le nombre d'appels récursifs, le nombre de lecture physiques, logiques, la taile des data envoyé au client, etc ...

Ces statistiques permettent de détecter rapidement les problèmes qui pourraient ralentir votre requete. C'est la première étape pour faire du tuning de requête.

Un petit exemple :

Nous executons la requete suivante : select * from v$database;



Nous obtenons le plan d'execution avec en dessous ses statistiques.
Dans le tableau, nous pouvons voir toutes les etapes, executé de bas vers le haut :
  1. parcourt d'une table X$KCCDI2 entièrement : 100 lignes, le cout de 0
  2. trie de ces lignes
  3. parcourt de la table entiere X$KCCDI de 1 ligne
  4. jointure de ces 2 groupes de data provenant des tables ci-dessus
  5. select final des champs voulu

Bon, c'est un select *, donc pas tres explicite, mais c'est ici que l'on peut voir le parcourt des index, si la requete parcourt toute la table ou seulement quelques lignes grace aux index, les group by ...

Dans la seconde partie, les statistiques, l'affichage est assez explicite, on visualise directement les valeurs incoherentes (ici aucunes :-).

samedi 19 mai 2007

Oracle ToolBar

Salut,

pour ceux qui ne connaissent pas encore la toolbar d'Oracle, vous la trouverez ici :
http://www.oracle.com/technology/toolbar/install/index.html

Elle est dispo seulement sous ie :-(

Espérons qu'Oracle se décide à la porter sous firefox.

@+

Présentation ...

Salut a tous,

j'ai décidé de créer mon blog sur Oracle. Je suis DBA Junior depuis peu, et je publierai des articles sur tous ce que je pense interessant.

Il me servira aussi un peu comme un pense bête :-)

Voila, il reste plus qu'a rentrer dans le vif du sujet.

N'hésitez pas à poster des commentaires si vous avez des astuces ou des remarques ...