SQL Server 에서 커서 를 풀 지 않 은 방법 보기

그동안 SQL SERVER 의 커서 에 별로 감기 에 걸 리 지 않 았 고 SQL Server 에 있 는 커서 도 거의 사용 하지 않 았 다.며칠 전 한 네티즌 이 데이터베이스 에 풀 려 있 지 않 은 커서 를 어떻게 검사 하 느 냐 고 물 어 재 미 있 었 다.테스트 를 통 해 검증 한 결과 이 를 정리 했다.
세 션 1:프로그램 이나 스 크 립 트 를 시 뮬 레이 션 합 니 다.커서 를 연 후에 커서 를 닫 거나 놓 는 것 을 잊 습 니 다.

DECLARE Cursor_Test CURSOR FORSELECT * FROM dbo.TEST;OPEN Cursor_Test; 
이때 만약 우리 가 데이터베이스 에 방출 되 지 않 은 커서 를 어떻게 검사 합 니까?사실 SQL SERVER 는 동적 관리 함수 sys.dm 를 제공 합 니 다.exec_cursors,각종 데이터베이스 에서 열 린 커서 에 대한 정 보 를 되 돌려 줍 니 다.

SELECT * FROM sys.dm_exec_cursors(0) 
이 동적 관리 함수 가 되 돌아 오 는 표 의 각 필드 에 대한 설명 은 MSDN 문 서 를 참고 할 수 있 습 니 다.데이터베이스 버 전에 따라 차이 가 있 습 니 다.닫 히 지 않 은 커서 를 조회 하려 면 필드 isopen 필터 링(커서 가 열 린 상태 인지 지정 합 니 다.1 은 열기,0 은 닫 기)
세 션 2:닫 히 지 않 은 커서 보기

SELECT 
session_id , 
cursor_id , 
name , 
creation_time , 
is_openFROM 
sys.dm_exec_cursors(0)WHERE 
is_open = 1; 

닫 혔 지만 풀 리 지 않 은 커서 를 보 려 면 세 션 1 에서 커서 닫 기 명령 을 실행 할 수 있 습 니 다.CLOSE CursorTest;그러나 커서 를 놓 지 않 고 다음 과 같이 캡 처 합 니 다.

또 서버 에서 지 정 된 시간(1 시간)이상 열 린 커서 의 정 보 를 아래 SQL 로 확인 하고 필요 에 따라 조회 조건 을 자체 적 으로 조정 할 수 있다.

SELECT creation_time 
,cursor_id 
,name 
,c.session_id 
,login_name 
,c.creation_time 
,c.is_openFROM 
sys.dm_exec_cursors (0) AS c 
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_idWHERE 
DATEDIFF(hh, c.creation_time, GETDATE()) > 1;GO
위 에서 설명 한 것 은 소 편 이 소개 한 SQL Server 에서 커서 를 풀 지 않 은 방법 을 보 는 것 입 니 다.도움 이 되 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기