Session bloquée : où est l'ordre SQL bloquant?
Bonjour,
J'ai une session qui est bloquée par une autre.
L'ordre SQL ci-dessous me ramène les infos dont j'ai besoin SAUF l'ordre SQL qui bloque ma session.
J'ai cherché dans V$SQL mais il ne s'y trouve pas. Je crois que cette vue a une durée de rétention pour stocker les ordres SQL mais là, au bout d'une heure sur une abse avec quasiment pas d'activité il ne s'y trouve plus!
Si vous pouviez me dire où chercher, ce serait sympa.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| SELECT
SBLOCKED.BLOCKING_SESSION AS "SESSION BLOQUANTE",
SBLOCKED.SID AS "SESSION BLOQUEE",
SBLOCKING.OSUSER AS "OSUSER BLOQUANT",
SBLOCKED.OSUSER AS "OSUSER BLOQUE",
SBLOCKING.USERNAME AS "USERNAME BLOQUANT",
SBLOCKED.USERNAME AS "USERNAME BLOQUE",
SBLOCKING.PROGRAM AS "PROGRAMME BLOQUANT",
SBLOCKED.PROGRAM AS "PROGRAMME BLOQUE",
SBLOCKED.STATE AS "ETAT BLOQUE",
SBLOCKED.WAIT_TIME_MICRO / (1000000 *60) AS "BLOCAGE MINUTES",
SBLOCKED.ROW_WAIT_OBJ#,
OB.OBJECT_NAME AS "OBJET BLOQUE",
SBLOCKED.ROW_WAIT_FILE#,
SBLOCKED.ROW_WAIT_BLOCK#,
SBLOCKED.ROW_WAIT_ROW#,
SBLOCKED.SQL_ID AS SQL ID BLOQUE,
SQL_BLOQUE.sql_text AS "ORDRE SQL BLOQUE"
FROM
V$SESSION SBLOCKED,
V$SESSION SBLOCKING,
V$SQL SQL_BLOQUE,
DBA_OBJECTS OB
WHERE
SBLOCKED.BLOCKING_SESSION = SBLOCKING.SID AND
SBLOCKED.SQL_ID = SQL_BLOQUE.SQL_ID AND
SBLOCKED.ROW_WAIT_OBJ# = OB.OBJECT_ID AND
SBLOCKED.STATUS = 'ACTIVE' AND
SBLOCKED.BLOCKING_SESSION IS NOT NULL
ORDER BY SBLOCKED.BLOCKING_SESSION;
SESSION BLOQUANTE: 255
SESSION BLOQUEE: 297
OSUSER BLOQUANT: X097933
OSUSER BLOQUE: X097933
USERNAME BLOQUANT: AFPL
USERNAME BLOQUE: ACCBATCH
PROGRAMME BLOQUANT: toad.exe
PROGRAMME BLOQUE: toad.exe
ETAT BLOQUE: WAITING
BLOCAGE MINUTES: 227.179176983333
ROW_WAIT_OBJ#: 333618
OBJET BLOQUE: ZZZ_TEST_DDU
ROW_WAIT_FILE#: 35
ROW_WAIT_BLOCK#: 1524406
ROW_WAIT_ROW#: 0
SQL_ID BLOQUE: 6mc4jxxmqdxkr
ORDRE SQL BLOQUE: update ZZZ set LIB = '02' where ID = 1 |
Session bloquée : ou est la requête SQL bloquant?
Salue,
Tout d'abord, le code est peut être dans la vue v$sqlarea,
et voici un script qui utilise cette vue, qui te donnera la
requête en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
select p.username pu , s.username su, s.status stat,
s.sid ssid, s.serial# sser, substr(p.spid,1,8) spid,
substr(sa.sql_text,1,2000) sqltxt
from v$process p, v$session s, v$sqlarea sa
where p.addr = s.paddr and s.username is not null and s.sql_address = sa.address(+) and
s.sql_hash_value = sa.hash_value(+)
and s.sid in (select s.sid ifrom
from v$locked_object v,
dba_objects d,
v$lock l,
v$session s
where v.object_id = d.object_id
and v.object_id = l.id1
and v.session_id = s.sid
)
order by 1,2,7 ; |
Bonne chance !