Le Dump dans oracleDate de publication : le 26 Septembre 2005 1. Oradebug 1.1. Utilisation de oradebug 2. Dump du bloc oracle 2.1. Utilisation de ALTER SYSTEM 2.2. Utilisation de oradebug 3. Dump de plusieurs Tampons 3.1. Utilisation de ALTER SESSION 3.2. Utilisation de init.ora 3.3. Utilisation de oradebug 3.4. Contrôle des informations d'un dump 4. Dump d'un Tampon 4.1. Utilisation de ALTER SESSION 4.2. Utilisation de oradebug 5. Dump d'un entête de fichier 5.1. Utilisation de ALTER SESSION 5.2. Utilisation de oradebug 5.3. Contrôle des informations d'un dump 6. Dump du fichier de contrôle 6.1. Utilisation de ALTER SESSION 6.2. Utilisation de oradebug 6.3. Contrôle des informations d'un dump 7. Dump d'un segment de mémoire (Heap) 7.1. Utilisation de ALTER SESSION 7.2. Utilisation de oradebug 7.3. Contrôle des informations d'un dump 8. Dump du Library Cache 8.1. Utilisation de ALTER SESSION 8.2. Utilisation de oradebug 8.3. Contrôle des informations d'un dump 9. Dump du Processstate 9.1. Utilisation de ALTER SESSION 9.2. Utilisation de oradebug 9.3. Contrôle des informations d'un dump 10. Dump du Shared Server State 10.1. Utilisation de ALTER SESSION 10.2. Utilisation de oradebug 10.3. Contrôle des informations d'un dump 11. Dump du Systemstate 11.1. Utilisation de ALTER SESSION 11.2. Utilisation de oradebug 11.3. Contrôle des informations d'un dump 12. Dump du Redo Log 12.1. Utilisation de ALTER SESSION 12.2. Utilisation de oradebug 13. Dump de l'ERRORSTACK 14. Utilisation de Oradebug pour tracer une session SQL 14.1. Utilisation de DBMS_SYSTEM 14.2. Utilisation de Oradebug 15. Comment trouver le bon PID pour Oradebug setospid 16. Tracement des erreurs en utilisant Oradebug 17. Utilisation de Oradebug pour trouver les semaphores et les segmenets de mémoire 18. Trouver les processes SQL parallele en utilisant Oradebug 19. Utilisation de Oradebug pour trouver les processes rotatif (spinning) 20. IDML et Oradebug 21. Comment déterminer les evénements mis dans le système 22. Utilisation de Oradebug pour libérer les verrous DLL 23. Suspendre un processe en utilisant Oradebug 24. Reprendre un processe en utilisant Oradebug 25. Observation des statistiques sur les processes en utilisant Oradebug 26. HANGANALYZE 26.1. Introduction 26.2. Utilisation de HANGANALYZE 26.3. Interprétation du dump de HANGANALYZE 1. Oradebug
Oradebug est un utilitaire oracle qui consiste à produire
des dumps, seulement, il est moins documenté. Son utilisation
oblige le compte SYS.
Il a une liste de commandes très riche
qui consiste à tracer les processus ou de voir le contenu de
la structure de la mémoire. Certaines de ces commandes sont capables
de modifier ces contenus.
Les commandes les plus utilisées sont : setmypid, setospid, setorapid, dump, event, session_event, ipc, wakeup, and tracefile_name.
La commande dumplist affiche tous les dumps disponibles,
comme la liste des commandes concernant la structure interne d'oracle.
Par exemple en 10g Release 2:
En plus de l'utilitaire oradebug, les commandes ALTER SYSTEM et
ALTER SESSION peuvent être utilisés pour produire les dumps et
les fichiers traces.
1.1. Utilisation de oradebug
Pour cetaine commandes, vous devez avoir le numéro SPID
pour utiliser les commandes de oradebug. On peut trouver le SPID
des processes par la requêtte suivante :
Une fois le SPID est trouvé,
Dans notre exemple on va prendre SPID=564,
Certains commandes ne nécessite pas le SPID, par exemple la commande IPC.
Une autre commande qui ne necessite pas de SID est la commande DUMPLIST.
2. Dump du bloc oracle
Il est utile de faire un dump sur un bloc de données pour avoir
plus de precision sur un bloc corrompus, ou dans certains
situations de restauration pour avoir le SCN d'un bloc.
Les methodes suivantes consiste à faire un dump du bloc de
données concerné dans un fichier trace qui se trouvera dans le
repertoire UDUMP.
2.1. Utilisation de ALTER SYSTEM
Ici on fait le dump d'un seule bloc. . (file#) : désigne le numéro de fichier (block#): désigne le numéro du bloc
Ici on fait le dump d'un ensemble de blocs :
Par exemple pour identifier le numéro de fichier et le numéro de
bloc pour un segement (SYSTEM). La vue DBA_EXTENTS peut
être utiliser pour avoir cette information :
Pour faire un dump du bloc 393 du fichier 1 :
Pour faire un dump à partir du bloc 393 jusqu'au bloc 395 du fichier 1 :
2.2. Utilisation de oradebug
En general, on n'utilise pas oradebug pour faire un dump d'un bloc oracle
3. Dump de plusieurs Tampons
Le terme dump de plusieurs tampons peut être utiliser pour le dump
du buffer cache. Les informations produites sont variées.
Suivant le niveau spécifié, le fichier trace contiendra des
informations sur les entêtes du tampon, sur celui qui utilise
ou celui qui attend ce tampon, sur la position du tampon, et
autres détails, comme le numéro de l'objet et le numéro de la
tablespace. De même le fichier dump contient des information LRU
concernant le tampon.
La taille du fichier trace dépends des paramètres d'initialisation
DB_CACHE_SIZE ou DB_BLOCK_BUFFERS, et de la version de la base oracle.
On a besoin de faire un dump du buffer cache si le tampon est corrompu
ou autres problèmes lui sont liés. Dans un système RAC, il est nécessaire
de faire le dump des tampons sur tous les noeuds. Cet événement peut
être mis dans le fichier init.ora pour déclenche le dump du tampon
si une erreur particulière arrive.
3.1. Utilisation de ALTER SESSION
La commande suivante produit immédiatement un dump du tampon suivant le
niveau spécifié
La commande suivante produit un dump du tampon si la session rencontre l'erreur
ORA-0600 :
3.2. Utilisation de init.ora
L'événement suivant décharge le contenu du buffer dans un fichier trace
quand L'erreur ORA-600 arrive. Vous pouvez spécifier n'importe qu'elle
autre numéro d'erreur. :
3.3. Utilisation de oradebug
La commande oradebug suivante produit le dump des buffers dans un fichier trace. le
niveau symbolisé par n, contrôle la quantité d'information écrites dans le fichier trace.
3.4. Contrôle des informations d'un dump
La liste suivante montre les niveaux possibles :
Ici on donne un morceau de fichier du dump du buffer au niveau 1
4. Dump d'un Tampon
Le dump d'un buffer est le même que celui d'un dump de buffers discuté dans
la session precedente, excepté l'information concernant le LRU.
Le buffer decharge tous les buffers dans le buffer cache du DBA (Data
Block Adress) donné au niveau 10. Il peut être utilisé pour décharger les buffers pour
un DBA connu. A partir de la 8i vous devez fixer l'evenement SET_TSN_P1 car l'adresse
est pris comme une adresse relative, qui est specifique à une tablespace.
Ce dump est generalement utiliser pour examiner les copies du buffer d'un seule
buffer connu. Notez le nombre de copies CR du buffer specifique dans le buffer cache
est limié par le parametre caché __DB_BLOCK_MAX_CR_DBA.
Vous avez besoin d'utiliser le dump du buffer quand l'erreur est en rapport avec
un simple buffer (ou un enesemble de buffers). Dans ce cas, le dump du buffer est
tres couteux quand le buffer cache est grand.
4.1. Utilisation de ALTER SESSIONAvant que l'evenement soit autorisé, le SET_TSN_P1 que vous avez besoin de decouvrir
In order to enable the event, SET_TSN_P1 you need to find out
the tablespace number (TS#) from V$TABLESPACE as follows:
Les deux commandes suivantes peuvent être utilisés pour décharger le buffer.
4.2. Utilisation de oradebug
Les commandes suivantes montre la façon de décharger le buffer
dans un fichier trace. Le process ID peut être obtenue
à partir de la vue V$PROCESS.
5. Dump d'un entête de fichier
Le dump de l'entête de fichier est tres utile pour diagnostiquer
les erreurs de restauration. Ces entêtes de fichiers contients divers
nombres SCN utilisé pour les opérations de restauration de la base
et tient des informations importantes commes des details sur le checkpoint, rba,
extentes, et le high water mark pour ce fichier de données.
5.1. Utilisation de ALTER SESSION
Dans la commande ALTER SESSION suivante, les entêtes du fichier sont
décharger au niveau 10.
5.2. Utilisation de oradebug
La commande oradebug suivante montre comment décharger le file headers au niveau 10.
5.3. Contrôle des informations d'un dump
Le dump de l'entête de fichier de données est compris entre
le niveau 1 et 10. On donne ici un dump de niveau 10.
6. Dump du fichier de contrôle
Le fichier de contrôle contient des informations concernant les redo logs ,
les fichiers de données et des informations critiques de retauration comme
le SCN en ligne et le SCN hors ligne des fichiers de données. Pendant l'ouverture de la base,
les informations dans le fichier de contrôle sont vérifiés avant ceux du fichiers de données,
est la base sera ouverte si les deux sont synchronisés. Autrement une restauration media est
souligné.
Le dump du fichier de contrôle est souvenet utilisé pour diagnostiquer les problèmes
de restauration. En partie le contenu du fichier de contrôle sont visible dans des vues
X$, comme X$KCC.
6.1. Utilisation de ALTER SESSION
Dans la commande suivante, le fichier de contrôle est déchargé en utilisant le niveau 10.
6.2. Utilisation de oradebug
Dans la commande suivante, le fichier de contrôle est déchargé en utilisant le niveau 10.
6.3. Contrôle des informations d'un dump
Le niveau contrôle la quantités de recods qui doit être déchargé dans le fichier trace.
Le nombre de records pour la sauvegarde RMAN dans les fichiers de contrôles depend
du parametre CONTROL_FILE_RECORD_KEEP_TIME dans init.ora, par défaut c'est 7 jours.
Ce parametre se rapporte à RMAN quand le fichier de contrôle est utilisé comme un catalogue de Restauration.
Mette ce parametre à une valeur elevée, augmentera la taille du fichier de contrôle, suivant
le nombre de switch du log et suivant d'autres informations en rapport avec la restauration stocké dans le fichier.
Le nombre de records déchargés est 2^(level -2 ) :
7. Dump d'un segment de mémoire (Heap)
Le dump d'un segment de mémoire montre des details concernant l'allocation de
mémoire et sa distribution dans le pool partagée et dans le library cache inclus
des details sur les objets. Il montre aussi des details sur les curseurs et les latchs
quand le niveau 2 est utilisé. On peut avoir des informations sur les gros morceaux (chunk)
de la mémoire (free, freeable, permanent, and recreatable) et leurs tailles.
Le dump d'un segment de mémoire est souvent demandé par le support oracle pour
diagnostiquer les erreurs liées au shared pool.
7.1. Utilisation de ALTER SESSION
La premier ALTER SESSION produit immediatement un dump d'un segmenet de mémoire
alimenté par un niveau. , quand à la deuxième commande ALTER SESSION
produit un dump du segement de mémoire quand la session
rencontre l'erreur ORA-4031.
7.2. Utilisation de oradebug
La commande suivante montre la façon de produir un dump immediat
de la mémoire à un niveau 10.
7.3. Contrôle des informations d'un dump
On peut utiliser les valeurs décimal dans le tableau suivant
comme des niveaux pour contrôler Les informations ecrite dans le fichier trace.
8. Dump du Library Cache
Dans le dump du library cache on'a les details sur les objets du cache "library",
y compris les structures de dependance et les détails sur les curseurs, comme la valeur
hash et le timestamp. Cette evenement peut être utilisé soit avec l'option immediate,
qui decharge la libray cache une fois la commande est lancé, ou il peut être
declenché quand une erreur s'est produite.
8.1. Utilisation de ALTER SESSION
La commande ALTER SESSION suivante peut être utiliser pour décharger
la librairie cache au niveau 10.
8.2. Utilisation de oradebug
La commande suivante peut être utiliser pour décharger immediatement
la librairie cache dans un niveau demandée.
Ici le fichier trace au niveau 1 de la library cache :
8.3. Contrôle des informations d'un dump
La liste suivante montre les niveaux possibles :
Vous pouvez mixer ces niveaux pour produire plusieurs morceaux d'informations.
Par exemple, si vous utilisez le niveau 11 (8 + 2 + 1), le dump devait contenir
celui du niveau 8, niveau 2, et le niveau 1.
9. Dump du Processstate
Les dumps Processstate sont normalement necessaire pour collecter plusieurs
informations quand vous voulez diagnostiquer les corruptions de la mémoire
ou les erreurs dead locks. En plus ils donnent des details a propos des
objets partagés utilisés par la library cache. le dump peut être initié
immédiatement ou se produir suite à une erreur.
9.1. Utilisation de ALTER SESSION
La premiere commande ALTER SESSION produit un dump immediat du processstate
au niveau 10 quand au seconde commande ALTER SESSION produit le dump
quand une session rencontre l'erreur ORA-4020.
9.2. Utilisation de oradebug
La commande oradebug suivante produit un dump immediat du processstate
au niveau 10.
Ici on donne la trace d'un dump du processstate au niveau 1 :
9.3. Contrôle des informations d'un dump10. Dump du Shared Server State
Le serveur partagé oracle à été appellé le serveur Multithreaded dans
la 8i. Le diagnostique des erreurs peu commun lié au serveur partagé
(comme le process deadlocks) se confirme dans le dump du mtsstate
ou de l'etat du serveur partagé, suivant la version oracle.
10.1. Utilisation de ALTER SESSION
La première commande produit un dump immediat de l'état du serveur partagé,
et la seconde commande produit un dump sur l'état du serveur partagé
au niveau 1 quand la session rencontre l'erreur ORA-00600.
10.2. Utilisation de oradebug
La commande oradebug suivante produit un dump immediat sur l'etat
du serveur partagé suivant le niveau fourni.
10.3. Contrôle des informations d'un dump
Les divers niveau disponible pour produir le dump sur l'etat
du serveur partagé sont
11. Dump du Systemstate
Systemstate est l'un des décharge de fichiers le plus important que le support oracle
utilise pour analyser les pannes de la base. Cela exige que
This requires that the maxdump file size be set to unlimited,
as this will generate large trace files depending on the size
of the SGA. The systemstate dump contains a separate section
with information for each process. Normally, you need to take
two or three dumps in regular intervals. Expect HUGE trace files!
11.1. Utilisation de ALTER SESSION
Ici la première commande enleve les restrictions sur la taille du fichier dump.
la seconde produit une décharge immédiate de systemstate au niveau 10.
11.2. Utilisation de oradebug
La commande oradebug suivante provoque un dump systemstate immediat au niveau 10.
11.3. Contrôle des informations d'un dump
N'est pas applicable ici. le dump du Systemstate est toujours pris
au niveau 10.
12. Dump du Redo Log
Les redo logs gardent des informations sur les undo et les redo pour
chaque modification atomique de la base. Les modifications sont enregistrés
comme des opcodes, qui sont normalement de la forme code.operation .
Par exemple, l'opcode 4.1 désigne l'opération de netoyage du bloc dans
la couche transaction du bloc.
le dump des redo logs sont normalement demendés par le support oracle pour
analyser la corrumption de données (corruption logique). Il peut être utiliser
comme un utilitaire d'audit. Par exemple, si vous voulez connaitre l'heure et la date
des extentes alloués pour un segement, vous pouvez décharger l'opcode approprié
de l'allocation d'extent à partir d'un ensemble de redo ou de fichiers d'archives
et obtenir des details qu'on ne le trouve nulle prt dans le dictionnaire de données.
12.1. Utilisation de ALTER SESSION
La commande ALTER SYSTEM suivante peut être utiliser pour faire
un dump des redo logs. Vous pouvez substituer des filtres ou des options,
suivant vos besoins. Si aucun filtre n'est appliqué, le fichier journal
sera déchargé completement dans le fichier trace.
12.2. Utilisation de oradebug
On ne peut pas appliquer ici oradebug. La décharge redo est basé sur
plusieurs parametres comme, rba, dba, scn, ou le temps. Sans specifier aucune de ces parametres
déchargera la totalité du contenu du redo log dans le fichier trace. pareil pour les redo logs archivés.
13. Dump de l'ERRORSTACK
On peut avoir l'ERRORSTACK à partir des processes en lançant les commandes suivantes:
14. Utilisation de Oradebug pour tracer une session SQL14.1. Utilisation de DBMS_SYSTEM
En premier, on'a besoin du SID, SERIAL# et PADDR dans la
vue V$SESSION, par exemple :
Une fois le SID et SERIAL# sont connus, on peut activer la trace pour
chaque session en lançant la commande suivante :
Toute manipulation par l'utilisateur sera tracé au niveau 1. En
arrête le tracé par :
Mais si on veut plus de détail dans le fichier trace, par exemple un niveau 4,
alors on'est obligé d'utiliser oradebug car DBMS_SYSTEM est limié au niveau 1.
Parfois la trace au niveau 1 est insuffisant, car dans les instructions
SQL existe des bind variables. Et on'a besoin des ces valeurs avant de
lancer la requête dans SQLPLUS. Dans ce cas on peut exécuter la trace au
niveau 4, de telle façon à ce qu'on a la valeur de chaque bind variable dans
le fichier .trc.
14.2. Utilisation de Oradebug
Pour activer la trace au niveau 4 en utilisant oradebug, il faut
trouver avant, le SID, SERIAL# et PADDR dans la vue V$SESSION. Par exemple:
Et on'a le SPID en lançant la requête suivante :
Par exemple :
Puis on active la trace au niveau 4 en utilisant oradebug :
Et il ne faut pas oublier d'arrêter la trace aprés avoir recuilli
les informations dont vous avez besoins :
Parmis les capacités de oradebug est d'activeret de désactiver
la trace SQL d'une autre session.
15. Comment trouver le bon PID pour Oradebug setospid
1. Dans le prompt Unix, tapez WHO AM I. Par exemple :
[kheops]/app/oracle/product/8.1.6> who am i orafrance pts/25 Apr 13 10:37 (rociblj-ppp-9.us.oracle.com)
Prendre note du terminal. Dans ce cas est pts/25
2. Sous SQL avec le compte sys comme sysdba
[kheops]/app/oracle/product/9.0.1> sqlplus /nolog SQL*Plus: Release 10.2.0.0.0 - Production on Sun Sep 22 13:57:23 2005 © Copyright 2003 Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected.
3. Lançer la commande suivante :
SQL> !ps -ef | grep sql orafrance 3705 25983 0 15:27:52 pts/25 0:00 sql orafrance 2504 24262 0 14:43:57 pts/18 0:00 sql orafrance 3759 3757 0 15:29:52 pts/25 0:00 grep sql sheikh 28026 27944 0 16:42:25 pts/17 0:00 sql
Chercher le terminal qu concorde avec le pts/25. On remarque
qu'il existe deux pid pour ce terminal, 3705 et 3759. Mais le pid
3759 correspond au grep.
4. On lance la commande suivant sous SQLPLUS :
SQL> !ps -ef | grep 3705 oracle 3706 3705 0 15:27:52 ? 0:00 oracleV102 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) orafrance 3705 25983 0 15:27:52 pts/25 0:00 sqlplus orafrance 3856 3705 0 15:33:37 pts/25 0:00 [ sh ] orafrance 3859 3857 0 15:33:37 pts/25 0:00 grep 3705
On cherche le processe qui a comme processe père du 3705. Il existe deux.
Un est 3706, une connection sqlnet, et 3856, du shell. Dans ce cas, on cherche
la connection sqlnet qui à lancé sqlplus, c'est le processe 3706. C'est le pid
qu'on doit utiliser dans la commande oradebug setospid :
16. Tracement des erreurs en utilisant Oradebug
Aprés avoir attaché le SID à oradebug, pour tracer une erreur de la forme ORA-XXXXX
il suffira de lancer la commande qui suit :
Ce qui produit quelque chose quand la session heurte à l'erreur ORA-XXXXX.
17. Utilisation de Oradebug pour trouver les semaphores et les segmenets de mémoire18. Trouver les processes SQL parallele en utilisant Oradebug19. Utilisation de Oradebug pour trouver les processes rotatif (spinning)20. IDML et Oradebug21. Comment déterminer les evénements mis dans le système22. Utilisation de Oradebug pour libérer les verrous DLL23. Suspendre un processe en utilisant Oradebug24. Reprendre un processe en utilisant Oradebug25. Observation des statistiques sur les processes en utilisant Oradebug26. HANGANALYZE26.1. Introduction26.2. Utilisation de HANGANALYZE26.3. Interprétation du dump de HANGANALYZE
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|