본문 바로가기

work/mssql

READ_COMMITTED_SNAPSHOT

상황) 특정 테이블에 주기적으로 모든데이터가 삭제되고 다시 인서트 되는 테이블이 있다(truncate & insert 시 불가능.. delete & insert 로 해야함)

이때 insert 가 완료되고 commit 되기 전까지는 commit 전의 데이터가 select 되었으면 한다.

insert & commit 후엔 commit된 데이터를 select 하고 싶다.

with(NOLOCK) 으로 힌트를 주는 방법은 transaction완료가 되기전에 insert된 데이터가 select할 때 마다 건건이 반영된다.

다음과 같은 방법으로  그것이 가능하도록 DB자체를 설정할 수 있다.


-------------------------------------------------------------------------------------------------------------------

출처 : http://stackoverflow.com/questions/262527/how-programaticaly-enable-read-committed-snapshot-in-sql-server

I recommend switching to single-user mode first. That ensures you're the only connection. Otherwise, the query might be suspended.

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

When setting the READ_COMMITTED_SNAPSHOT option, only the connection executing the ALTER DATABASE command is allowed in the database. There must be no other open connection in the database until ALTER DATABASE is complete.

So, use this SQL:

ALTER DATABASE <dbname> SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE <dbname> SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE <dbname> SET MULTI_USER;
share|improve this answer