오라클은 명령어를 날리고 commit 또는 rollback을 사용하게 되는데요
예를 들어서 insert든 update든 명령을 사용했을때 조회는 되더라고요
로우락이 걸려도 테이블락은 걸리는경우가 잘없던데(이부분은 자세히는 모릅니다 ㅠㅠ)
근데 mssql에서도 중요한 작업을 할때 한번씩 begin tran을 쓰면 auto commit이 안되고
수동으로 commit 또는 rollback을 해주면 되던데
문제는 테이블락이 걸려버리더라고요 제가 작업을 할때 다른곳에서 조회를 하면
조회가 안되어버리는거죠
이걸 오라클 처럼 방지할수있는게 있을까요?
MSSQL 2005버전 사용하고 있습니다.
에러가 안나게 하는 방법은 있습니다.
SELECT 할 때 FROM 테이블 뒤에 WITH(격리수준) 옵션을 주면 됩니다.
옵션 사용은 작업하는 쪽이 아닌 조회하는 쪽에서 주는 것입니다.
- WITH(NOLOCK) - 테이블 락과 관계없이 커밋되지 않은 변경중인 데이터까지 보임
- WITH(UNCOMMITTED) - nolock 과 동일
- WITH(READPAST) - 커밋되지 않은 변경중인 데이터는 제외하고 나머지만 데이터만 보임
단 오라클과는 동작방식이 다릅니다.
오라클은 변경중인 데이터가 있어도 그 데이터의 변경전 이미지를 보여줍니다.