Domanda

Esistono soluzioni alternative per rimuovere il deadlock senza uccidere la sessione?

È stato utile?

Soluzione

Da Guida ai concetti :

  

Oracle rileva automaticamente le situazioni di deadlock e le risolve ripristinando una delle istruzioni coinvolte nel deadlock, rilasciando in tal modo un set di blocchi di riga in conflitto.

Non devi fare nulla per rimuovere un deadlock, Oracle se ne occupa automaticamente. La sessione non viene interrotta, viene ripristinata a un punto appena prima dell'istruzione trigger. L'altra sessione non è interessata (ovvero, attende ancora il blocco fino a quando la sessione di rollback non esegue il commit o il rollback della transazione).

Nella maggior parte dei casi i deadlock dovrebbero essere eccezionalmente rari. È possibile prevenire tutti i deadlock utilizzando le istruzioni FOR UPDATE NOWAIT anziché FOR UPDATE.

Vedi anche

  

Discussione sulla rimozione del deadlock attivo AskTom

Altri suggerimenti

I deadlock vengono automaticamente cancellati in Oracle annullando una delle istruzioni bloccate. Non è necessario farlo manualmente. Una delle sessioni riceverà "ORA-00060" e dovrebbe decidere se riprovare o ripristinare.

Ma dalla tua descrizione sembra che tu abbia un blocco, non un deadlock.

Ad ogni modo, la sessione di blocco dovrebbe in qualche modo rilasciare il suo blocco - eseguendo il commit o il rollback della transazione. Puoi solo aspettarlo (possibilmente per molto tempo). Se è possibile modificare il codice dell'applicazione, probabilmente è possibile riscriverlo per rilasciare il blocco o evitarlo. Altrimenti, devi interrompere la sessione per sbloccare immediatamente le risorse.

No, Oracle 10g non sembra risolvere automaticamente i deadlock nella pratica. Avevamo i dealock e abbiamo dovuto cancellare le sessioni manualmente.

Questa pagina può aiutare a identificare se si hanno deadlock Identificazione e risoluzione di Oracle ITL Deadlock

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top