세션 컨텍스트 정보 사용

응용 프로그램에서는 세션 컨텍스트 정보를 사용하여 같은 세션에서 실행되는 여러 개의 일괄 처리, 저장 프로시저, 트리거 또는 사용자 정의 함수에서 참조될 수 있는 이진 값(최대 128바이트)을 설정할 수 있습니다. SET CONTEXT_INFO 문을 사용하여 세션 컨텍스트 값을 설정하고 다음 중 하나를 사용하여 검색할 수 있습니다.

  • CONTEXT_INFO 함수
  • sys.dm_exec_requestssys.dm_exec_sessions 동적 관리 뷰와 sys.sysprocesses 호환성 뷰의 context_info

세션 컨텍스트 정보는 Transact-SQL 변수와는 다릅니다. 이 변수의 범위는 현재 Transact-SQL 일괄 처리, 저장 프로시저, 트리거 또는 사용자 정의 함수로 제한됩니다. 세션 컨텍스트 정보를 사용하여 각 사용자 또는 응용 프로그램의 현재 상태와 관련된 정보를 저장할 수 있습니다. 그런 다음 이 정보로 Transact-SQL 문의 논리를 제어할 수 있습니다.

CONTEXT_INFO 함수는 현재 세션의 세션 컨텍스트를 검색하는 데 사용되는 표준 방법입니다. 또한 sys.dm_exec_requests 또는 sys.dm_exec_sessions 동적 관리 뷰의 context_info 열에서 모든 현재 세션 및 일괄 처리에 대한 세션 컨텍스트 값을 검색할 수 있습니다. 이러한 뷰에서 값을 선택하려면 SELECT 및 VIEW SERVER STATE 권한을 가지고 있어야 합니다. CONTEXT_INFO 함수를 사용할 때는 두 권한이 필요하지 않습니다.

세션 컨텍스트 정보는 주로 동일한 세션의 여러 일괄 처리에 지속될 수 있는 값을 설정할 때 사용합니다. 다음 예는 여러 개의 일괄 처리 실행 후 참조될 수 있는 값을 설정하는 것을 보여 줍니다.

-- Set context information at start.
SET CONTEXT_INFO 0x125666698456;
GO
-- Perform several nonrelated batches.
EXEC sp_helpfile;
GO
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE Name LIKE (N'Metal%')
ORDER BY ProductID;
GO
-- Select the context information set several batches earlier.
SELECT CONTEXT_INFO();
GO

세션 컨텍스트 정보 값

현재 세션에 대해 SET CONTEXT_INFO를 아직 실행하지 않은 경우 다음 세션 값이 보고됩니다.

  • CONTEXT_INFO 함수가 NULL을 반환합니다.
  • 시스템 뷰에서 현재 세션 및 요청과 관련된 행의 context_info 열 값이 128바이트의 이진수 0으로 설정됩니다.

SET CONTEXT_INFO를 실행한 후 다음 원본에서 새 값을 바로 사용할 수 있습니다.

  • CONTEXT_INFO 함수

    SELECT CONTEXT_INFO() AS MyCtxInfo;
    
  • 현재 일괄 처리와 관련된 sys.dm_exec_requests 행의 context_info

    SELECT context_info AS MyCtxInfo
    FROM sys.dm_exec_requests
    WHERE session_id = @@SPID
       AND request_id = CURRENT_REQUEST_ID();
    
  • 현재 세션과 관련된 sys.sysprocesses 행의 context_info

    SELECT context_info AS MyCtxInfo
    FROM sys.sysprocesses
    WHERE spid = @@SPID;
    

SET CONTEXT_INFO 문이 포함된 일괄 처리의 실행이 완료되기 전까지는 새 값이 sys.dm_exec_sessions 뷰로 전파되지 않습니다. 일괄 처리가 완료되면 현재 세션과 관련된 행에 새 값이 표시됩니다.

SELECT context_info AS MyCtxInfo
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

다음 예는 시스템 뷰 또는 CONTEXT_INFO 함수에서 새 세션 컨텍스트 정보 값이 표시되는 때를 보여 줍니다.

-- Set a context value before the batch starts.
SET CONTEXT_INFO 0x9999
GO
-- Set a new context value in the batch.
SET CONTEXT_INFO 0x8888

-- Shows the new value available in the
-- sys.dm_exec_requests view while still in the batch.
SELECT context_info as RequestCtxInfoInBatch
FROM sys.dm_exec_requests
WHERE session_id = @@SPID
   AND request_id = CURRENT_REQUEST_ID();

-- Shows the new value available from the
-- CONTEXT_INFO function while still in the batch.
SELECT CONTEXT_INFO() AS FuncCtxInfoInBatch;

-- Shows that the sys.dm_exec_sessions view still
-- returns the old value in the batch.
SELECT context_info AS SessCtxInfoInBatch
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

-- Shows the new value available in the
-- sys.sysprocesses view while still in the batch.
SELECT context_info AS ProcsCtxInfoInBatch
FROM sys.sysprocesses
WHERE spid = @@SPID;

-- End the batch.
GO

-- Shows that the sys.dm_exec_sessions view now
-- returns the new value.
SELECT context_info AS SessCtxInfoAfterBatch
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

세션 컨텍스트 정보 및 MARS

응용 프로그램에서는 MARS(Multiple Active Result Sets)를 사용하여 동일한 연결에서 동시에 여러 개의 일괄 처리나 요청을 실행할 수 있습니다.

MARS 연결의 일괄 처리 중 하나가 SET CONTEXT_INFO를 실행하면 다음 원본에서 새 컨텍스트 값을 바로 사용할 수 있습니다.

  • 값을 설정한 일괄 처리에 의해 실행된 CONTEXT_INFO 함수
  • 값을 설정한 일괄 처리와 관련된 sys.dm_exec_requests 뷰의 행

값을 설정한 일괄 처리의 실행이 완료되기 전까지는 새 컨텍스트 값이 다음 원본으로 전파되지 않습니다.

  • 값을 설정한 일괄 처리와는 다른 일괄 처리에 의해 실행된 CONTEXT_INFO 함수. CONTEXT_INFO는 값을 설정한 일괄 처리가 완료된 후 시작된 일괄 처리에서만 새 값을 반환합니다.
  • 값을 설정한 일괄 처리와 관련된 sys.dm_exec_sessions 뷰의 행

참고 항목

개념

일괄 처리 실행 환경 및 MARS

관련 자료

CONTEXT_INFO(Transact-SQL)
SET CONTEXT_INFO(Transact-SQL)
sys.dm_exec_requests
sys.dm_exec_sessions
sys.sysprocesses(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기