Ho riscontrato spesso questo errore "ora-00060 rilevato durante l'attesa della risorsa" ora nella mia applicazione quando più utenti utilizzano l'applicazione. Ho ricevuto il file di traccia dall'amministratore di Oracle, ma ho bisogno di aiuto per leggerlo. Di seguito sono riportati alcuni bit di dati del file di traccia, che spero possano aiutare a individuare la causa.Individuazione della causa dell'errore deadlock dal file di traccia oracle
*** 2013-06-25 09:37:35.324
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
TM-000151a2-00000000 210 72 SX SSX 208 24 SX SSX
TM-000151a2-00000000 208 24 SX SSX 210 72 SX SSX
session 72: DID 0001-00D2-000000C6 session 24: DID 0001-00D0-00000043
session 24: DID 0001-00D0-00000043 session 72: DID 0001-00D2-000000C6
Rows waited on:
Session 72: no row
Session 24: no row
----- Information for the OTHER waiting sessions -----
Session 24:
sid: 24 ser: 45245 audsid: 31660323 user: 90/USER
flags: (0x45) USR/- flags_idl: (0x1) BSY/-/-/-/-/-
flags2: (0x40009) -/-/INC
pid: 208 O/S info: user: zgrid, term: UNKNOWN, ospid: 2439
image: [email protected]
client details:
O/S info: user: , term: , ospid: 1234
machine: xyz.local program:
current SQL:
delete from EMPLOYEE where EMP_ID=:1
----- End of information for the OTHER waiting sessions -----
Information for THIS session:
----- Current SQL Statement for this session (sql_id=dyfg1wd8xa9qt) -----
delete from EMPLOYEE where EMP_ID=:1
===================================================
Sarei grato se qualcuno possa dirmi cosa dice il "grafico del deadlock". Anche le file in attesa sulla sezione non dicono righe.
Ho anche letto in alcuni blog che la sezione "sqltxt" del file di traccia può suggerire la causa. Di seguito è la query che vedo in quella sezione.
select /*+ all_rows */ count(1) from "USERS"."EMPLOYEE_SALARY" where EMPSAL_EMP_ID=:1
La tabella employee_salary ha un vincolo di foreignkey sulla colonna EMPSAL_EMP_ID.
Il suggerimento sql dice "all_rows", quindi vuol dire che questa tabella ottiene il blocco del livello di tabella quando si eliminano i record dalla tabella dei dipendenti? non ho un indice sulla colonna chiave straniera attualmente. Sarebbe utile aggiungere un indice su questa colonna?
Gentilmente inviare, nel caso in cui siano necessarie ulteriori informazioni.
Grazie
Buon argomento sulle modalità di blocco in Oracle: http://www.soug.ch/fileadmin/user_upload/Newsletter/NL_public/NL_2013_1_Award_Article.pdf Sembra che tu abbia perso l'indice sulla colonna 'USERS.EMPLOYEE_SALARY.EMPSAL_EMP_ID' e il vincolo esterno con 'on delete cascade'. – ThinkJet
sembra che tu abbia due sessioni cercando di eliminare la stessa riga. – haki