从服务器接收结果时发生传输级错误

时间:2010-06-03 02:16:53

标签: sql-server-2008

我收到了SQL Server错误:

  

发生了传输级错误   从接收结果时   服务器。 (提供者:共享记忆   提供者,错误:0 - 句柄是   无效。)

我正在运行Sql Server 2008 SP1,Windows 2008 Standard 64位。

这是一个.Net 4.0 Web应用程序。它发生在向服务器发出请求时。这是间歇性的。知道如何解决它吗?

21 个答案:

答案 0 :(得分:90)

数据库连接由数据库服务器关闭。该连接在您的应用的连接池中仍然有效;因此,当您拾取共享连接字符串并尝试执行它时,无法访问数据库。如果您正在开发Visual Studio,只需关闭任务栏上的临时Web服务器即可。

如果它在生产中发生,重置您的网站的应用程序池应该回收连接池。

答案 1 :(得分:14)

在命令提示符处尝试以下命令:

netsh interface tcp set global autotuning=disabled

这会关闭网络堆栈的自动缩放功能

答案 2 :(得分:13)

我遇到了同样的问题。我重新启动Visual Studio并修复了问题

答案 3 :(得分:12)

对于那些不使用IIS的人,我在使用Visual Studio 2010进行调试时遇到了这个问题。我结束了所有调试器进程:WebDev.WebServer40.EXE解决了这个问题。

答案 4 :(得分:7)

您只需要停止ASP.NET Development Server并再次运行该项目

答案 5 :(得分:5)

传输级别错误通常与正在断开的sql server的连接有关...通常是网络。

当sql查询运行时间过长时,通常会抛出超时过期。

这么少的选择可能是:

  1. 检查VPN中的连接(如果使用)或任何其他工具
  2. 重新启动IIS
  3. 重启机器
  4. 优化SQL查询。

答案 6 :(得分:4)

如果您通过Microsoft SQL Server Management连接到数据库,请关闭所有连接并重试。 连接到另一个Azure数据库时出现此错误,并在关闭时为我工作。 还是不知道为什么..

答案 7 :(得分:4)

查看详细说明此错误的MSDN blog

  

删除连接

     

连接池在拥有后从池中删除连接   已经空闲了很长时间,或者如果小便者检测到了   与服务器的连接已被切断。

     

请注意,只有在尝试后才能检测到切断的连接   与服务器通信。如果发现连接为否   更长时间连接到服务器,它被标记为无效。

     

仅当连接池中的连接无效时才会从连接池中删除   它们被关闭或回收。

     

如果已经消失的服务器存在连接,请执行此操作   即使连接较小,也可以从池中获取连接   未检测到切断的连接并将其标记为无效。

     

这是因为检查连接的开销   仍然有效将消除有一个pooler的好处   导致另一次往返服务器。

     

发生这种情况时,将首先尝试使用该连接   连接已被切断,并抛出异常。

     

基本上你所看到的是最后一句中的异常。

     

从连接池获取连接,应用程序执行连接   不知道物理连接已经消失,尝试使用它是   在假设物理连接仍然存在的情况下完成。

     

你得到了例外。

     

这有几个常见的原因。

     
      
  1. 服务器已重新启动,这将关闭现有连接。
  2.         

    在这种情况下,请查看SQL Server日志,通常位于:   C:\ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

         

    如果启动的时间戳是最近的,那么我们可以怀疑   这是导致错误的原因。尝试将此时间戳与   例外的时间。

         

    2009-04-16 11:32:15.62服务器在文件中记录SQL Server消息   'C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'。

         
        
    1. 某人或某事杀死了正在使用的SPID。
    2.         

      再次,看看SQL Server日志。如果你发现了杀人,试着去   将此时间戳与例外时间相关联。

           

      2009-04-16 11:34:09.57 spidXX进程ID XX被杀死了   主机名xxxxx,主机进程ID XXXX。

           
          
      1. 再次进行故障转移(例如在镜像设置中),查看SQL Server日志。
      2.         

        如果存在故障转移,请尝试将此时间戳与时间关联   例外。

             

        2009-04-16 11:35:12.93 spidXX镜像数据库“”正在将角色从“PRINCIPAL”更改为“MIRROR”   故障转移。

答案 8 :(得分:4)

得到这个,总是在大约5分钟的操作之后。调查并发现e1iexpress始终在失败前发出警告。这显然是与某些TCP / IP适配器有关的错误。但是从WiFi变为硬连线并没有影响它。

所以尝试了Plan B并重新启动了Visual Studio。然后它工作正常。

仔细研究后,我注意到,当工作正常时,消息The Thread '<No Name>' has exited with code 0几乎恰好在之前的尝试中崩溃时发生。一些谷歌搜索显示,当服务器修剪线程池(等等)时,会出现该消息。

据推测,线程池中存在虚假线程,每次服务器试图“修剪”它都会导致应用程序崩溃。

答案 9 :(得分:3)

我知道这可能对每个人都没有帮助(谁知道,也许是的),但我遇到了同样的问题,经过一段时间后,我们意识到原因是代码本身的原因。

尝试访问服务器的计算机位于另一个网络中,可以建立连接但随后丢弃。

我们用来修复它的方法是向计算机添加静态路由,允许直接访问服务器而不通过防火墙。

route add –p YourServerNetwork mask NetworkMask Router 

样品:

route add –p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

我希望它对某人有所帮助,最好有这个,至少作为线索,所以如果你面对它,你就知道如何解决它。

答案 10 :(得分:3)

当脚本因某些原因停止SQL服务时,会收到此消息。因此,如果再次启动SQL Service,可能会解决您的问题。

答案 11 :(得分:2)

我在Visual Studio 2012开发环境中遇到了同样的错误,停止了IIS Express并重新运行了应用程序,它开始工作。

答案 12 :(得分:2)

在我的情况下,“SQL Server”服务器服务已停止。当我重新启动使我能够运行查询并消除错误的服务时。

检查查询以找出查询使此服务停止的原因

也是一个好主意

enter image description here

答案 13 :(得分:1)

我有同样的问题。我解决了它,截断了SQL Server LOG。 检查一下,然后告诉我们,这个解决方案是否对您有所帮助。

答案 14 :(得分:1)

对我来说,答案是将操作系统从2008R2升级到2012R2,iisreset或重启apppool的解决方案对我来说并不起作用。 我也试图改变TCP烟囱卸载设置,但我没有重新启动服务器,因为它是一个生产服务器,它也没有工作。

答案 15 :(得分:1)

对我而言,解决方案完全不同。

在我的情况下,我有一个需要datetimestamp参数的objectsource。即使ODS参数ConvertEmptyStringToNull为真,也将1/1/0001传递给SelectMethod。当该日期时间传递给sql server时,这反过来导致sql datetime溢出异常。

添加了对datetime.year!= 0001的额外检查,并为我解决了这个问题。

很奇怪它会抛出传输级别错误而不是日期时间溢出错误。 不管怎么说..

答案 16 :(得分:1)

我们最近在业务服务器和数据库服务器之间遇到此错误。 我们的解决方案是禁用&#34; IP Offloading&#34;在网络接口上。 然后错误就消失了。

答案 17 :(得分:1)

我发现此错误的原因之一是连接字符串中的“数据包大小= xxxxx ”。如果xxxx的值太大,我们将看到此错误。删除此值并让SQL服务器处理它或保持低值,具体取决于网络功能。

答案 18 :(得分:1)

当我尝试恢复SQL数据库并检查Options标签中的复选框后,发生了这种情况,

enter image description here

因为它是一个独立的数据库服务器,只关闭SSMS并重新打开它解决了我的问题。

答案 19 :(得分: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查询时,只需忽略此错误即可。

答案 20 :(得分:0)

我最近遇到了同样的问题,但我无法在谷歌得到答案。 所以想在这里分享它,以便它可以在将来帮助某人。

错误:

执行查询时,查询将提供少量输出,然后它将抛出以下错误。

  

&#34;从接收输出时发生传输级别错误   服务器(TCP:提供程序,错误:0-指定的网络名称不再是   可用&#34;

解决方案:

  1. 检查该链接服务器的提供商
  2. 在该提供程序属性中,启用&#34;允许进程&#34;该特定提供商的选项可以解决问题。