par , 17/04/2020 à 11h40 (354 Affichages)
DBMS_STATS
On me demande toujours comment calculer les statistiques sur une table. Voilà :
1 2 3 4 5 6 7 8 9
| begin
DBMS_STATS.GATHER_TABLE_STATS (
ownname => 'xxx',
tabname => 'ma_table',
CASCADE => TRUE,
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all indexed columns size auto'
);
end; |
Le problème est que cela marche bien dans 95% des cas. J'ai réussi à me faire coincer par un projet où il n'avait qu'une seule colonne indexée (par un seul index donc)(et même pas une PK). Il faut alors lancer plus de statistiques sur toutes les colonnes, ce que l'on fait rarement car le temps de calcul peut être long. Mais bon, pas d'autre solution dans notre cas :
1 2 3 4 5 6 7 8 9
| begin
DBMS_STATS.GATHER_TABLE_STATS (
ownname => 'xxx',
tabname => 'ma_table',
CASCADE => TRUE,
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size auto'
);
end; |
La vie est mal faite parfois.
Listener Oracle
Démarrer et stopper le listener Oracle :
1 2 3
| lsnrctl start
lsnrctl stop |
C'est une manipulation basique mais j'oublie tout le temps la syntaxe "lsnrctl"
Tracer les sessions Oracle
Un petit problème survient quand vous souhaitez tracer le SQL (sous Oracle) sans arrêter la base de données d'une application. Facile, vous êtes capables maintenant avec les nouvelles versions d'Oracle de faire un trigger de type after logon.
Un petit trigger système pour tracer toutes les connexions :
1 2 3 4 5 6 7 8 9 10 11
|
create or replace trigger trg_enable_trace_at_logon
after logon
on database
begin
execute immediate 'alter session set sql_trace=TRUE';
exception
when others then
NULL;
end trg_enable_trace_at_logon;
/ |
Il suffit d'adapter selon les besoins (si vous ne souhaitez tracer qu'un user, un serveur d'application, ...)