2017-11-26 1 views
0

SQL Server에서 트랜잭션 외부에서 테이블을 잠 그거나 잠금 해제하는 방법은 무엇입니까??트랜잭션 외부에서 테이블을 잠 그거나 잠금 해제하는 방법

이유 : 동시에 트랜잭션 내에서 실행할 수 없습니다하는 문장을 실행하는 동안 내 응용 프로그램의 여러 인스턴스가

+0

어떤 상황에서. –

+3

잠금은 일반적으로 트랜잭션 기간 동안 만 유지됩니다. 아마도 당신이 원하는 것은 세션 레벨 응용 프로그램 잠금입니다. –

+0

응용 프로그램 잠금으로 인해 작업을 수행 할 수 있습니다. 그런 식으로 해답을 기꺼이 받아 들일 것입니다. –

답변

2

하나의 옵션은 sp_getapplock로 볼 수 있습니다, 서로의 발가락에 스테핑없이 하나 개의 테이블과 상호 작용해야 및 sp_releaseapplock.

이것은 테이블을 잠그지 않지만 임의의 명명 된 리소스입니다. 그런 다음 스토어드 프로 시저를 통해 잠금을 획득 한 후 해당 테이블에 대해서만 작업하도록 애플리케이션을 구성 할 수 있습니다. @LockOwner = 'Session' 당신이 트랜잭션의 외부에서이 잠금 장치를 사용할 수 있다는 것을 의미 지정

EXEC sp_getapplock @Resource = 'ResourceName', @LockMode = 'Exclusive', @LockOwner = 'Session' 

-- UPDATE table, etc. 

EXEC sp_releaseapplock @Resource = 'ResourceName', @LockOwner = 'Session' 

:

이의 예는 다음과 같을 것이다.

잠금 및 해제 명령문을 고유 한 저장 프로 시저로 추출하여 논리가 한 번만 표시되도록하는 옵션도 있습니다. 이러한 저장 프로 시저는 잠금이 획득/해제되었는지 여부를 지정하는 결과와 함께 호출 프로 시저에 값을 반환 할 수 있습니다.

이 시점에서이 메커니즘은 모든 절차/테이블/기타에 적용됩니다. 거기에는 논쟁이있을 수 있습니다.

관련 문제