Identificacao e tratamento de deadlock

3 respostas
phsg

Bom dia,

Minha aplicacao java chama uma procedure que pode ocorre deadlock. Estou querendo saber como identificar que o erro e um deadlock para poder tratar.
Abaixo esta o erro:

[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Transaction(Process ID 80) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Transaction (Process ID 80) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)

at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)

at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)

at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)

at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)

at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)

at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)

at com.microsoft.jdbc.base.BaseStatement.getNextResultType(Unknown Source)

at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)

at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)

at apl.mdb.bd.sqlServer.DadosSQLServer.geraNotaEntradaTrocaAnulado(DadosSQLServer.java:365)

at apl.mdb.fachada.Fachada.geraNotaEntradaTrocaAnulado(Fachada.java:125)

at apl.mdb.importacao.Importacao.importaAnuladoTroca(Importacao.java:15)

at apl.mdb.gui.MDB$2.actionPerformed(MDB.java:166)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1774)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

3 Respostas

T

Para identificar o deadlock:

  • Capturar a exceção (SQLException)
  • Obter o código (getSQLState() e getErrorCode()) que ocorrem quando dá esse erro de deadlock.
    Não sei, para o SQL Server, qual é o SQLState e o ErrorCode que dão quando há deadlock (temo que varie até com o driver; pode ser que o seu driver, o da Microsoft, e o driver JTDS, dêem resultados diferentes.)
fmeyer

thingol:
Não sei, para o SQL Server, qual é o SQLState e o ErrorCode que dão quando há deadlock (temo que varie até com o driver; pode ser que o seu driver, o da Microsoft, e o driver JTDS, dêem resultados diferentes.)

Com certeza 'e o driver da Microsoft que nao esta funcionando direito.

http://jtds.sourceforge.net/

teste com o JTDS e poste os resultados

pcalcado

Que tal corrigir a procedure?

Criado 19 de janeiro de 2007
Ultima resposta 20 de jan. de 2007
Respostas 3
Participantes 4