IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le Dump dans oracle

Date de publication : le 26 Septembre 2005

Par Mohammed Bouayoun
 


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.

Il faut faire très attention à l'utilisation des ces commandes. Ils peuvent corrompre votre base.
SQL> oradebug help HELP [command] Describe one or all commands SETMYPID Debug current process SETOSPID (ospid) Set OS pid of process to debug SETORAPID (orapid) ['force'] Set Oracle pid of process to debug SHORT_STACK Dump abridged OS stack DUMP (dump_name) (lvl) [addr] Invoke named dump DUMPSGA [bytes] Dump fixed SGA DUMPLIST Print a list of available dumps EVENT (text) Set trace event in process SESSION_EVENT (text) Set trace event in session DUMPVAR (p|s|uga> (name) [level] Print/dump a fixed PGA/SGA/UGA variable DUMPTYPE (address) (type) (count) Print/dump an address with type info SETVAR (p|s|uga) (name) (value) Modify a fixed PGA/SGA/UGA variable PEEK (addr) (len) [level] Print/Dump memory POKE (addr) (len) (value) Modify memory WAKEUP (orapid) Wake up Oracle process SUSPEND Suspend execution RESUME Resume execution FLUSH Flush pending writes to trace file CLOSE_TRACE Close trace file TRACEFILE_NAME Get name of trace file LKDEBUG Invoke global enqueue service debugger NSDBX Invoke CGS name-service debugger -G (Inst-List | def | all) Parallel oradebug command prefix -R (Inst-List | def | all) Parallel oradebug prefix (return output SETINST (instance# .. | all) Set instance list in double quotes SGATOFILE (SGA dump dir) Dump SGA to file; dirname in double quotes DMPCOWSGA (SGA dump dir) Dump and map SGA as COW; dirname in double quotes MAPCOWSGA (SGA dump dir) Map SGA as COW; dirname in double quotes HANGANALYZE [level] [syslevel] Analyze system hang FFBEGIN Flash Freeze the Instance FFDEREGISTER FF deregister instance from cluster FFTERMINST Call exit and terminate instance FFRESUMEINST Resume the flash frozen instance FFSTATUS Flash freeze status of instance SKDSTTPCS (ifname) (ofname) Helps translate PCs to names WATCH (address) (len) (self|exist|all|target) Watch a region of memory DELETE (local|global|target) watchpoint (id) Delete a watchpoint SHOW (local|global|target) watchpoints Show watchpoints CORE Dump core without crashing process UNLIMIT Unlimit the size of the trace file PROCSTAT Dump process statistics CALL (func) [arg1] ... [argn] Invoke function with arguments SQL>
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:

SQL> oradebug dumplist EVENTS TRACE_BUFFER_ON TRACE_BUFFER_OFF HANGANALYZE LATCHES PROCESSSTATE SYSTEMSTATE INSTANTIATIONSTATE REFRESH_OS_STATS CROSSIC CONTEXTAREA HEAPDUMP ...
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 :

SQL> select a.username, a.sid, a.serial#, b.spid from v$session a, v$process b 2 where a.paddr=b.addr; USERNAME SID SERIAL# SPID ------------------------------ ---------- ---------- ------------ 170 1 4008 169 1 4012 168 1 4016 167 1 4044 166 1 4048 165 1 4052 164 1 4056 163 1 4060 162 1 4064 161 1 4068 160 1 4084 143 996 3004 154 1 3028 DBSNMP 148 1 3776 152 3 3356 151 1 3532 SYS 141 505 564 SYSMAN 139 3 4000 SYSMAN 132 2 352 SYSMAN 131 2 360 20 ligne(s) sÚlectionnÚe(s). SQL>
Une fois le SPID est trouvé,

sql> oradebug setospid (spid) sql> oradebug unlimit
Dans notre exemple on va prendre SPID=564,

SQL> oradebug setospid 564 Instruction traitÚe. SQL> oradebug unlimit Instruction traitÚe. SQL>
L'utilisation de la commande unlimit, enlève les restrictions sur la taille du fichier trace imposé dans le paramètre d'initialisation.
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.

Si le parametre caché _TRACE_FILES_PUBLIC est mis à TRUE, n'importe qu'elle utilisateur ayant accés au serveur oracle peut visualiser le contenu du fichier trace, ce qui compromis la securité et la confidentialité des données.

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

alter system dump datafile (file#) block (block#);
Ici on fait le dump d'un ensemble de blocs :

alter system dump datafile (file#) block min (min_block#) block max (max_block#);
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 :

SQL> select file_id, block_id, blocks from dba_extents where segment_name = 'SYSTEM'; FILE_ID BLOCK_ID BLOCKS ---------- ---------- ---------- 1 9 8 1 17 8 1 385 8 1 393 8 1 401 8 1 409 8 6 ligne(s) sÚlectionnÚe(s). SQL>
Pour faire un dump du bloc 393 du fichier 1 :

alter system dump datafile 1 block 393;
Pour faire un dump à partir du bloc 393 jusqu'au bloc 395 du fichier 1 :

alter system dump datafile 1 block min 393 block max 395;
Redo thread mounted by this instance: 1 Oracle process number: 15 Windows thread id: 2764, image: ORACLE.EXE (SHAD) *** 2005-09-25 16:48:42.949 *** SERVICE NAME:(SYS$USERS) 2005-09-25 16:48:42.888 *** SESSION ID:(159.1289) 2005-09-25 16:48:42.888 Start dump data blocks tsn: 0 file#: 1 minblk 393 maxblk 393 buffer tsn: 0 rdba: 0x00400189 (1/393) scn: 0x0000.001cd6da seq: 0x01 flg: 0x04 tail: 0xd6da0201 frmt: 0x02 chkval: 0x47b9 type: 0x02=KTU UNDO BLOCK Hex dump of block: st=0, typ_found=1 Dump of memory from 0x074CA800 to 0x074CC800 74CA800 0000A202 00400189 001CD6DA 04010000 [......@.........] 74CA810 000047B9 00300000 00000034 1F1F0039 [.G....0.4...9...] ... ... ******************************************************************************** UNDO BLK: xid: 0x0000.030.00000034 seq: 0x39 cnt: 0x1f irb: 0x1f icl: 0x0 flg: 0x0000 Rec Offset Rec Offset Rec Offset Rec Offset Rec Offset --------------------------------------------------------------------------- 0x01 0x1eec 0x02 0x1df0 0x03 0x1cf4 0x04 0x1bf8 0x05 0x1afc 0x06 0x1a00 0x07 0x1904 0x08 0x1808 0x09 0x170c 0x0a 0x1610 0x0b 0x1514 0x0c 0x1418 0x0d 0x131c 0x0e 0x1220 0x0f 0x1124 0x10 0x1028 0x11 0x0f2c 0x12 0x0e30 0x13 0x0d34 0x14 0x0c38 0x15 0x0b3c 0x16 0x0a40 0x17 0x0944 0x18 0x0848 0x19 0x074c 0x1a 0x0650 0x1b 0x0554 0x1c 0x0458 0x1d 0x035c 0x1e 0x0260 0x1f 0x0164 *----------------------------- * Rec #0x1 slt: 0x00 objn: 15(0x0000000f) objd: 15 tblspc: 0(0x00000000) * Layer: 11 (Row) opc: 1 rci 0x00 Undo type: Regular undo Begin trans Last buffer split: No Temp Object: No Tablespace Undo: No rdba: 0x00000000 *----------------------------- uba: 0x00400188.0038.1f ctl max scn: 0x0000.001af6a7 prv tx scn: 0x0000.001af6a8 txn start scn: scn: 0x0000.001c7e27 logon user: 0 prev brb: 4194693 prev bcl: 0 KDO undo record: KTB Redo op: 0x04 ver: 0x01 op: L itl: xid: 0x0000.014.00000034 uba: 0x00400188.0038.1f flg: C--- lkc: 0 scn: 0x0000.001c7e26 KDO Op code: URP row dependencies Disabled xtype: XA flags: 0x00000000 bdba: 0x0040006a hdba: 0x00400069 itli: 1 ispac: 0 maxfr: 4863 tabn: 0 slot: 8(0x8) flag: 0x2c lock: 0 ckix: 0 ncol: 17 nnew: 12 size: 0 col 1: [ 9] 5f 53 59 53 53 4d 55 38 24 col 2: [ 2] c1 02 col 3: [ 2] c1 03 col 4: [ 3] c2 02 16 col 5: [ 5] c4 02 53 34 12 col 6: [ 1] 80 col 7: [ 3] c2 08 15 col 8: [ 3] c2 04 10 col 9: [ 1] 80 col 10: [ 2] c1 04 col 11: [ 2] c1 02 col 16: [ 2] c1 02 ... ...

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é

alter session set events 'immediate trace name buffers level (n);
La commande suivante produit un dump du tampon si la session rencontre l'erreur ORA-0600 :

alter session set events '600 trace name buffers level 10';

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. :

event="600 trace name buffers level 10"

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.

oradebug setmypid oradebug dump buffers (n);

3.4. Contrôle des informations d'un dump

La liste suivante montre les niveaux possibles :

  • Niveau 1 Décharge seulement l'information de l'entête du buffer
  • Niveau 2 Décharge la cache et l'entête de la transaction pour chaque bloc
  • Niveau 3 Décharge un dump complet de chaque bloc
  • Niveau 4 Décharge le working set lists, l'entête du buffer et l'entête du cache pour chaque bloc
  • Niveau 5 Décharge l'entête de la transaction pour chaque bloc
  • Niveau 6 Décharge complete de chaque bloc
Ici on donne un morceau de fichier du dump du buffer au niveau 1

Dump of buffer cache at level 1 for tsn=2147483647, rdba=0 BH (673F838C) file#: 1 rdba: 0x0040da78 (1/55928) class: 1 ba: 67350000 set: 3 blksize: 8192 bsi: 0 set-flg: 2 pwbcnt: 335 dbwrid: 0 obj: 255 objn: 255 tsn: 0 afn: 1 hash: [6c989d18,6c989d18] lru: [673f8490,673f8330] ckptq: [NULL] fileq: [NULL] objq: [673f7884,673f98d4] st: XCURRENT md: NULL tch: 2 flags: LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

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 SESSION

Avant 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:

select ts#, name from V$tablespace; TS# NAME ---------- ------------------------------ 0 SYSTEM 1 UNDOTBS1 2 SYSAUX 3 TEMP 4 USERS
Les deux commandes suivantes peuvent être utilisés pour décharger le buffer.

alter session set events 'immediate trace name SET_TSN_P1 level (TS#+1)'; alter session set events 'immediate trace name BUFFER level (RDBA)';

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.

oradebug setospid (process ID) oradebug unlimit oradebug dump buffer (RDBA)

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.

alter session set events 'immediate trace name file_hdrs level 10';

5.2. Utilisation de oradebug

La commande oradebug suivante montre comment décharger le file headers au niveau 10.

oradebug setmypid oradebug unlimit oradebug dump file_hdrs 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.

DATA FILE #1: (name #4) D:\ORACLE\PRODUCT\10.1.0\DB_1\GOPAL\SYSTEM01.DBF creation size=38400 block size=8192 status=0xe head=4 tail=4 dup=1 tablespace 0, index=1 krfil=1 prev_file=0 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00 Checkpoint cnt:75 scn: 0x0000.000438f4 04/01/2004 00:53:01 Stop scn: 0xffff.ffffffff 03/31/2004 20:21:22 Creation Checkpointed at scn: 0x0000.00000009 03/22/2004 16:46:41 thread:1 rba:(0x1.3.10) enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Offline scn: 0x0000.00000000 prev_range: 0 Online Checkpointed at scn: 0x0000.00000000 thread:0 rba:(0x0.0.0) enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Hot Backup end marker scn: 0x0000.00000000 aux_file is NOT DEFINED V10 STYLE FILE HEADER: Compatibility Vsn = 168821248=0xa100200 Db ID=580029651=0x22928cd3, Db Name='GOPAL' Activation ID=0=0x0 Control Seq=252=0xfc, File size=38400=0x9600 File Number=1, Blksiz=8192, File Type=3 DATA Tablespace #0 - SYSTEM rel_fn:1 Creation at scn: 0x0000.00000009 03/22/2004 16:46:41 Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0 reset logs count:0x1f153853 scn: 0x0000.00000001 reset logs terminal rcv data:0x0 scn: 0x0000.00000000 prev reset logs count:0x0 scn: 0x0000.00000000 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000 recovered at 04/01/2004 00:52:53 status:0x2004 root dba:0x00400179 chkpt cnt: 75 ctl cnt:74 begin-hot-backup file size: 0 Checkpointed at scn: 0x0000.000438f4 04/01/2004 00:53:01 thread:1 rba:(0x35.2.10) enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Backup Checkpointed at scn: 0x0000.00000000 thread:0 rba:(0x0.0.0) enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 External cache id: 0x0 0x0 0x0 0x0 Absolute fuzzy scn: 0x0000.00000000 Recovery fuzzy scn: 0x0000.00000000 01/01/1988 00:00:00 Terminal Recovery Stamp scn: 0x0000.00000000 01/01/1988 00:00:00 Platform Information: Creation Platform ID: 7 Current Platform ID: 7 Last Platform ID: 7

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.

alter session set events 'immediate trace name controlf level 10';

6.2. Utilisation de oradebug

Dans la commande suivante, le fichier de contrôle est déchargé en utilisant le niveau 10.

oradebug setmypid oradebug unlimit oradebug dump controlf 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 ) :

  • Level 10 Dumps (2^8) ou 256 records
  • Level 11 Dumps (2^9) ou 512 records
  • Level 12 Dumps (2^10) ou 1024 records

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.

alter session set events 'immediate trace name heapdump level (level)'; alter session set events '4031 trace name heapdump level 2';

7.2. Utilisation de oradebug

La commande suivante montre la façon de produir un dump immediat de la mémoire à un niveau 10.

oradebug setmypid oradebug unlimit oradebug dump heapdump (level)

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.

Heap Hex Dec
PGA 0x01 1
SGA 0x02 2
UGA 0x04 4
Cureent call 0x08 8
User call 0x10 16
Large pool 0x20 32

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.

alter session set events 'immediate trace name library_cache level 10';

8.2. Utilisation de oradebug

La commande suivante peut être utiliser pour décharger immediatement la librairie cache dans un niveau demandée.

oradebug setmypid oradebug unlimit oradebug dump library_cache (level)
Ici le fichier trace au niveau 1 de la library cache :

*** 2005-09-26 20:31:20.301 *** SERVICE NAME:(SYS$USERS) 2005-09-26 20:31:20.281 *** SESSION ID:(159.54) 2005-09-26 20:31:20.281 LIBRARY CACHE STATISTICS: namespace gets hit ratio pins hit ratio reloads invalids -------------- --------- --------- --------- --------- ---------- ---------- CRSR 3736 0.479 29352 0.926 559 0 TABL 5230 0.585 9637 0.643 566 0 BODY 649 0.948 834 0.922 31 0 TRGR 14 0.714 202 0.960 4 0 INDX 77 0.260 79 0.038 19 0 CLST 119 0.933 308 0.958 5 0 KGLT 0 0.000 0 0.000 0 0 PIPE 0 0.000 0 0.000 0 0 LOB 0 0.000 0 0.000 0 0 DIR 0 0.000 0 0.000 0 0 QUEU 11 0.727 689 0.987 3 0 OBJG 0 0.000 0 0.000 0 0 PROP 0 0.000 0 0.000 0 0 JVSC 0 0.000 0 0.000 0 0 JVRE 0 0.000 0 0.000 0 0 ROBJ 0 0.000 0 0.000 0 0 REIP 0 0.000 0 0.000 0 0 CPOB 0 0.000 0 0.000 0 0 EVNT 122 0.975 122 0.910 8 0 SUMM 0 0.000 0 0.000 0 0 DIMN 0 0.000 0 0.000 0 0 CTX 0 0.000 0 0.000 0 0 OUTL 0 0.000 0 0.000 0 0 RULS 1 0.000 34 0.941 1 0 RMGR 8 0.625 14 0.571 2 0 XDBS 1 0.000 0 0.000 0 0 PPLN 0 0.000 0 0.000 0 0 PCLS 0 0.000 0 0.000 0 0 SUBS 14 0.786 63 0.921 2 0 LOCS 0 0.000 0 0.000 0 0 RMOB 0 0.000 0 0.000 0 0 RSMD 0 0.000 0 0.000 0 0 JVSD 0 0.000 0 0.000 0 0 STFG 0 0.000 0 0.000 0 0 TRANS 0 0.000 0 0.000 0 0 RELC 0 0.000 0 0.000 0 0 RULE 0 0.000 0 0.000 0 0 STRM 0 0.000 0 0.000 0 0 REVC 2 0.500 0 0.000 0 0 STAP 0 0.000 0 0.000 0 0 RELS 0 0.000 0 0.000 0 0 RELD 0 0.000 0 0.000 0 0 IFSD 0 0.000 0 0.000 0 0 XDBC 0 0.000 0 0.000 0 0 USAG 0 0.000 0 0.000 0 0 MVOBTBL 39 0.538 39 0.103 17 0 JSQI 0 0.000 0 0.000 0 0 CDC 0 0.000 0 0.000 0 0 MVOBIND 41 0.537 41 0.098 18 0 STBO 0 0.000 0 0.000 0 0 HTSO 0 0.000 0 0.000 0 0 JSGA 67 0.955 886 0.993 3 0 JSET 7 0.000 7 0.000 0 0 TABL_T 0 0.000 0 0.000 0 0 CLST_T 0 0.000 0 0.000 0 0 INDX_T 0 0.000 0 0.000 0 0 NSCPD 0 0.000 0 0.000 0 0 JSLV 0 0.000 0 0.000 0 0 MODL 0 0.000 0 0.000 0 0 CUMULATIVE 10138 0.578 42307 0.860 1238 0 Permanent space allocated for Load Locks LATCH:0 TOTAL SPACE: 4092 FREELIST CHUNK COUNT:93 OBJECT SIZE:44 Permanent space allocated for KGL pins LATCH:0 TOTAL SPACE: 32384 FREELIST CHUNK COUNT:128 OBJECT SIZE:88 Permanent space allocated for KGL locks LATCH:0 TOTAL SPACE: 80640 FREELIST CHUNK COUNT:248 OBJECT SIZE:112 Permanent space allocated for KGL S handles LATCH:0 TOTAL SPACE: 439872 FREELIST CHUNK COUNT:0 OBJECT SIZE:316 Permanent space allocated for KGL M handles LATCH:0 TOTAL SPACE: 659456 FREELIST CHUNK COUNT:0 OBJECT SIZE:512 Permanent space allocated for KGL L handles LATCH:0 TOTAL SPACE: 188928 FREELIST CHUNK COUNT:0 OBJECT SIZE:768 Permanent space allocated for KGL A handles LATCH:0 TOTAL SPACE: 189400 FREELIST CHUNK COUNT:0 OBJECT SIZE:200 Permanent space allocated for KGL objects LATCH:0 TOTAL SPACE: 94836 FREELIST CHUNK COUNT:0 OBJECT SIZE:84 Permanent space allocated for KGL handle dependents LATCH:0 TOTAL SPACE: 37152 FREELIST CHUNK COUNT:143 OBJECT SIZE:12

8.3. Contrôle des informations d'un dump

La liste suivante montre les niveaux possibles :

  • Level 1 Décharge des statistiques du library cache
  • Level 2 Décharge le sommaire du hash table
  • Level 4 Décharge les informations de base sur objets du library cache
  • Level 8 Décharge des information détaillés sur les objets (inclus Dumps objects with detailed information (contenant les references sur les enfants, pin waiters, etc.)
  • Level 16 Décharge la taille du segment de mémoire (heap) (peu être des latch intensif)
  • Level 32 Décharge des informations sur les segments de mémoire (heap)
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.

alter session set events 'immediate trace name PROCESSSTATE level 10'; alter session set events '4020 trace name PROCESSSTATE level 10';

9.2. Utilisation de oradebug

La commande oradebug suivante produit un dump immediat du processstate au niveau 10.

oradebug setmypid oradebug unlimit oradebug dump processstate 10
Ici on donne la trace d'un dump du processstate au niveau 1 :

PROCESS STATE ------------- Process global information: process: 6D64DD54, call: 00000000, xact: 00000000, curses: 00000000, usrses: 6D73F1AC ---------------------------------------- SO: 6D64DD54, type: 2, owner: 00000000, flag: INIT/-/-/0x00 (process) Oracle pid=19, calls cur/top: 00000000/6D75FA00, flag: (0) - int error: 0, call error: 0, sess error: 0, txn error 0 (post info) last post received: 0 0 0 last post received-location: No post last process to post me: none last post sent: 0 0 0 last post sent-location: No post last process posted by me: none (latch info) wait_event=0 bits=0 Process Group: DEFAULT, pseudo proc: 6D67F2F0 O/S info: user: SYSTEM, term: SPCB0665, ospid: 2444 OSD pid info: Windows thread id: 2444, image: ORACLE.EXE (SHAD) Dump of memory from 0x6D63A5F8 to 0x6D63A77C 6D63A5F0 00000010 6C8F01C0 [.......l] 6D63A600 00000010 0003139D 6D75FA00 00000003 [..........um....] 6D63A610 0003139D 6CCADF1C 0000000B 0003139D [.......l........] 6D63A620 6D73F1AC 00000004 00031291 6C0349A8 [..sm.........I.l] 6D63A630 00000007 0003139D 6C034A2C 00000007 [........,J.l....] 6D63A640 0003139D 6C035384 00000007 0003139D [.....S.l........] 6D63A650 6C035408 00000007 0003139D 6C035510 [.T.l.........U.l] 6D63A660 00000007 0003139D 6C035618 00000007 [.........V.l....] 6D63A670 0003139D 6C03569C 00000007 0003139D [.....V.l........] 6D63A680 6C035720 00000007 0003139D 6C036844 [ W.l........Dh.l] 6D63A690 00000007 0003139D 6C0368C8 00000007 [.........h.l....] 6D63A6A0 0003139D 6C03695C 00000007 0003139D [....\i.l........] 6D63A6B0 6C0369E0 00000007 0003139D 00000000 [.i.l............] 6D63A6C0 00000000 00000000 00000000 00000000 [................] ... Repeat 3 times 6D64E330 00000000 00000000 00000000 0000000B [................] 6D64E340 00000000 [....] Symbolic dump of process state object: KSUPRFLG = 0 KSUPRSER = 4 KSUPRIOC = 0 KSLLALAQ = 0X00000000 KSLLAWAT = 0X00000000 KSLLAWHY = 0 KSLLAWER = 0 KSLLALOW = 0 KSLLAPSC = 0 KSLLAPRC = 0 KSLLAPRV = 0 KSLLAPSN = 0 KSLLID1R = 0 KSLLID2R = 0 KSLLRTYP = '' KSLLRMTY = 0 KSUPRPID = '' KSUPRUNM = '' KSUPRMNM = 'SPCB0665' KSUPRPNM = '' KSUPRTID = '' KSSRCOBJ = 0X00000000 KSSRCFRE = 0X00000000 KSSRCSRC = 0X00000000 KSSRCDST = 0X00000000 KSASTQNX = 0X6D64DFC8 KSASTQPR = 0X6D64DFC8 KSASTRPL = 0 KSUPRPUM = 306345 KSUPRPNAM = 309717 KSUPRPRAM = 458752 KSUPRPFM = 0 KSUPRPMM = 768469 KSFD PGA DUMPS Number of completed I/O requests=0 flags=0 END OF PROCESS STATE

9.3. Contrôle des informations d'un dump


10. 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.

alter session set events 'immediate trace name shared_server_state level 10'; alter session set events '60 trace name shared_server_state level 1';

10.2. Utilisation de oradebug

La commande oradebug suivante produit un dump immediat sur l'etat du serveur partagé suivant le niveau fourni.

oradebug setmypid oradebug unlimit oradebug dump shared_server_state (level)

10.3. Contrôle des informations d'un dump

Les divers niveau disponible pour produir le dump sur l'etat du serveur partagé sont

  • Level 1 Décharge seulement l'état systemwide
  • Level 2 Décharges les files d'attentes
  • Level 3 Décharge les circuits dans the service queue
  • Level 4-6 Décharge les infos du dispatcheur
  • Level 7-8 Décharge l'information du shared server
  • Level 9 Décharge inactive dispatcher and server slots
  • Level 10-13 Décharge info on “interesting” circuits
  • Level 14+ Décharge includes information about all circuits

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.

alter session set max_dump_file_size = unlimited; alter session set events 'immediate trace name systemstate level 10';

11.2. Utilisation de oradebug

La commande oradebug suivante provoque un dump systemstate immediat au niveau 10.

select * from dual; oradebug setmypid oradebug unlimit oradebug dump systemstate 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.

Il ne faut pas confondre les couches redo avec les couches du noyau oracle. Les couches redo sont utilisés seulement avec la generation et la journalisation des redo.
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.

alter session set max_dump_file_size = unlimited; alter system dump logfile 'filename' rba min (seqno) . (blkno) rba max (seqno) . (blkno) dba min (filno) . (blkno) dba max (filno) . (blkno) time min (ub4) time max (ub4) layer (word) opcode (word) scn min (scn) scn max (scn) alter system dump logfile '/u01/oradata/oraredo/redo_01a.rdo';

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:

oradebug setospid (process ID) oradebug unlimit oradebug dump errorstack 3
ksedmp: internal or fatal error ----- Call Stack Trace ----- calling call entry argument values in hex location type point (? means dubious value) -------------------- -------- -------------------- ---------------------------- _ksedst+38 CALLrel _ksedst1+0 0 1 _ksedmp+730 CALLrel _ksedst+0 0 _ksdxfdmp+933 CALLreg 00000000 1 _ksdxen+5110 CALLreg 00000000 848E270 12 3 848DAC8 848DA78 _opiodr+5838 CALLreg 00000000 56 11 848E340 _ttcpip+2459 CALLreg 00000000 56 11 848E340 0 _opitsk+2132 CALL??? 00000000 _opiino+1605 CALLrel _opitsk+0 0 0 _opiodr+5838 CALLreg 00000000 3C 4 848FC80 _opidrv+659 CALLrel _opiodr+0 3C 4 848FC80 0 _sou2o+45 CALLrel _opidrv+0 3C 4 848FC80 _opimai_real+112 CALLrel _sou2o+0 848FC90 3C 4 848FC80 _opimai+92 CALLrel _opimai_real+0 2 848FCB8 _OracleThreadStart@ CALLrel _opimai+0 4+780 77E5D338 CALLreg 00000000

14. Utilisation de Oradebug pour tracer une session SQL


14.1. Utilisation de DBMS_SYSTEM

En premier, on'a besoin du SID, SERIAL# et PADDR dans la vue V$SESSION, par exemple :

SQL> select username, sid, serial#, paddr from v$session where username='VIDEO31'; USERNAME SID SERIAL# PADDR -------- --- -------- -------- VIDEO31 14 13202 820532C8 VIDEO31 15 4665 82053EC8
Une fois le SID et SERIAL# sont connus, on peut activer la trace pour chaque session en lançant la commande suivante :

EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION((SID), (SERIAL#), TRUE)
Toute manipulation par l'utilisateur sera tracé au niveau 1. En arrête le tracé par :

EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION((SID), (SERIAL#), FALSE)
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:

SQL> select username, sid, serial#, paddr from v$session where username='VIDEO31'; USERNAME SID SERIAL# PADDR -------- ---- ------- -------- VIDEO31 14 13202 820532C8 VIDEO31 15 4665 82053EC8
Et on'a le SPID en lançant la requête suivante :

SELECT ADDR, PID, SPID FROM V$PROCESS WHERE ADDR = (PADDR from V$SESSION);
Par exemple :

SQL> SELECT ADDR, PID, SPID FROM V$PROCESS WHERE ADDR = '820532C8'; ADDR PID SPID ---- --- ---- 820532C8 9 5408 SQL> SELECT ADDR, PID, SPID FROM V$PROCESS WHERE ADDR = '82053EC8'; ADDR PID SPID ---- --- ---- 82053EC8 13 5410
Puis on active la trace au niveau 4 en utilisant oradebug :

ORADEBUG SETOSPID (SPID de la reqûete) ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 4
Et il ne faut pas oublier d'arrêter la trace aprés avoir recuilli les informations dont vous avez besoins :

ORADEBUG EVENT 10046 TRACE NAME CONTEXT OFF
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 :

oradebug setodpid 3706

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 :

ORADEBUG EVENT XXXXX TRACE NAME ERRORSTACK LEVEL 3
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é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



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.