Une après-midi avec Tom Kyte

meetup_logo-500x370

Le groupe Paris Oracle Meetup, animé entr’autres par Gregory Guillou (plus connu sous le pseudonyme de ArKZoYD ) propose une rencontre avec Tom Kyte l’après midi du 12 décembre à Nanterre. Il y abordera les nouveautés de la version 12.1.0.2 et bien sûr un certain nombre de bonnes pratiques SQL et PL/SQL. Il faut s’inscrire pour s’y rendre mais l’évènement est gratuit, il reste encore quelques places et il sera suivi d’une session de questions réponses avec Tom Kyte.

Une bonne occasion de rejoindre le groupe Paris Oracle Meetup et de participer à de rencontrer d’autres passionnés des applications Oracle.

Dernier détail et non des moindres, c’est en anglais, on s’en doutait mais ça va mieux en le disant.

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…)

Oracle In Memory Database (12.1.0.2.0)

Vous pouvez dès maintenant télécharger la nouvelles version d’Oracle 12c, sobrement numérotée 12.1.0.2.0, mais en la téléchargeant vous ouvrez la porte sur une nouvelle fonctionnalité de taille: Oracle In Memory DataBase (IMDB).

L’argument marketting passé, on se dit qu’Oracle n’est pas la seule base à fournir du In memory et pour cause, SAP Hana, MS SQL Server, PostGreSQL et bien d’autres le proposent depuis déjà quelques temps.
(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…)

Les statistiques épisode: 1: où les trouver

Depuis … Poulala, oracle s’appuie sur des statistiques plutôt que sur l’heuristique1 pour optimiser ses plans d’exécution. De version en version, les statistiques dont dispose Oracle s’étoffent offrant ainsi à oracle de plus en plus d’informations sur les données stockées en base.

Les statistiques sont essentiellement stockées au niveau du dictionnaire de donnée dans les tables décrivant les divers segments qu’oracle est capable de manipuler mais elles peuvent aussi être calculées à la volée et sur échantillonnage. Elles sont utilisée entre autre par l’optimiseur de requête d’Oracle lorsqu’il analyse une requête dans le but de produire un2 plan d’exécution efficace dans un temps raisonnable3.

A partir de ces statistiques, oracle associe un coût à un texte SQL par un algorithme complexe et amélioré à chaque nouvelle version d’Oracle qui a été décortiqué pour certaines d’entre elles par l’éminent Jonatan Lewis dans le très vendu et encore plus lu Cost Based Oracle fundamentals lui même rédigé en langue de Shakespeare et malheureusement resté jusqu’à ce jour sans traduction française. Cet ouvrage donne une formule qui permet de calculer certains coûts à partir des statistiques Oracle, reste encore à savoir où les trouver et sur ce dernier point c’est aux table de la liste suivante (et plus particulièrement les vertes qu’il conviendra de s’intéresser. (suite…)

AWR en 11gR2, bogue lié au changement de valeur de control_management_pack_access

Dans le post précédent je me suis trouvé confronté au souci suivant: le passage du paramètre control_management_pack_access de NONE à DIAGNOSTIC+TUNING sur Linux ne déclenchait pas toutes les collectes de statistiques nécessaires au bon établissement d’un rapport AWR et ce malgré le caractère dynamique dudit paramètre.

Deux contournements m’ont été proposés par le support :

  1. Redémarrer la base (SIC!)
  2. Ou manuellement Alimenter les tables dont les données ne sont pas collectées à l’aide des scripts suivants :

(suite…)

AWR en 11gR2 me dit “No data exists for this section of the report”

Franchement quel vilain cet AWR… Non ? Me faire ça à moi, No data exists for this section of the report, n’ai je donc tant administré de bases que pour cette infamie ? Un peu de respect que diable !!!

Pourtant j’ai vérifié statistics_level est bien positionné à ‘TYPICAL’ et il y a des clichés dans dba_hist_snapshot

SQL> select snap_id
  2       , to_char(end_interval_time,'YY/MM/DD HH24:MI:SS') EIT
  3  from dba_hist_snapshot
  4   where end_interval_time > trunc(sysdate)
  5  order by 1
  6  /

(suite…)

Oracle 12c est sortie … heuu et alors ?

On l’attend plus au moins depuis une bonne année, cette fois ça y est, les premières versions publiques sont sorties et disponibles sur le site d’oracle à leur emplacement habituel (downloads, oracle database … oui j’accepte les conditions d’usage et hop je télécharge pour peu que je sois membre d’OTN sur lequel l’inscription n’engage à rien.) Donc Oracle Database 12c c’est ici que ça se passe.

Que retenir de cette sortie ?

Vu de ma fenêtre peu de choses vont bouleverser la 12c ne va pas chambouler le monde de la base de données d’ici la fin de l’année ni dans les deux ou trois prochaines années simplement parce que les progiciel ne vont pas être validés sur cette version en deux jours (ni deux mois) et que deux ou trois modifications de code incitent à la prudence.

(suite…)

PCT COST ? Comment 7271 peut-il représenter 0% de 2 ?

Si on effectue une requête SQL et que l’on demande l’affichage de son plan d’exécutio par défaut on obtient le coût individuel de chaque action, ainsi un parcours complet de table ou d’index est associé à un coût global associé à son pourcentage de coût CPU et c’est là que ça se complique un poil. En effet, si on interroge directement les tables ou les vues du dictionnaire la relation en le contenu de la colonne CPU_COST des tables contenant les plans d’exécution rapportée à la colonne COST contenant le coût global de la l’action, on est loin de trouver un rapport quelconque avec le pourcentage affiché.

select * from sys.dual ;

D
-
X

select * from table(dbms_xplan.display_cursor()) ;

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  cps942q7r3w9m, child number 0
-------------------------------------
select * from sys.dual

Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |       |       |     2 (100)|          |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------


13 rows selected.

l
  1  select id
  2       , lpad(' ',DEPTH)||OPERATION||' '||OPTIONS operation
  3       , OBJECT_NAME NAME
  4       , CARDINALITY "ROWS"
  5       , BYTES
  6       , COST
  7       , CPU_COST
  8       , IO_COST
  9  from v$sql_plan
 10* where plan_hash_value=272002086
/

        ID OPERATION            NAME  ROWS  BYTES  COST   CPU_COST    IO_COST
---------- -------------------- ---- ----- ------ ----- ---------- ----------
         0 SELECT STATEMENT                           2
         1  TABLE ACCESS FULL   DUAL     1      2     2       7271          2

(suite…)