ฉันมีปัญหาเดียวกันกับอินสแตนซ์ของ SQL Server 2014 ที่ติดตั้งไว้ภายในเครื่อง การเชื่อมต่อใช้FQDN\InstanceName
จะล้มเหลวในขณะที่การเชื่อมต่อโดยใช้เพียงฉันhostname\InstanceName
ทำงาน ตัวอย่างเช่น: การเชื่อมต่อโดยใช้mycomputername\sql2014
งานได้ แต่ใช้mycomputername.mydomain.org\sql2014
ไม่ได้ DNS ได้รับการแก้ไขอย่างถูกต้องเปิดใช้งาน TCP / IP ภายในตัวจัดการการกำหนดค่า SQL เพิ่มกฎ Windows Firewall (จากนั้นปิดไฟร์วอลล์สำหรับการทดสอบเพื่อให้แน่ใจว่าไม่ได้ปิดกั้นอะไร) แต่ไม่มีผู้ใดที่แก้ไขปัญหาได้
ในที่สุดฉันต้องเริ่มบริการ " SQL Server Browser " บน SQL Server และแก้ไขปัญหาการเชื่อมต่อ
ฉันไม่เคยรู้เลยว่าบริการ SQL Server Browser ช่วย SQL Server ในการเชื่อมต่อ ฉันอยู่ภายใต้ความรู้สึกว่ามันช่วยเติมข้อมูลแบบดรอปดาวน์เมื่อคุณคลิกเซิร์ฟเวอร์ "เรียกดูเพิ่มเติม" เพื่อเชื่อมต่อ แต่จริง ๆ แล้วมันช่วยจัดเรียงคำขอของไคลเอ็นต์กับพอร์ตที่ถูกต้อง # เพื่อใช้ถ้าพอร์ต # ไม่ได้กำหนดอย่างชัดเจน วิธีการผูกเว็บไซต์ช่วยบรรเทาปัญหาเดียวกันบน IIS เว็บเซิร์ฟเวอร์ที่โฮสต์หลายเว็บไซต์)
รายการเชื่อมต่อนี้เป็นสิ่งที่ทำให้ฉันมีข้อสงสัยเกี่ยวกับบริการเบราว์เซอร์เซิร์ฟเวอร์ SQL: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- ชื่อ
- เมื่อคุณใช้ wstst05 \ sqlexpress เป็นชื่อเซิร์ฟเวอร์รหัสไคลเอนต์จะแยกชื่อเครื่องออกจากชื่ออินสแตนซ์และเปรียบเทียบ wstst05 กับชื่อ netbios ฉันเห็นว่าไม่มีปัญหาสำหรับพวกเขาที่จะจับคู่และการเชื่อมต่อถือว่าเป็นท้องถิ่น จากนั้นเราดึงข้อมูลที่จำเป็นโดยไม่ต้องติดต่อเบราว์เซอร์ SQL และเชื่อมต่อกับอินสแตนซ์ SQL ผ่านหน่วยความจำที่ใช้ร่วมกันโดยไม่มีปัญหาใด ๆ
- เมื่อคุณใช้ wstst05.capatest.local \ sqlexpress รหัสไคลเอนต์จะไม่ทำการเปรียบเทียบชื่อ (wstst05.capatest.local) กับชื่อ netbios (wstst05) และพิจารณาการเชื่อมต่อ "remote" นี่คือการออกแบบและเราจะพิจารณาปรับปรุงในอนาคต อย่างไรก็ตามเนื่องจากการพิจารณาการเชื่อมต่อระยะไกลและความจริงที่ว่ามันเป็นอินสแตนซ์ที่มีชื่อลูกค้าตัดสินใจว่าจะต้องใช้ SQLBrowser สำหรับการจำแนกชื่อ พยายามติดต่อ SQL Browser บน wstst05.capatest.local (UDP พอร์ต 1434) และดูเหมือนว่าส่วนนั้นจะล้มเหลว ดังนั้นข้อผิดพลาดที่คุณได้รับ
เหตุผลสำหรับบริการ "เบราว์เซอร์เซิร์ฟเวอร์ SQL" จาก TechNet (เน้นที่เพิ่มโดยฉัน): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
จากส่วน "การใช้เบราว์เซอร์เซิร์ฟเวอร์ SQL":
ถ้าบริการเบราว์เซอร์เซิร์ฟเวอร์ SQL ไม่ทำงานคุณยังคงสามารถเชื่อมต่อกับ SQL Server ได้หากคุณระบุหมายเลขพอร์ตที่ถูกต้องหรือไปป์ที่ระบุชื่อ ตัวอย่างเช่นคุณสามารถเชื่อมต่อกับอินสแตนซ์เริ่มต้นของ SQL Server ด้วย TCP / IP ได้หากทำงานบนพอร์ต 1433 อย่างไรก็ตามหากบริการ SQL Server Browser ไม่ทำงานการเชื่อมต่อต่อไปนี้จะไม่ทำงาน :
- องค์ประกอบที่พยายามที่จะเชื่อมต่อกับกรณีที่มีชื่ออย่างเต็มที่โดยไม่ต้องระบุพารามิเตอร์ทั้งหมด (เช่นพอร์ต TCP / IP หรือชื่อท่อ)
- ส่วนประกอบใด ๆ ที่สร้างหรือส่งผ่านข้อมูลเซิร์ฟเวอร์ \ อินสแตนซ์ที่สามารถนำมาใช้โดยคอมโพเนนต์อื่นในภายหลังเพื่อเชื่อมต่อใหม่
- การเชื่อมต่อกับอินสแตนซ์ที่มีชื่อโดยไม่ระบุหมายเลขพอร์ตหรือไพพ์
- DAC ไปยังอินสแตนซ์ที่มีชื่อหรืออินสแตนซ์เริ่มต้นหากไม่ได้ใช้พอร์ต TCP / IP 1433
- บริการตัวเปลี่ยนเส้นทาง OLAP
- การแจกแจงเซิร์ฟเวอร์ใน SQL Server Management Studio, Enterprise Manager หรือ Query Analyzer
หากคุณใช้ SQL Server ในสถานการณ์ไคลเอนต์ - เซิร์ฟเวอร์ (ตัวอย่างเช่นเมื่อแอปพลิเคชันของคุณเข้าถึง SQL Server ผ่านเครือข่าย) หากคุณหยุดหรือปิดใช้งานบริการ SQL Server Browser คุณต้องกำหนดหมายเลขพอร์ตเฉพาะให้กับแต่ละอินสแตนซ์และ เขียนรหัสแอปพลิเคชันไคลเอนต์ของคุณเพื่อใช้หมายเลขพอร์ตนั้นเสมอ วิธีการนี้มีปัญหาดังต่อไปนี้ :
- คุณต้องอัปเดตและดูแลรักษารหัสแอปพลิเคชันไคลเอนต์เพื่อให้แน่ใจว่ากำลังเชื่อมต่อกับพอร์ตที่เหมาะสม
- พอร์ตที่คุณเลือกสำหรับแต่ละอินสแตนซ์อาจถูกใช้โดยบริการหรือแอปพลิเคชันอื่นบนเซิร์ฟเวอร์ซึ่งทำให้อินสแตนซ์ของ SQL Server ไม่พร้อมใช้งาน
และข้อมูลเพิ่มเติมจากบทความเดียวกันจากส่วน "วิธีการทำงานของเบราว์เซอร์เซิร์ฟเวอร์ SQL":
เพราะอินสแตนซ์เดียวของ SQL Server สามารถใช้พอร์ตหรือไพพ์ได้หมายเลขพอร์ตที่แตกต่างกันและชื่อไปป์ถูกกำหนดไว้สำหรับอินสแตนซ์ที่มีชื่อรวมถึง SQL Server Express ตามค่าเริ่มต้นเมื่อเปิดใช้งานอินสแตนซ์ที่มีชื่อและ SQL Server Express จะถูกกำหนดค่าให้ใช้พอร์ตแบบไดนามิกนั่นคือจะมีการกำหนดพอร์ตที่พร้อมใช้งานเมื่อเริ่มเซิร์ฟเวอร์ SQL หากคุณต้องการสามารถกำหนดพอร์ตเฉพาะให้กับอินสแตนซ์ของ SQL Server เมื่อเชื่อมต่อไคลเอนต์สามารถระบุพอร์ตเฉพาะ แต่ถ้าพอร์ตถูกกำหนดแบบไดนามิกหมายเลขพอร์ตสามารถเปลี่ยนแปลงได้เมื่อใดก็ตามที่มีการรีสตาร์ท SQL Server ดังนั้นจึงไม่ทราบหมายเลขพอร์ตที่ถูกต้องสำหรับลูกค้า ... เมื่อไคลเอนต์ SQL Server ร้องขอทรัพยากร SQL Server ไลบรารีเครือข่ายไคลเอ็นต์จะส่งข้อความ UDP ไปยังเซิร์ฟเวอร์โดยใช้พอร์ต 1434 เบราว์เซอร์เซิร์ฟเวอร์ SQL ตอบสนองกับพอร์ต TCP / IP หรือไปป์ที่ระบุชื่อของอินสแตนซ์ที่ร้องขอ