안녕하세요?
Sql Server 2008 R2버전을 사용한 시스템을 운영중인데,
동시에 TR호출되어 Data가 꼬이는 경우가 생겼네요..ㅎㅎ
혹시 Transaction 호출시에 처음에 SELECT를 하여 상태값을 조회 한 이후에
Update, Insert 작업을 수행하는 방법도 고민하고 있는데,
Select후에 중간에 Transaction이 치고 들어와 해당 상태값을 Update하는 경우
Data정합성이 맞지 않는 현상을 막을 수가 없고,
처음에 Select 시에 Exclusive Lock을 걸어 다른 TR에서 Select 조차 하지 못하게 만드려고합니다..
ㅜㅜ 검색능력의 부재인지 Select 시에 Exclusive Lock을 거는 방법을 못찼겟네요...
댓글 부탁드리겠습니다 감사합니다.
Comment 2
-
이스트럭(강동운)
2014.05.29 14:10
-
한태
2016.02.17 19:59
select * from 테이블명 with(xlock)
을 사용하면 select에 exclusive lock 을 걸 수 있습니다. xlock 사용시에는 rowlock, paglock, tablock과 함께 지정할 수 있는데 이 경우 배타적 잠금이 지정한 수준으로 적용됩니다.
작성자님의 상황처럼 select 한 값을 받아서 update 하는 경우에 updlock 을 사용할 수도 있습니다. select * from 테이블명 with(updlock)을 사용하여 트랜잭션이 완료될 때까지 잠금을 유지하면 다른 트랜잭션이 들어오는 경우는 막을 수 있습니다.
updlock은 행 수준 또는 페이지 수준에서만 업데이트 잠금을 사용하여 테이블 수준 잠금이 사용되는 경우에는 배타잠금이 사용됩니다.
안녕하세요.
begin tran
select * from table with(xlock) ~~
으로 사용이 가능합니다.
아시다 싶이.. 베타락은 다른 세션에서 접근할 수 없기 때문에.. 주의해서 사용하셔야 합니다.
물론 다른 세션에서 with(nolock) 으로는 조회가 가능합니다.
감사합니다 ^^