ORA-00060: Deadlock detected

Hoy nos dio este error, y buscando información por Internet llegamos a todo esto, todo hay que decirlo gracias al blog de la web http://www.dataprix.com. Espero les sirva tanto como a mi.ya que es fundamental para la buena administración en sap tener estos aspectos bajo control.

Cuando la base de datos oracle intentan hacer cambios en los mismos registros puede salirnos este error en el alert.log.

Vamos a estudiar mas detenidamente el error:

/oracle/XXX/saptrace/background/XXX_ora_28205.trc

Sesiones involucradas (165 y 107), objeto, registro, consulta que lo provoca, etc... Aquí incluyo algunas partes de un fichero de ejemplo. En la primera parte del fichero vemos que sesión sufrirá el rollback(marcada en negrita) y más abajo vemos el bloqueo circular (donde la 165 espera a la 107 y viceversa):

*** 2011-05-17 11:32:20.360
*** ACTION NAME:(2366) 2011-05-17 11:32:20.358
*** MODULE NAME:(/CCSHT/OTA_EXTRACTOR_DATOS) 2011-05-17 11:32:20.358
*** SERVICE NAME:(SYS$USERS) 2011-05-17 11:32:20.358
*** SESSION ID:(107.7733) 2011-05-17 11:32:20.358
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TX-000e0019-000057b9 20 107 X 103 165 X
TX-000d000c-00001171 103 165 X 20 107 X
session 107: DID 0001-0014-0000029E session 165: DID 0001-0067-000000EF
session 165: DID 0001-0067-000000EF session 107: DID 0001-0014-0000029E
Rows waited on:
Session 165: obj - rowid = 0002D659 - AAAtZZAAOAABCUsAAA
(dictionary objn - 185945, file - 14, block - 271660, slot - 0)
Session 107: obj - rowid = 0002D659 - AAAtZZAAOAABCUvAAA
(dictionary objn - 185945, file - 14, block - 271663, slot - 0)

Con esta información también podemos saber exactamente que objetos y registro/s es el origen de la disputa. Si es algo que se repite de forma cíclica podemos ayudar al responsable de la aplicación dandole más datos (además de las consultas) para que lo resuelva. Para saber que registro de que tabla:

Obtenemos el nombre del objeto del diccionario de datos:
SELECT owner, object_name, object_type FROM dba_objects WHERE object_id = 185945;

Consultamos la tabla obtenida buscando el registro por el rowid:
SELECT * FROM tabla WHERE rowid=’AAAM8cAA5AAACX+AAF’’

Un poco más abajo del fichero también se puede ver que consultas han provocado el deadlock y otra información como la cantidad de “waits” de la session en cuestión etc...

Info1 Info2

SAP-ADM