ฉันจะทำให้การเชื่อมต่อ ODBC ของเซิร์ฟเวอร์ SQL นี้ทำงานได้อย่างไร


30

หมายเหตุ: ฉันเห็นได้ชัดว่าได้เปลี่ยนชื่อเซิร์ฟเวอร์และ IP เป็นชื่อปลอม

นี่คือสิ่งที่เกิดขึ้น ฉันมีเซิร์ฟเวอร์ที่ฉันเรียกMYSERVERใช้ Microsoft SQL Server Express 2005 อยู่บนเซิร์ฟเวอร์นี้เองฉันมีการเชื่อมต่อ ODBC ตั้งค่าชี้ไปที่ตัวเองและทำงานได้อย่างสมบูรณ์ ฉันเข้าสู่ระบบโดยใช้การพิสูจน์ตัวจริงของเซิร์ฟเวอร์ SQL (ไม่ใช่การรับรองความถูกต้องของ Windows) และได้รับการตั้งค่าเช่นนี้:

รูปภาพของการเชื่อมต่อ ODBC ที่ดี

อย่างที่ฉันพูดไป แต่ต่อไปฉันมีคอมพิวเตอร์เครื่องอื่นซึ่งอยู่ในโดเมนที่แตกต่างกันโดยสิ้นเชิง / ไม่ได้อยู่บนอินทราเน็ตที่ต้องการเข้าถึง SQL Server เครื่องเดียวกันนี้ที่โฮสต์บน MYSERVER เนื่องจากอยู่ในโดเมนอื่นจึงไม่รู้จักชื่อ "MYSERVER" ฉันต้องชี้ไปที่ที่อยู่ IP ของ MYSERVER ซึ่งเราจะบอกว่าเป็น 123.456.789.012 แต่การเชื่อมต่อ ODBC ดูเหมือนจะไม่ทำงานที่นั่น ฉันลองตั้งค่าแบบนี้:

ภาพการเชื่อมต่อ ODBC ไม่ถูกต้อง

มันใช้งานไม่ได้ เมื่อฉันใส่ชื่อผู้ใช้และรหัสผ่านแล้วกดถัดไปมันจะหยุดทำงานเป็นเวลา 10 ถึง 20 วินาทีแล้วในที่สุดก็กลับมาพร้อมกับข้อผิดพลาดต่อไปนี้:

Connection failed:
SQLState: '01000'
SQL Server Error: 1326
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()).
Connection failed:
SQLState: '08001'
SQL Server Error: 17
[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.

ถ้าฉันลองสิ่งเดียวกัน แต่เปลี่ยน "เซิร์ฟเวอร์" 123.456.789.012\SQLEXPRESSเป็นเพียงแค่เก่า123.456.789.012ฉันได้รับข้อผิดพลาดอื่น:

Connection failed:
SQLState: '01000'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Invalid Instance()).
Connection failed:
SQLState: '08001'
SQL Server Error: 14
[Microsoft][ODBC SQL Server Driver][DBNETLIB]Invalid connection.

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

telnet 123.456.789.012 1433

... จากบรรทัดคำสั่งทั้งหมดที่ฉันต้องการ ดังนั้นฉันไม่แน่ใจว่าจะทำอย่างไร ฉันรู้ว่า SQL Server มีอยู่ทำงานได้และการเชื่อมต่อ ODBC สามารถตั้งค่าได้อย่างถูกต้อง ฉันแค่ไม่แน่ใจว่าเป็นสิ่งที่ฉันผิดในการตั้งค่าการเชื่อมต่อของฉันที่มีการโยนข้อผิดพลาดเหล่านี้ จากข้อผิดพลาดหลังที่ฉันแสดงไว้ดูเหมือนว่ามันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ แต่ไม่สามารถค้นหาอินสแตนซ์ได้ (เนื่องจากฉันไม่ได้ระบุหนึ่งครั้ง) นั่นหมายความว่าฉันแค่ต้องใช้ไวยากรณ์ต่าง ๆ เพื่อระบุ IP พร้อมกับชื่ออินสแตนซ์? ฉันจะทำอย่างไร ขอบคุณล่วงหน้า.

คำตอบ:


18

ไพพ์เนมและโปรโตคอล TCIP สำหรับ SQL Server 2005 จะปิดใช้งานตามค่าเริ่มต้น คุณเปิดใช้งานภายใต้ "ตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL" หรือไม่ คุณสามารถค้นหาโปรโตคอลในการกำหนดค่าเครือข่ายเซิร์ฟเวอร์ SQL และภายใต้การกำหนดค่า xx ไคลเอนต์ SQL Native

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


9
ฉันยอมรับคำตอบของคุณเพราะมันทำให้ฉันถูก ภายใต้ตัวจัดการการตั้งค่าคอนฟิกเซิร์ฟเวอร์ SQL, TCP / IP ถูกเปิดใช้งานแล้วตลอดภายใต้ "การกำหนดค่าเครือข่าย SQL Server 2005> โปรโตคอลสำหรับ SQLEXPRESS" และ "การตั้งค่าคอนฟิกไคลเอนต์ SQL ดั้งเดิม> ไคลเอนต์โปรโตคอล" เนมไปป์ถูกเปิดใช้งานในภายหลัง ฉันเปิดใช้งานก่อนหน้านี้ แต่ดูเหมือนจะไม่ช่วย (ข้อความแสดงข้อผิดพลาดเดียวกัน) ในที่สุดฉันเปลี่ยนแหล่ง ODBC เพื่อใช้ไดรเวอร์ "SQL Native Client" แทนไดรเวอร์ "SQL Server" และสุดท้ายก็ใช้งานได้
soapergem

ขอบคุณ SoaperGEM! ฉันไม่เคยคิดว่าจะได้ลองใช้ SQL Native Client! ทำงานเหมือนจับใจ!
ฟิลลิป Senn

5

คุณเปิดใช้งานบริการSQL Server Browserตามวิธีการกำหนดค่า SQL Server 2005 เพื่ออนุญาตการเชื่อมต่อระยะไกลหรือไม่:

ถ้าคุณใช้ SQL Server 2005 โดยใช้ชื่ออินสแตนซ์และคุณไม่ได้ใช้หมายเลขพอร์ต TCP / IP เฉพาะในสายอักขระการเชื่อมต่อของคุณคุณต้องเปิดใช้งานบริการ SQL Server Browser เพื่ออนุญาตการเชื่อมต่อระยะไกล ตัวอย่างเช่นมีการติดตั้ง SQL Server 2005 Express ด้วยชื่ออินสแตนซ์เริ่มต้นของชื่อคอมพิวเตอร์ \ SQLEXPRESS


การเชื่อมต่อกับเซิร์ฟเวอร์ \ instance บนโลคัลใช้กลไกที่แตกต่างจากระยะไกลหรือไม่?
แซม

@Sam เห็น Hakan Winther คำตอบ
Sim

4

เธรดนี้แก้ไขข้อความแสดงข้อผิดพลาดเดียวกันสำหรับฉันเมื่อใช้ Access เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MSSQL 2008 MSSQL 2005 และก่อนหน้านี้ทำงานได้ดีเพียงแค่ใช้ชื่อคอมพิวเตอร์ในสตริงการเชื่อมต่อ แต่ฉันต้องเปลี่ยนเป็นสตริงการเชื่อมต่อใน Access เป็นแบบเต็มเมื่ออินสแตนซ์ถูกอัพเกรดเป็น 2008:

servername\instancename,portnumber


2
ทำเพื่อฉันยกเว้นฉันไม่ต้องการหมายเลขพอร์ต
bgmCoder

2

ฉันมีปัญหาเดียวกันนี้และจัดการเพื่อแก้ไขโดยการเปลี่ยนไดรเวอร์ SQL เป็นไดรเวอร์ SQL Native Client ด้วย นี่เป็นเรื่องแปลกเหมือนในกรณีของฉันนี้ทำงานได้ดีมาหลายปีแล้วก็หยุดทำงาน ฉันสงสัยว่านี่เป็นสิ่งที่อยู่ในแนวของคนขับซึ่งอาจเสียหายได้ MDAC อาจช่วยได้ แต่ในตอนนี้ฉันมีความสุขที่ได้ทำงานเลย!


1

มันจะรู้จักชื่อเซิร์ฟเวอร์หรือไม่หากผ่านการรับรองโดยสมบูรณ์ ถ้าเป็น MYSERVER.domain.com เราต้องทำเช่นนั้นกับ SQL Server เมื่อเชื่อมต่อจากโดเมนอื่น หากคุณสามารถรับ ODBC System DSN เพื่อเชื่อมต่อเมื่อคุณทดสอบแหล่งข้อมูลแสดงว่าคุณกำลังดำเนินการอยู่ หากไม่ได้เชื่อมต่อในการตั้งค่า ODBC คุณต้องแก้ไขก่อน


นั่นคือสิ่งที่ฉันพยายามทำ - เพื่อให้ ODBC System DSN เชื่อมต่อในตอนแรกเมื่อฉันทดสอบแหล่งข้อมูล ดังนั้นผมจึงพยายามแนะนำของคุณพยายามที่ทั้งสองMYSERVER.domain.com\SQLEXPRESSและMYSERVER.domain.comแต่ที่ทั้งสองให้ฉันข้อผิดพลาดเดียวกันผมกล่าวข้างต้นตามลำดับ
soapergem

ที่พรอมต์คำสั่งบนคอมพิวเตอร์ประเภทอื่น "nslookup MYSERVER.domain.com" - นั่นจะแก้ไขไปยังที่อยู่ IP ที่ถูกต้อง (123.456.789.012) หรือเลย?
Sim

@Sim - ใช่คำสั่งนั้นแก้ไขได้อย่างถูกต้อง
soapergem

1

คุณใช้ชื่อ pipes หรือ TCP ในการเชื่อมต่อ ODBC ที่ใช้งานได้หรือไม่ เปิดใช้งาน TCP หรือไม่


1

ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน tios connectios ระยะไกลสำหรับเซิร์ฟเวอร์ SQL


0

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


การลองเครื่องหมายแบ็กสแลชคู่นั้นส่งผลให้เกิดข้อผิดพลาด 1326 ที่เหมือนกัน (อันแรกที่ฉันระบุไว้)
soapergem

0

ฉันมีปัญหาที่คล้ายกัน ในกรณีของฉันอีก sw กำหนดค่าการตั้งค่า ODBC ดังนั้นฉันไม่สามารถเปลี่ยนไดรเวอร์ ฉันแก้ไขกรณีของฉันเช่นนี้:

  1. ตั้งค่า TCP / IP สำหรับเซิร์ฟเวอร์เพื่อใช้พอร์ต 1433
  2. บนไคลเอ็นต์ให้ป้อนที่อยู่เซิร์ฟเวอร์เช่น: 192.168.1.5,1433 (ไม่มีชื่ออินสแตนซ์)

จากนั้นมันก็เริ่มทำงาน ระบบปฏิบัติการไคลเอ็นต์: ไดรเวอร์ Win7 x64: sqlsrv32.dll


0

สำหรับสิ่งที่คุ้มค่าฉันเริ่มได้รับข้อผิดพลาดนี้จากการเชื่อมต่อที่เคยทำงานมาก่อน มันกลับกลายเป็นว่าบริการ MSSQL $ SQLEXPRESS หยุดอย่างใด การเริ่มต้นใหม่จะแก้ไขปัญหา


0

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.