문제

데이터베이스 테이블을 사용하여 분산 상호 제외를 만들고 싶습니다. 저장된 절차에 다음 인터페이스를 갖는 것이 좋을 것입니다.

기다리기 (고유 한 식별기)

나는 원래 고유 식별자 테이블을 가지고 이것을 구현하려고 생각하고있었습니다. 절차에 대한 호출은 테이블에 고유 식별자가 존재하지 않을 때까지 기다립니다. 그러나 지정된 고유 식별자가 테이블에서 제거되었을 때 어떻게 호출 스레드를 깨우는 지 잘 모르겠습니다.

어떤 아이디어? 데이터베이스가이를 수행하기에 적합한 장소가 아닌 경우 작동 할 제 3 자 도구가 있습니까 (오픈 소스가 바람직하게는)?

(교착 상태를 피하기 위해 대기 작업에 타임 아웃을 포함 시키거나 SQLCommand에 타임 아웃을 갖고 싶습니다).

도움이 되었습니까?

해결책

시스템 저장 절차를 살펴보십시오.

 sp_getapplock

그것은 당신이하려는 일을 성취하는 데 도움이 될 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms189823.aspx

당신은 그것을 고유 한 식별기를 매개 변수화하는 Proc에 넣을 수 있습니다 ...

BEGIN TRAN

DECLARE @result int

EXEC @result = sp_getapplock @Resource = 'YOUR_uniqueidentifier_HERE', 
                             @LockMode = 'Exclusive',
                             @LockTimeout = 90

IF @result NOT IN ( 0, 1 )   -- Only successful return codes
BEGIN
  PRINT @result
  RAISERROR ( 'Lock failed to acquire...', 16, 1 )
END 
ELSE
BEGIN
    -- DO STUFF HERE 
END
EXEC @result = sp_releaseapplock @Resource = 'YOUR_uniqueidentifier_HERE'  

COMMIT TRAN
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top