데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL 연결 18056 오류

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

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
1890 장기 트랜잭션 확인 및 경고 설정 jevida(강성욱) 2016.10.11 1416
1889 SQL 데이터 수집툴 DiagManager 사용법 jevida(강성욱) 2016.10.11 1317
1888 Windows Server 2012 R2 그룹 관리 서비스 계정 및 SQL 서버 jevida(강성욱) 2016.10.11 1833
1887 Kerbros 구성 관리자 툴 jevida(강성욱) 2016.10.11 1160
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2316
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1361
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3184
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2687
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 872
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1159
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 880
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 973
» SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1359
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 1742
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 956
1875 NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1046
1874 AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1187
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3068
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1589
1871 DMV를 활용한 CPU 트러블슈팅 - Sys.dm_exec_query_stats, sys.dm_os_ring_buffers 활용 [1] jevida(강성욱) 2016.10.08 1906





XE Login