mardi 17 novembre 2009

Calcul des statistiques

En 10g, le calcul automatique des statistiques est réalisé par un job nommé GATHER_STATS_JOB. Par défaut, ce job est lancé tous les jours entre 22h et 6h. Il permet la mise à jour des statistiques des objets ( tables, index ) ayant subi de nombreuses modifications. Ce traitement est similaire à la procédure DBMS_STATS.GATHER_DATABASE_STATS utilisant l'option GATHER AUTO. Il peut être visualisé dans la vue dba_scheduler_jobs.

En 11g, il est désormais considéré comme une tâche automatique ( autotask ). Sa définition est précisée dans la vue dba_autotask_task. Pour suivre ses exécutions, on peut utiliser cette requête: select * from dba_scheduler_job_log where job_name like 'ORA$AT_OS_OPT_SY_%' order by log_date desc.

La vue dba_tab_modifications permet de voir le nombre de modifications effectuées sur une table depuis le dernier calcul de statistiques.

mardi 3 novembre 2009

Tables externes

Les tables externes constituent une alternative à l'outil sqlloader pour le chargement des fichiers dans une base.

Avant de créer une table externe, on crée un directory où se trouve le fichier à charger:
create or replace directory dir_tracker as 'G:\prototype\donnees';

On peut alors définir la table externe:
create table fic_tracker (
code_isin varchar2(20),
nom_tracker varchar2(120),
date_jb varchar2(10),
cours_ouv number,
cours_plus_haut number,
cours_plus_bas number,
cours_clo number,
volume number
)
organization external (
type oracle_loader
default directory dir_tracker
access parameters (
fields terminated by X'09'
missing field values are null
)
location ( 'TRACKER.txt' )
)
reject limit unlimited;

Puis, on peut charger le fichier dans une table via une simple requête:
insert into tracker
(code_isin, nom_tracker, date_jb, cours_ouv, cours_plus_bas, cours_plus_haut, cours_clo, volume )
select code_isin, nom_tracker, to_date(date_jb, 'DD/MM/YYYY'), cours_ouv, cours_plus_bas,cours_plus_haut, cours_clo, volume
from fic_tracker;

Les fichiers de log, similaires à ceux de sqlloader, se trouvent par défaut dans le directory.

Si nécessaire, le chargement du fichier peut être optimisé en utilisant le hint APPEND ou en augmentant le degré de parallélisation de la table externe et de la table classique.

Pour aller plus loin: http://www.orafaq.com/node/848