Bonjour tout le monde,

J'ai besoin de connaître précisément l'espace disque utilisé par une requête dans le TBS UNDO.

Je peux avoir l'espace du TBS UNDO avec la requête suivante mais ce n'est pas suffisant, il me manque la requête dans DBA_SEGMENTS.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
SELECT SUM(BYTES)/(1024*1024) AS "TAILLE EN MO USED" FROM DBA_SEGMENTS WHERE TABLESPACE_NAME = 'UNDOTBS';
 
TAILLE EN MO USED
-----------------
       15529.0625
1 row selected.
Si je regarde les vues V$UNDOSTAT et V$SQL j'ai des choses sympa MAIS je n'arrive pas à trouver précisément ma requête car dans V$UNDOSTAT c'est la plus grosse requête sur une période de 10 minutes qui est enregistrée et pas TOUTES les requêtes SQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select begin_time, end_time, undoblks, TXNCOUNT, sql_text from v$undostat u JOIN v$sql s ON (u.MAXQUERYID = s.SQL_ID) where rownum < 5 order by u.begin_time desc ;
 
BEGIN_TIME	END_TIME	UNDOBLKS	TXNCOUNT	SQL_TEXT
03/29/2016 10:17:14	03/29/2016 10:22:05	574	10 641	select 1 from obj$ where name='DBA_QUEUE_SCHEDULES'
03/29/2016 10:07:14	03/29/2016 10:17:14	2 283	33 746	select 1 from obj$ where name='DBA_QUEUE_SCHEDULES'

Avec l'ordre SQL suivant j'arrive à avoir la taille du TBS UNDO occupée par une session mais à nouveau je n'arrive pas à isoler une requête précise.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT         S.USERNAME AS "SESSION USERNAME", 
S.OSUSER AS "OS USERNAME", 
S.SCHEMANAME AS "SCHEMA",
S.MACHINE AS "MACHINE",
S.PROGRAM AS "PROGRAMME", 
 (T.USED_UBLK * (select BLOCK_SIZE from dba_tablespaces where tablespace_name = 'UNDOTBS'))/(1024*1024) AS "Taille UNDOTBS used Mo"
FROM V$SESSION S, V$TRANSACTION T
WHERE S.SADDR = T.SES_ADDR
ORDER BY "Taille UNDOTBS used Mo" DESC;
 
SESSION USERNAME	OS USERNAME	SCHEMA	MACHINE	PROGRAMME	Taille UNDOTBS used Mo
ACCBATCH	stisyse	ACCBATCH	condate	db_bivc_acc_2s.exe@condate (TNS V1-V3)	0,1719
IR	stisyse	IR	condate	sqlplus@condate (TNS V1-V3)	0,0156
SYS	oracle	SYS	ngcuatdb03	sqlplus@ngcuatdb03 (TNS V1-V3)	0,0078
UVM_BDR	oraexplo	UVM_BDR	ngcuatdb03	oracle@ngcuatdb03 (J000)	0,0078
ACCBATCH	stisyse	ACCBATCH	condate	de_confirmation_acc_2s.exe@condate (TNS V1-V3)	0,0078
ACCBATCH	stisyse	ACCBATCH	condate	sqlplus@condate (TNS V1-V3)	0,0078

Donc si vous savez comment faire le lien entre une requête SQL et l'espace disque pris dans le TBS UNDO je vous en serai très reconnaissant.