서버에서 결과를 수신 할 때 전송 레벨 오류가 발생했습니다.


169

SQL Server 오류가 발생합니다.

서버에서 결과를 수신 할 때 전송 레벨 오류가 발생했습니다. (제공자 : 공유 메모리 공급자, 오류 : 0-핸들이 유효하지 않습니다.)

Sql Server 2008 SP1, Windows 2008 Standard 64 비트를 실행하고 있습니다.

.Net 4.0 웹 애플리케이션입니다. 서버에 요청이있을 때 발생합니다. 간헐적입니다. 어떻게 해결할 수 있습니까?


3
데이터베이스가 AUTO_CLOSE를 True로 설정 한 이전 버전의 SQL Express / MSDE에서 작성된 경우에 발생할 수 있습니다. 또는 SQL Server 서비스 인스턴스가 다시 시작되었습니다.
devstuff

1
DB에서 보류중인 작업으로 인해 원인이 될 수 있습니다. 이로 인해 DB 잠금이 발생합니다.
pix

4
표시된 답변은 답변이 아닙니다. 아래의 Michael Olivero의 답변은 실제로 콘텐츠를 제공하고 따라 가면 문제가 발생했을 때 문제를 해결했습니다. (개발자 컴퓨터에서 임시 웹 서버를 수동으로 닫습니다.) 답변을 변경하는 것이 좋습니다.
Adam Miller

3
@Flexo 주제를 벗어난 주제로 폐쇄 되었습니까? VS 2017 및 MS SQL 2016 Enterprise의 새로운 설치로 방금 발생했습니다. VS 2015 커뮤니티와 잘 작동하는 동안.
Edward

1
주제를 벗어나면 안됩니다. 이 문제는 사용중인 코드와 아무 관련이 없으므로 MCVE를 만들 수 없습니다. 또한 폐쇄 이유는 다음과 같습니다 this one was resolved in a manner unlikely to help future readers.-그러나 179k 명의 사람들이이 질문을 겪었습니다.
Nisarg

답변:


102

데이터베이스 연결이 데이터베이스 서버에 의해 닫힙니다. 연결은 앱의 연결 풀에서 유효합니다. 결과적으로 공유 연결 문자열을 선택하고 실행하려고하면 데이터베이스에 도달 할 수 없습니다. Visual Studio를 개발하는 경우 작업 표시 줄에서 임시 웹 서버를 닫으면됩니다.

프로덕션 환경에서 발생하는 경우 웹 사이트의 응용 프로그램 풀을 재설정하면 연결 풀이 재활용됩니다.


1
이것은 실제 답변입니다.
TheHuge_

2
필자의 경우 MultipleActiveResultSets=True연결 문자열에 동일한 오류가 발생 하는 설정이 있습니다.
Semyon Vyskubov

17

명령 프롬프트에서 다음 명령을 시도하십시오.

netsh interface tcp set global autotuning=disabled

네트워크 스택의 자동 스케일링 기능이 꺼집니다.


20
실제로 수행하는 작업에 대한 세부 정보를 제공 할 수 있습니까? 전 세계적으로 그러한 가치를 설정해야하는 이유가 있습니까?
Drew Noakes

1
네트워크 스택의 자동 스케일링 기능을 끕니다.
Simmo

Windows XP SP3에서는 작동하지 않습니다. Netsh 인터페이스에는 Windows XP에서 tcp sub 명령이 없지만 Windows 7 SP1에서는 제대로 작동합니다.
Narayanan

나는 이것이 오래되었다는 것을 알고 있지만 이것이 나를 위해 일한 유일한 해결책이었습니다 (대부분의 문제 / 해결책은 웹 서버 / 응용 프로그램과 관련이 있습니다. 상황은 데스크톱 응용 프로그램 및 로컬 네트워크 서버이며 IIS 등은 없습니다). 자동 조정 / 자동 확장을 끄면이 문제가 해결되는 이유는 무엇입니까?
Trent

1
필자의 경우 SQL Server Management Studio를 다시 열면 문제가 해결되었습니다.
Alex

15

나는 같은 문제가 있었다. Visual Studio를 다시 시작했는데 문제가 해결되었습니다.


12

IIS를 사용하지 않는 사람들에게는 Visual Studio 2010으로 디버깅 할 때이 문제가 발생했습니다.이 문제를 해결 한 WebDev.WebServer40.EXE 디버거 프로세스를 모두 종료했습니다.


해당 프로세스를 종료 한 방법에 대한 단계를 알려주십시오. 저는 초보자이며 "모든 디버거 프로세스를 종료했습니다"라는 뜻을 알지 못합니다
Unbreakable

@Unbreakable 방금 작업 관리자를 사용했습니다. 작업 관리자에서 이름이 WebDev.WebServer40.EXE 인 모든 실행중인 프로세스를 볼 수 있습니다. Windows 프로세스를 종료 하는 방법 은 betanews.com/2015/10/08/how-to-kill-a-windows-process 를 참조하십시오 .
jth_92

8

전송 수준 오류는 종종 sql 서버와의 연결 (일반적으로 네트워크 연결)에 연결됩니다.

Timeout Expired는 일반적으로 SQL 쿼리를 실행하는 데 시간이 너무 오래 걸리면 발생합니다.

따라서 몇 가지 옵션이 있습니다.

  1. VPN (사용 된 경우) 또는 기타 도구에서 연결을 확인하십시오.
  2. IIS를 다시 시작하십시오.
  3. 기계를 다시 시작하십시오
  4. SQL 쿼리를 최적화하십시오.

간단한 답변이지만 시간을 절약했습니다.
Kirk

7

ASP.NET 개발 서버를 중지하고 프로젝트를 다시 실행하기 만하면됩니다.


4

Microsoft SQL Server 관리를 통해 데이터베이스에 연결된 경우 모든 연결을 닫고 다시 시도하십시오. 다른 Azure 데이터베이스에 연결했을 때이 오류가 발생하여 닫을 때 저에게 도움이되었습니다. 아직도 이유를 모르겠다 ..


이것은 나를 위해 일한 수정이었습니다. SQL Server Management Studio를 종료 한 후이 오류가 다시 발생하지 않습니다.
Beevik

4

항상 약 5 분 동안 작동 한 후에이 문제가 발생했습니다. 조사 전에 e1iexpress의 경고가 항상 실패 전에 발생했음을 발견했습니다. 이것은 특정 TCP / IP 어댑터와 관련된 오류 인 것 같습니다. 그러나 WiFi에서 유선으로 변경해도 영향을 미치지 않습니다.

그래서 계획 B를 시도하고 Visual Studio를 다시 시작했습니다. 그런 다음 잘 작동했습니다.

더 자세히 연구 한 결과, 제대로 작동하면 The Thread '<No Name>' has exited with code 0이전 시도에서 실행이 중단 된 시간과 거의 동일한 시간에 메시지 가 발생 하는 것으로 나타났습니다 . 일부 인터넷 검색에 따르면 서버가 스레드 풀을 트리밍 할 때 해당 메시지가 표시됩니다.

아마도 스레드 풀에 가짜 스레드가 있었고 서버가 "트리밍"하려고 할 때마다 앱이 다운되었습니다.


4

이 오류에 대한 자세한 내용 은 MSDN 블로그 를 참조하십시오.

연결 제거

연결 풀러는 풀이 오랫동안 유휴 상태이거나 풀러가 서버와의 연결이 끊 겼음을 감지하면 풀에서 연결을 제거합니다.

서버와의 통신을 시도한 후에 만 ​​연결이 끊어 질 수 있습니다. 더 이상 서버에 연결되지 않은 연결이 발견되면 유효하지 않은 것으로 표시됩니다.

유효하지 않은 연결은 닫히거나 회수 될 때만 연결 풀에서 제거됩니다.

사라진 서버에 대한 연결이 존재하는 경우 연결 풀러가 끊긴 연결을 감지하지 못하고이를 유효하지 않은 것으로 표시 한 경우에도이 연결을 풀에서 가져올 수 있습니다.

연결이 여전히 유효한지 확인하는 오버 헤드로 인해 서버로의 또 다른 왕복이 발생하여 풀러를 갖는 이점이 제거되기 때문입니다.

이 경우 연결을 처음 사용하면 연결이 끊어 졌음을 감지하고 예외가 발생합니다.

기본적으로 마지막 문장의 예외입니다.

연결 풀에서 연결을 가져오고 응용 프로그램은 물리적 연결이 끊어 졌음을 알지 못하며 물리적 연결이 여전히 존재한다는 가정하에 사용하려고 시도합니다.

그리고 당신은 예외를 얻습니다.

여기에는 몇 가지 일반적인 이유가 있습니다.

  1. 서버가 다시 시작되었으므로 기존 연결이 닫힙니다.

이 경우 일반적으로 C : \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG에있는 SQL Server 로그를 살펴보십시오.

시작 타임 스탬프가 매우 최근 인 경우 오류가 발생한 것으로 의심 할 수 있습니다. 이 타임 스탬프와 예외 시간을 연관 시키십시오.

2009-04-16 11 : 32 : 15.62 서버 로그 'C : \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'파일에 SQL Server 메시지가 기록됩니다.

  1. 누군가 또는 사용중인 SPID를 종료했습니다.

다시 한 번 SQL Server 로그를 살펴보십시오. 킬을 찾으면이 타임 스탬프를 예외 시간과 연관 시키십시오.

spidXX 프로세스 ID XX는 호스트 이름 xxxxx, 호스트 프로세스 ID XXXX에 의해 종료되었습니다.

  1. 장애 조치 (예 : 미러 설정)가 다시 발생하면 SQL Server 로그를 살펴보십시오.

장애 조치가있는 경우이 타임 스탬프를 예외 시간과 연관 시키십시오.

2009-04-16 11 : 35 : 12.93 spidXX 장애 조치 (failover)로 인해 미러 된 데이터베이스 ""이 (가) 역할을 "PRINCIPAL"에서 "MIRROR"로 변경하고 있습니다.


3

어떤 이유로 스크립트가 SQL 서비스를 중지 시키면이 메시지가 표시됩니다. 따라서 SQL 서비스를 다시 시작하면 문제가 해결 될 수 있습니다.


SQL 서비스를 시작하는 방법에 대한 단계를 친절하게 제공하십시오. 나는 초보자이며 방금 asp.net mvc 5 응용 프로그램을 만들었습니다. 나는 "가능-마이그레이션"을 실행하면 모든 것이 내가 "추가 마이그레이션"나는이 오류가 갱신 데이터베이스를 클릭하면 모든 것이 다음 미세하고 "sdfd 실행 후 괜찮 나를 인도하시기 바랍니다.
언 브레이커 블

3

나는 이것이 모든 사람을 도울 수는 없다는 것을 알고 있지만 (아마도 그렇습니다) 같은 문제가 있었으며 얼마 후 우리는 원인이 코드 자체가 아닌 것으로 깨달았습니다.

컴퓨터가 서버에 연결하려고했으나 다른 네트워크에 있었으며 연결이 설정되었지만 끊어 질 수 있습니다.

이 문제를 해결하는 데 사용 된 방법은 컴퓨터에 고정 경로를 추가하여 방화벽을 통과하지 않고도 서버에 직접 액세스 할 수 있도록하는 것입니다.

route add p YourServerNetwork mask NetworkMask Router 

견본:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

누군가에게 도움이되기를 바랍니다. 적어도 실마리가되는 것이 낫습니다. 따라서 직면하면 해결 방법을 알고 있습니다.


2

Visual Studion 2012 개발 환경에서 동일한 오류가 발생하여 IIS Express를 중지하고 응용 프로그램을 다시 실행하면 작동하기 시작했습니다.


2

필자의 경우 "SQL Server"서버 서비스가 중지되었습니다. 쿼리를 실행하고 오류를 제거 할 수있는 서비스를 다시 시작했을 때

또한이 서비스가 중지 된 이유를 찾기 위해 쿼리를 검사하는 것이 좋습니다.

여기에 이미지 설명을 입력하십시오


1

나는 같은 문제가 있었다. SQL Server LOG를 자르면서 해결했습니다. 이 작업을 확인한 다음이 솔루션이 도움이되었는지 알려주십시오.


1

나에게 대답은 2008R2에서 2012R2로 OS를 업그레이드하는 것입니다 .iisreset 또는 restart apppool의 솔루션이 작동하지 않았습니다. 또한 TCP Chimney Offload 설정을 해제하려고 시도했지만 서버가 작동하지 않는 프로덕션 서버이기 때문에 서버를 다시 시작하지 않았습니다.


1

나에게 해결책은 완전히 달랐다.

내 경우에는 datetimestamp 매개 변수가 필요한 객체 소스가 있습니다. 해당 ODS 매개 변수 ConvertEmptyStringToNull이 true 인 경우에도 1/1/0001이 SelectMethod로 전달되었습니다. 그 결과 해당 datetime이 SQL Server에 전달 될 때 SQL datetime overflow 예외가 발생했습니다.

datetime.year! = 0001에 대한 추가 검사를 추가하여 해결했습니다.

날짜 시간 오버플로 오류가 아닌 전송 수준 오류가 발생한다는 것이 이상합니다. 어쨌든 ..


1
거기에이 관련되어있는 방법은 없습니다 그것은 우연의 일치되어 있어야합니다
미키 엘 Cornille

1

최근 비즈니스 서버와 데이터베이스 서버간에이 오류가 발생했습니다. 우리를위한 해결책은 네트워크 인터페이스에서 "IP 오프 로딩"을 비활성화하는 것이 었습니다. 그런 다음 오류가 사라졌습니다.


1

이 오류에 대해 찾은 이유 중 하나는 연결 문자열에서 ' Packet Size = xxxxx '입니다. xxxx의 값이 너무 크면이 오류가 표시됩니다. 네트워크 기능에 따라이 값을 제거하고 SQL Server에서 값을 처리하거나 낮게 유지하십시오.


1

SQL 데이터베이스를 복원하려고 할 때 발생했고 Options탭의 확인란을 선택했습니다 .

여기에 이미지 설명을 입력하십시오

SSMS를 종료했다가 다시 열면 독립형 데이터베이스 서버이므로 문제가 해결되었습니다.


1

데이터베이스가 삭제되고 다시 작성 될 때 일부 공유 자원이 여전히 데이터베이스가 존재한다고 간주하고 있기 때문에 데이터베이스를 다시 작성한 후 데이터베이스에서 테이블을 작성하기 위해 쿼리 실행을 다시 실행하면 오류가 다시 표시되지 않고 Command(s) completed successfully.메시지가 표시되지 않습니다. 오류 메시지 대신 표시됩니다 Msg 233, Level 20, State 0, Line 0 A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.).

데이터베이스를 삭제 및 재 작성할 때이 오류를 무시하고 걱정없이 DDL 쿼리를 다시 실행하십시오.


0

최근에 같은 문제에 직면했지만 Google에서 답변을 얻을 수 없었습니다. 나중에 공유 할 수 있도록 여기에서 공유하는 것을 고려하십시오.

오류:

쿼리를 실행하는 동안 쿼리는 출력을 거의 제공하지 않으며 오류 아래에 발생합니다.

"서버 (TCP : 제공자, 오류 : 0- 지정된 네트워크 이름을 더 이상 사용할 수 없음)에서 출력을 수신 할 때 전송 레벨 오류가 발생했습니다."

해결책:

  1. 연결된 서버의 공급자 확인
  2. 해당 공급자 속성에서 해당 특정 공급자에 대해 "프로세스 허용"옵션을 사용하여 문제를 해결하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.