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