/******************************************************************************************
-- Title : [SQL2k5] SNAPSOT ISOLATION LEVEL 테스트
-- Reference : mcpworld.com
-- Key word : set transaction isolation level snapshot set allow_snapshot_isolation on
******************************************************************************************/
/*
-- 테스트 1 - 세션 #1 : 디폴트 상태에서의 블로킹 발생 여부 테스트
*/
create database snapshotil;
go
 
use snapshotil;
go
 
create table snapshottbl (c1 int, c2 varchar(max));
go
 
insert snapshottbl (c1, c2) values (1,'test');
insert snapshottbl (c1, c2) values (2,'test');
go
 
begin tran
delete snapshottbl;
go
 
-- 세션 #2 --> readcommitted 모드 select 문은 블로킹 당함.
select * from snapshottbl

-- 세션 #1 
rollback tran;
go

 
/*
-- 테스트 2 - 세션 #1 : 데이터베이스 옵션 설정 후 블로킹 발생 여부 테스트
*/
set transaction isolation level snapshot;
go
 
begin tran
delete snapshottbl;
go 
/*
메시지 3952, 수준 16, 상태 1, 줄 2
데이터베이스 'snapshotil'에서 스냅숏 격리가 허용되지 않으므로
스냅숏 격리 트랜잭션이 이 데이터베이스에 액세스하지 못했습니다.
스냅숏 격리를 허용하려면 alter database를 사용하십시오.
*/
 
rollback tran;
go
 
/*
-- 테스트 3 - 세션 #1 : db 옵션 설정 후 블로킹 발생 여부 테스트
*/
alter database snapshotil set allow_snapshot_isolation on;
go
 
begin tran
delete snapshottbl;
go
 
-- 세션 #2
set transaction isolation level snapshot
go
 
select * from snapshottbl
go
 
-- 세션 #1
rollback tran
go
 
alter database snapshotil set allow_snapshot_isolation off;
go
 
set transaction isolation level read committed;

+ Recent posts

티스토리 툴바