Invalider un cursor

Lorsqu’on a en shared pool un plan d’exécution mauvais (par exemple à cause de bind variable peeking sur des valeurs particulières) il faut pouvoir vite l’invalider afin que la prochaine exécution fasse un hard parse.
Voici comment invalider directement un cursor avec dbms_shared_pool.purge:
Je récupère le nom à passer à partir du sql_id:

select rawtohex(address)|| ','||to_char(hash_value),sql_id,child_number
from v$sql where sql_id='84vk5fwyw403g';
RAWTOHEX(ADDRESS)||’,’||TO_CHAR(HASH_VALUE) SQL_ID CHILD_NUMBER
000007FF1E4B7218,1036124271 84vk5fwyw403g 0

Et j’invalide le curseur:

exec sys.dbms_shared_pool.purge('000007FF1E4B7218,1036124271','...');

Exemple complet ici: demo

Déplacer des archivelog avec RMAN

Par manque de place dans un filesystem, on peut être amené à déplacer des archive logs.
Si on les déplace avec l’OS (mv) alors Oracle ne saura plus où ils sont. Il faudra utiliser RMAN pour supprimer les anciens (crosscheck archivelog all ; delete expired archivelog all; catalog start with ‘…’ ; )

Mais il y a plus rapide: BACKUP AS COPY fait une copie des fichiers et avec DELETE INPUT on supprime la source. Ce qui revient à les déplacer…

Exemple:

Lire la suite

Micro Learning

En passant

J’ai rajouté une nouvelle catégorie dans ce blog: MicroLearning.
Le but est d’y présenter rapidement une fonctionnalité d’Oracle, ou une astuce, en quelques lignes avec un lien sur une demo plus complète.

Bien-sûr, l’idée est de l’alimenter assez régulièrement, surtout dès que la 12c va être disponible avec son lot de nouveautés.

N’hésitez-pas à laisser des commentaires…

Afficher le plan d’exécution avec les stats de chaque étape

Pour poster un plan d’exécution dans les forums, il est important de montrer les statistiques d’exécution et pas seulement les estimations – car s’il on a un problème c’est peut-être justement que les estimations sont fausses.

Voici comment faire facilement sous sqlplus.

Les exemples complets sont ici: demo
Lire la suite