SQL 연결 18056 오류

jevida(강성욱) 2016.10.11 03:32 Views : 1475

SQL 연결 18056 오류

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

 

SQL Server를 운영하면서 가장 많이 받는 질문 중 하나가 SQL Server 연결 실패에 관한 내용이다. SQL Server는 연결 실패 또는 오류에 따라 다양한 메시지를 나타내며 이 메시지에 따라 처리 방법이 매우 다양하다.

 

이전 포스트에서 SQL Server 인증 실패 시 반환되는 클라이언트메시지 정보에 대해서 다루었다.

 

이번 시간에는 클라이언트가 세션을 다시 시작할 수 없는 18056 오류와 어떤 흐름으로 제어되는지 알아보자.

 

이 포스트는 CSS SQL Server Engineer 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용은 원문을 참고 하길 바란다.

 

아래 그림은 일반적인 18056 오류의 발생에 대한 흐름을 표현 하였다. 응용 프로그램은 풀을 이용하여 연결을 재사용한다. 다음 명령을 실행 할 때 문제가 발생하면 클라이언트 드라이버는 TDS 헤더에 리셋 비트를 설정한다. 예제에서는 ODBC의 SQLExecDirect를 사용하였다.

 

  1. 명령어는 SQL Server에서 수신된 작업자에 할당하고 처리를 시작한다. 리셋 비트가 있는 경우 sp_reset_connection 로직이 호출 된다.
  2. RPC를 추적하는 경우 시작 및 논리적 연결 끊기 이벤트가 생성된다.
  3. 로그인이 다시 실행되고 있는지 암호가 만료되지 않았는지, 데이터베이스는 존재하는지, 사용자는 데이터베이스에 권한을 가지고 있는지 검증이 이루어진다.
  4. 클라이언트 명시적 취소(SQL Cancel) 또는 쿼리 시간 만료가 클라이언트 드라이버에서 SQL Server로 전송 한다. SQL Server는 정보를 읽고 스타트 시간을 캡처하고 취소요청을 통보하고 중지 한다.
  5. 이러한 모든 검사 로직은 쿼리 취소(행동)가 도착하는지 확인한다. 그리고 다시 로그인 실행 처리가 중단되는 경우 18056이 보고되고 처리가 중지 된다.
  6. 주의 이벤트는 항상 완료 이벤트 후에 생성된다. 이벤트는 시간을 기록하고 표시 한다..

 

 

다음 코드는 위의 그림과 같은 패턴을 생성한다. 풀링 된 연결을 사용하지 않은 경우 재설정 활동이 일어나지 않아 쿼리 자체가 중단될 것이다.

dim cn

dim rs

set cn = CreateObject("ADODB.Connection")

set rs = CreateObject("ADODB.Recordset")

for i = 1 to 1000

cn.Open "Provider=SQLNCLI10;Integrated Security=SSPI;Data Source=SQL2K8Server; initial catalog =whatever;"

rs.ActiveConnection = cn

rs.CursorLocation = 2

' 48 = adAsyncExecute + adAsyncFetch

rs.Open "select * from whatever", cn, 0, 1, 48

cn.Cancel

cn.Close

next

 

내부적으로 3617 오류로 발생하고 SQL Server 오류 핸들러에 의해 요청이 실행 중지가 된다. Sys.dm_os_ring_buffers에서 3617오류를 볼 수 있으며 추적 이벤트에서 확인 할 수 있다.

<Record id= "1715" type="RING_BUFFER_EXCEPTION" time="12558630"><Exception><Task address= 0x11B4D1B88</Task><Error>3617</Error><Severity>25</Severity><State>23</State><UserDefined>0</UserDefined></Exception><Stack

 

 

 

[참고자료]

http://sqlmvp.kr/140186042807

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 36254
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 18851
1894 SQL Server에서 Drop 및 Delete 사용자 찾기 jevida(강성욱) 2016.10.12 1701
1893 SQL Server 트랜잭션 로그 읽기 jevida(강성욱) 2016.10.12 2278
1892 MaxBCPThreads에 따른 BCP 병렬출력 jevida(강성욱) 2016.10.11 1124
1891 확장이벤트와 dm_os_wait_stats 대기유형 매핑 jevida(강성욱) 2016.10.11 1961
1890 장기 트랜잭션 확인 및 경고 설정 jevida(강성욱) 2016.10.11 1523
1889 SQL 데이터 수집툴 DiagManager 사용법 jevida(강성욱) 2016.10.11 1386
1888 Windows Server 2012 R2 그룹 관리 서비스 계정 및 SQL 서버 jevida(강성욱) 2016.10.11 1886
1887 Kerbros 구성 관리자 툴 jevida(강성욱) 2016.10.11 1214
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2724
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1427
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3771
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2895
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 970
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1227
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 924
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 1061
» SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1475
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 2033
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 1004
1875 NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1090





XE Login