SQL 연결 18056 오류

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

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 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 598
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2524
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1395
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3543
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2795
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 903
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1188
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 905
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 1032
» SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1385
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 1920
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 982
1875 NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1059
1874 AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1214
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3425
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1626
1871 DMV를 활용한 CPU 트러블슈팅 - Sys.dm_exec_query_stats, sys.dm_os_ring_buffers 활용 [1] jevida(강성욱) 2016.10.08 1957
1870 백업 미디어 세트에 압축 백업 추가하기 jevida(강성욱) 2016.10.08 1509
1869 Collation에 따른 실행계획 변경과 성능 문제 jevida(강성욱) 2016.10.08 1703
1868 SQL Connection Timeout 디버깅 with BizTalk Server jevida(강성욱) 2016.10.08 2345
1867 인스턴스 파일 초기화 활성 jevida(강성욱) 2016.10.08 1752





XE Login