2009-08-11 6 views
0

MS SQL Server에서 교착 상태가 발생하는 문제가 있습니다. 동일한 코드가 MySQL에서 문제없이 실행됩니다.ROWLOCK을 EJB와 함께 사용하는 방법

내 문제는 내가 장치에 연결된 작업을 삭제하라는 요청을 받고 나면 같은 장치에 대한 새로운 작업을 생성하라는 요청을 받는다는 것입니다. 대부분의 경우 문제없이 작동하지만 잠시 동안 장치에 대한 새 작업을 생성하라는 요청을 받으면 삭제 요청이 완료되지 않고 교착 상태가됩니다.

응용 프로그램이 JBoss에서 실행 중이며 메시지 큐에서 요청을 수신합니다.

나는 rowlock 키워드를 사용하여 MSSQL에서이 문제를 해결할 수 있다는 것을 알았지 만 명명 된 쿼리를 사용할 때 MySQL을 지원할 때 어떻게 활성화 할 수 있습니까?

또는 같은 장치에 대한 다음 요청을 실행하기 전에 하나의 요청이 완료 될 수있는 다른 방법이 있습니까?

2009-08-11 10:03:22,621 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1205, SQLState: 40001 
2009-08-11 10:03:22,621 ERROR [org.hibernate.util.JDBCExceptionReporter] Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 
2009-08-11 10:03:22,621 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session 
org.hibernate.exception.LockAcquisitionException: could not delete: [dme.dm.device.Task#131] 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:82) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 
---cut cut cut--- 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source) 
---cut cut cut--- 

답변

0

이의 동료에서 나는 그가 오랫동안 대신 pagelock의 MSSQL 사용 노 걸이를 만들려고했다고 들었다,하지만 운 :

제거 일부있는 스택 트레이스는 다음과 같습니다. 매번 예외를 잡아 내고 쿼리를 다시 실행하는 등의 작업을해야했습니다.

내 경우에는 EJB를 사용하기 때문에 최대 절전 모드에서 행 잠금을 강화하는 방법을 볼 수 없다.

문제가되는 페이지 잠금 인 것은 내가 찾을 수있는 유일한 설명입니다. 삭제 된 항목과 삽입 된 항목은 연결되어 있지 않습니다 (손길이 닿지 않은) 장치와 사용 된 테이블을 제외하고는 연결되어 있지 않습니다.

이제 해결책은 예외를 잡아서 삭제를 다시 실행하는 것입니다.

관련 문제