2014-05-18 2 views
0

나는 최대 절전 모드 버전 4를 사용한다. 우리는 배치 프로세스에 문제가있다. 우리의 시스템은 테이블 레벨 최대 절전 모드에서 잠금

  • 과정이 업데이트 'COMPLETED'상태로 상태 '진행'즉시

    1. 아래로 '보류 중'상태
    2. 업데이트에있는 기록의 선택 세트를 작동

    두 개의 서버가 있고 동시에 실행될 때 문제가 발생합니다. 동시성 문제가 발생할 염려가 있습니다. 그래서 우리는 처음 두 단계에서 DB Lock을 구현하려고합니다. query.setLockOptions()을 사용했지만 작동하지 않는 것 같습니다. 선택 및 갱신을 완료 할 때까지 테이블 레벨 잠금 또는 행 레벨 잠금을 갖는 다른 것이 있습니까? 둘 다 같은 세션에 있습니다.

    우리는 JDBC에 LOCK TABLE <TABLE_NAME> WRITE 옵션이 있습니다. 하지만 우리는 어떻게 최대 절전 모드로 구현할 것인가 아니면 최대 절전 모드에서 select..for 업데이트를 구현할 수 있습니까?

  • 답변

    3

    "선택 업데이트 ..."는 사용자가 설정할 수있는 LockMode.UPGRADE을 통해 최대 절전 모드에서 지원됩니다 (예 : NamedQuery).

    그러나 사용하여 응용 프로그램/수동 테이블 행 잠금 (데이터베이스 연결이 트랜잭션을 절반 방법을 상처 입는 특히) 몇 가지 단점을 가지고 있으며, 여러분의 갱신 절차없이 수행 할 수 있습니다

    • 시작 트랜잭션을.
    • 업데이트 테이블 세트 상태 = 'PENDING', server_id = 1 where state = 'IN PROGRESS';
    • 커밋 트랜잭션
    • 상태 선택에서 'PENDING'및 server_id = 1;
    • [프로세스 기록]

    각 서버가이 작동 할 수있는 고유 번호가 있어야하지만, 덜 오류가 발생하기 쉬운 것입니다 당신이 그것을 잘 있어야하는데 어떤 DBMS를하자 : 분리 (ACID 참조).

    관련 문제