เกิดข้อผิดพลาดระดับการขนส่งเมื่อรับผลลัพธ์จากเซิร์ฟเวอร์ [ปิด]


169

ฉันได้รับข้อผิดพลาดของ SQL Server:

ข้อผิดพลาดระดับการขนส่งเกิดขึ้นเมื่อได้รับผลลัพธ์จากเซิร์ฟเวอร์ (ผู้ให้บริการ: ผู้ให้บริการหน่วยความจำที่ใช้ร่วมกันข้อผิดพลาด: 0 - หมายเลขอ้างอิงไม่ถูกต้อง)

ฉันใช้ SQL Server 2008 SP1, Windows 2008 Standard 64 บิต

มันเป็นเว็บแอปพลิเคชั่น. Net 4.0 มันเกิดขึ้นเมื่อมีการร้องขอไปยังเซิร์ฟเวอร์ มันไม่ต่อเนื่อง ความคิดใดที่ฉันสามารถแก้ไขได้?


3
สิ่งนี้อาจเกิดขึ้นหากฐานข้อมูลถูกสร้างใน SQL Express / MSDE เวอร์ชันเก่าที่ตั้งค่า AUTO_CLOSE เป็น True หรืออินสแตนซ์ของบริการ SQL Server ถูกรีสตาร์ท
devstuff

1
ฉันอาจเกิดจากการกระทำที่ค้างอยู่บนฐานข้อมูลของคุณ ผลนี้ในการล็อค DB
pix

4
คำตอบที่ทำเครื่องหมายไว้ไม่ใช่คำตอบ คำตอบของ Michael Olivero ด้านล่างนี้มีเนื้อหาจริงและหลังจากนั้นก็แก้ปัญหาเมื่อฉันพบปัญหา (ปิดเว็บเซิร์ฟเวอร์ชั่วคราวด้วยตนเองบนเครื่อง dev ของฉัน) ฉันแนะนำให้เปลี่ยนคำตอบ
อดัมมิลเลอร์

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 ไม่มีคำสั่งย่อย tcp ใน Windows XP แต่ทำงานได้ดีใน Windows 7 SP1
Narayanan

ฉันรู้ว่านี่เก่า แต่นี่เป็นทางออกเดียวที่ทำงานได้สำหรับฉัน (ปัญหา / โซลูชันส่วนใหญ่หมุนรอบเว็บเซิร์ฟเวอร์ / แอปสถานการณ์ของฉันคือแอปบนเดสก์ท็อปและเซิร์ฟเวอร์เครือข่ายท้องถิ่นไม่มี IIS หรืออะไรทำนองนั้น) เหตุใดการปิดการปรับค่าอัตโนมัติ / การตรวจวัดค่าอัตโนมัติจะช่วยแก้ปัญหานี้
เทรนต์

1
ในกรณีของฉัน ReOpen ของ SQL Server Management Studio แก้ปัญหาได้
Alex

15

ผมมีปัญหาเหมือนกัน. ฉันเริ่มต้น Visual Studio ใหม่และแก้ไขปัญหา


12

สำหรับผู้ที่ไม่ได้ใช้ IIS ฉันมีปัญหานี้เมื่อทำการดีบักด้วย Visual Studio 2010 ฉันสิ้นสุดกระบวนการดีบักเกอร์ทั้งหมด: WebDev.WebServer40.EXE ซึ่งแก้ไขปัญหาได้


กรุณาบอกขั้นตอนในการสิ้นสุดกระบวนการเหล่านั้น ฉันเป็นผู้เริ่มต้นและฉันไม่รู้ว่าคุณหมายถึงอะไรโดย "ยุติกระบวนการดีบั๊กทั้งหมด"
Unbreakable

@ แตกฉันเพิ่งใช้ตัวจัดการงาน ในตัวจัดการงานคุณสามารถดูกระบวนการทำงานทั้งหมดที่มีชื่อ WebDev.WebServer40.EXE ดูbetanews.com/2015/10/08/how-to-kill-a-windows-processสำหรับวิธีฆ่ากระบวนการ windows
jth_92

8

ข้อผิดพลาดระดับการขนส่งมักจะเชื่อมโยงกับการเชื่อมต่อกับเซิร์ฟเวอร์ sql ที่ถูกทำลาย ... มักจะเป็นเครือข่าย

หมดเวลาที่หมดอายุมักจะโยนเมื่อแบบสอบถาม sql ใช้เวลานานเกินไปที่จะเรียกใช้

ดังนั้นตัวเลือกน้อยสามารถ:

  1. ตรวจสอบการเชื่อมต่อใน VPN (ถ้าใช้) หรือเครื่องมืออื่น ๆ
  2. เริ่มต้น IIS
  3. รีสตาร์ทเครื่อง
  4. เพิ่มประสิทธิภาพการค้นหา sql

คำตอบง่ายๆ แต่ประหยัดเวลาของฉัน
Kirk

7

สิ่งที่คุณต้องทำก็คือหยุดการพัฒนาเซิร์ฟเวอร์ ASP.NET และเรียกใช้โครงการอีกครั้ง


4

หากคุณเชื่อมต่อกับฐานข้อมูลผ่าน Microsoft SQL Server Management ให้ปิดการเชื่อมต่อทั้งหมดแล้วลองอีกครั้ง มีข้อผิดพลาดนี้เมื่อเชื่อมต่อกับฐานข้อมูล Azure อื่นและทำงานให้ฉันเมื่อปิด ยังไม่รู้ว่าทำไม ..


นี่เป็นการแก้ไขที่เหมาะกับฉัน ฉันปิด SQL Server Management Studio แล้วฉันไม่เคยเห็นข้อผิดพลาดนี้อีกเลย
Beevik

4

ได้รับสิ่งนี้เสมอหลังจากการดำเนินการประมาณ 5 นาที ตรวจสอบและพบว่าคำเตือนจาก e1iexpress เกิดขึ้นเสมอก่อนที่ความล้มเหลว เห็นได้ชัดว่านี่เป็นข้อผิดพลาดเกี่ยวกับอะแดปเตอร์ TCP / IP ที่แน่นอน แต่การเปลี่ยนจาก WiFi เป็นเดินสายไม่มีผลกับมัน

ลอง Plan B แล้วเริ่ม Visual Studio ใหม่ จากนั้นก็ใช้งานได้ดี

จากการศึกษาอย่างใกล้ชิดฉันสังเกตเห็นว่าเมื่อทำงานอย่างถูกต้องข้อความจะThe Thread '<No Name>' has exited with code 0เกิดขึ้นเกือบทุกครั้งที่การทำงานล้มเหลวในความพยายามครั้งก่อน Googling บางคนแสดงให้เห็นว่าข้อความนั้นเกิดขึ้นเมื่อ (ในสิ่งอื่น ๆ ) เซิร์ฟเวอร์ตัดทอนพูลเธรด

สันนิษฐานว่ามีเธรดปลอมในเธรดพูลและทุกครั้งที่เซิร์ฟเวอร์พยายาม "ตัด" มันทำให้แอปพลิเคชันลง


4

ดูที่บล็อก MSDNซึ่งมีรายละเอียดข้อผิดพลาดนี้:

การลบการเชื่อมต่อ

ตัวพูลการเชื่อมต่อจะลบการเชื่อมต่อออกจากพูลหลังจากที่ไม่ได้ใช้งานเป็นเวลานานหรือหากพูลเลอร์ตรวจพบว่าการเชื่อมต่อกับเซิร์ฟเวอร์นั้นถูกตัด

โปรดทราบว่าสามารถตรวจพบการเชื่อมต่อที่ตัดขาดหลังจากพยายามสื่อสารกับเซิร์ฟเวอร์เท่านั้น หากพบการเชื่อมต่อที่ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์อีกต่อไปจะมีการทำเครื่องหมายว่าไม่ถูกต้อง

การเชื่อมต่อที่ไม่ถูกต้องจะถูกลบออกจากกลุ่มการเชื่อมต่อเฉพาะเมื่อพวกเขาถูกปิดหรือเรียกคืน

หากมีการเชื่อมต่อกับเซิร์ฟเวอร์ที่หายไปการเชื่อมต่อนี้สามารถดึงออกมาจากกลุ่มได้แม้ว่ากลุ่มการเชื่อมต่อจะไม่ตรวจพบการเชื่อมต่อที่ถูกตัดและทำเครื่องหมายว่าไม่ถูกต้อง

เป็นกรณีนี้เนื่องจากค่าใช้จ่ายในการตรวจสอบว่าการเชื่อมต่อยังคงถูกต้องจะกำจัดประโยชน์ของการมี pooler โดยทำให้เกิดการเดินทางไปกลับไปยังเซิร์ฟเวอร์ที่เกิดขึ้นอีก

เมื่อสิ่งนี้เกิดขึ้นความพยายามครั้งแรกในการใช้การเชื่อมต่อจะตรวจพบว่าการเชื่อมต่อนั้นถูกตัดออกไปและมีข้อผิดพลาดเกิดขึ้น

โดยทั่วไปสิ่งที่คุณเห็นคือข้อยกเว้นในประโยคสุดท้าย

การเชื่อมต่อนำมาจากพูลการเชื่อมต่อแอปพลิเคชันไม่ทราบว่าการเชื่อมต่อทางกายภาพหายไปความพยายามในการใช้งานเสร็จสิ้นภายใต้สมมติฐานว่าการเชื่อมต่อทางกายภาพยังคงอยู่ที่นั่น

และคุณได้รับข้อยกเว้น

มีสาเหตุทั่วไปบางประการสำหรับเรื่องนี้

  1. เซิร์ฟเวอร์ได้รับการเริ่มต้นใหม่ซึ่งจะปิดการเชื่อมต่อที่มีอยู่

ในกรณีนี้ให้ดูที่บันทึก SQL Server ซึ่งมักจะพบที่: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

หากการประทับเวลาสำหรับการเริ่มต้นเป็นรุ่นล่าสุดเราสามารถสงสัยได้ว่านี่เป็นสาเหตุของข้อผิดพลาด ลองเชื่อมโยงการประทับเวลานี้กับเวลาที่มีข้อยกเว้น

2009-04-16 11: 32: 15.62 เซิร์ฟเวอร์ที่บันทึกข้อความ SQL Server ในไฟล์ 'C: \ Program SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG' C: \ Program Files \ Microsoft

  1. บางคนหรือบางอย่างได้ฆ่า SPID ที่กำลังใช้งานอยู่

ดูที่บันทึก SQL Server อีกครั้ง หากคุณพบการฆ่าพยายามเชื่อมโยงการประทับเวลานี้กับเวลาที่มีข้อยกเว้น

2009-04-16 11: 34: 09.57 spidXX Process ID XX ถูกฆ่าโดยชื่อโฮสต์ xxxxx, ID กระบวนการโฮสต์ XXXX

  1. มี failover (ในตัวอย่างการตั้งค่ามิเรอร์) อีกครั้งลองดูในบันทึกของ SQL Server

หากมีความล้มเหลวให้ลองเชื่อมโยงการประทับเวลานี้กับเวลาที่มีข้อยกเว้น

2009-04-16 11: 35: 12.93 spidXX ฐานข้อมูลมิเรอร์“” กำลังเปลี่ยนบทบาทจาก“ PRINCIPAL” เป็น“ MIRROR” เนื่องจาก Failover


3

คุณได้รับข้อความนี้เมื่อสคริปต์ของคุณทำให้บริการ SQL หยุดทำงานเนื่องจากสาเหตุบางประการ ดังนั้นหากคุณเริ่มบริการ SQL อีกครั้งปัญหาของคุณอาจได้รับการแก้ไข


กรุณาระบุขั้นตอนในการเริ่มบริการ SQL ฉันเป็นผู้เริ่มต้นและฉันเพิ่งสร้างแอปพลิเคชัน asp.net mvc 5 และเมื่อฉันเรียกใช้ "enable-migrations" ทุกอย่างเรียบร้อยแล้วฉันจะเรียกใช้ "add-migration" sdfd "ทุกอย่างเรียบร้อยแล้วเมื่อฉันคลิกที่อัปเดตฐานข้อมูลฉันได้รับข้อผิดพลาดนี้โปรดช่วยฉัน
Unbreakable

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 โซลูชันของ iisreset หรือรีสตาร์ท apppool ไม่ทำงานสำหรับฉัน ฉันพยายามเปลี่ยนการตั้งค่า TCP Chimney Offload ด้วย แต่ฉันไม่ได้รีสตาร์ทเซิร์ฟเวอร์เพราะเป็นเซิร์ฟเวอร์ที่ใช้งานจริงซึ่งใช้งานไม่ได้


1

สำหรับฉันทางออกนั้นแตกต่างอย่างสิ้นเชิง

ในกรณีของฉันฉันมีออบเจ็กต์ที่ต้องการพารามิเตอร์ datetimestamp แม้ว่าพารามิเตอร์ ODS ConvertEmptyStringToNull ที่เป็นจริง 1/1/0001 จะถูกส่งผ่านไปยัง SelectMethod ในทางกลับกันก็ทำให้เกิดข้อยกเว้นล้น datetime sql เมื่อ datetime นั้นถูกส่งผ่านไปยังเซิร์ฟเวอร์ sql

เพิ่มการตรวจสอบเพิ่มเติมสำหรับ datetime.year! = 0001 และแก้ไขให้ฉัน

แปลกที่มันจะส่งข้อผิดพลาดระดับการขนส่งและไม่ใช่ข้อผิดพลาดล้น datetime อย่างไรก็ตาม..


1
ไม่มีทางที่สิ่งนี้จะเกี่ยวข้องกันมันต้องเป็นเรื่องบังเอิญ
Michiel Cornille

1

เราพบข้อผิดพลาดนี้ระหว่างเซิร์ฟเวอร์ธุรกิจของเรากับเซิร์ฟเวอร์ฐานข้อมูลของเรา ทางออกสำหรับเราคือปิดการใช้งาน "IP Offloading" บนอินเทอร์เฟซเครือข่าย จากนั้นข้อผิดพลาดก็หายไป


1

หนึ่งในเหตุผลที่ฉันพบข้อผิดพลาดนี้คือ ' Packet Size = xxxxx ' ในสตริงการเชื่อมต่อ หากค่าของ xxxx ใหญ่เกินไปเราจะเห็นข้อผิดพลาดนี้ ลบค่านี้และปล่อยให้เซิร์ฟเวอร์ SQL จัดการหรือทำให้มันต่ำขึ้นอยู่กับความสามารถของเครือข่าย


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.