본문 바로가기

DBMS/MS-SQL

[MS-SQL] Lock 관리

반응형

개요

 

구성환경

SQL Server 2019 / Windows Server 2016

 

LOCK 잠금및 해제

세션1) 테이블 조회

1> select * from test1
2> go
id              age         name
--------------- ----------- --------------------
cat1                      1 mycat1
cat2                      2 mycat2
cat3                      3 mycat3

(3 rows affected)
1>

세션1) 트랜잭션 시작 및 트랜잭션 조회

> begin tran : 트랜잭션 시작

> dbcc opentran : 활성 트랜잭션 조회

1> begin tran => 트랜잭션 시작
2> insert into test1 values ('cat4',4,'mycat4')
3> go

(1 rows affected)
1> select * from test1;
2> go
id              age         name
--------------- ----------- --------------------
cat1                      1 mycat1
cat2                      2 mycat2
cat3                      3 mycat3
cat4                      4 mycat4

(4 rows affected)
1> dbcc opentran => 활성 트랜잭션 조회
2> go 
데이터베이스 'catdb'의 트랜잭션 정보입니다. 

가장 오래 전에 활성화된 트랜잭션: 
    SPID(서버 프로세스 ID): 52 
    UID(사용자 ID) : -1 
    이름          : user_transaction 
    LSN           : (37:912:46) 
    시작 시간    : 02 14 2020 10:58:23:153AM 
    SID           : 0xba295b01fd2d664bad43fe602c2ba464 
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오. 
1>

세션2) 테이블 조회

1> select * from test1   => table1에 LOCK 걸기전에는 정상적으로 테이블이 조회됨
2> go
id              age         name
--------------- ----------- --------------------
cat1                      1 mycat1
cat2                      2 mycat2
cat3                      3 mycat3

(3 rows affected)

>>> 세션1 에서 배탁락 설정 <<<

1> select * from test1
2> go

=> 테이블이 조회되지 않고 이상태에서 LOCK이 해제되기 전까지 대기상태

 

관리자세션) Lock 조회

> exec sp_lock : lock 조회

> sp_who2 spid : spid의 데이터베이스엔진 현재 사용자, 세션 및 프로세스에 대 한 정보를 제공

> select * from [db_name].[schema].sysobjects where id = ObjID : Object ID를 이용하여 락이 걸린 테이블명 조회

 

세션1) 트랜잭션 커밋

1> commit tran
2> dbcc opentran
3> go
열려 있는 활성 트랜잭션이 없습니다.
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.
1>

관리자세션) 강제적으로 세션 Kill (comit tran을 기다리지 않고 강제로 세션 kill)

Syntax) kill spid

1> kill 52
2> go
1>
반응형