บทความ KB นี้: วิธีการกำหนดค่า SQL Server ให้ฟังบนพอร์ตเฉพาะจะชี้แจงสิ่งต่าง ๆ สำหรับคุณ:
การจัดสรรพอร์ตแบบไดนามิก
หากคุณกำหนดค่าอินสแตนซ์ของ SQL Server เพื่อใช้การจัดสรรพอร์ตแบบไดนามิกและคุณยังไม่ได้รีสตาร์ทอินสแตนซ์ของ SQL Server ค่ารีจิสทรีจะถูกตั้งค่าดังนี้:
TCPDynamicPorts = ว่าง
TCPPort = 0
อย่างไรก็ตามหากคุณกำหนดค่าอินสแตนซ์ของ SQL Server เพื่อใช้การจัดสรรพอร์ตแบบไดนามิกและคุณเริ่มอินสแตนซ์ของ SQL Server ใหม่ค่ารีจิสทรีจะถูกตั้งค่าดังนี้:
TCPDynamicPorts = พอร์ตปัจจุบันที่ใช้
TCPPort = พอร์ตปัจจุบันที่ใช้
การจัดสรรพอร์ตแบบคงที่:
หากคุณกำหนดค่าอินสแตนซ์ของ SQL Server ให้ใช้พอร์ตแบบสแตติกและคุณยังไม่ได้รีสตาร์ทอินสแตนซ์ของ SQL Server ค่ารีจิสทรีจะถูกตั้งค่าดังนี้:
TCPDynamicPorts = พอร์ตสุดท้ายที่ใช้
TCPPort = พอร์ตคงที่ใหม่ที่จะใช้หลังจากรีสตาร์ทครั้งถัดไป พอร์ตแบบคงที่ใหม่ที่คุณตั้งค่าโดยใช้ Server Network Utility
อย่างไรก็ตามหากคุณกำหนดค่าอินสแตนซ์ของ SQL Server ให้ใช้พอร์ตแบบสแตติกและคุณรีสตาร์ทอินสแตนซ์ของ SQL Server ค่ารีจิสทรีจะถูกตั้งค่าดังนี้:
TCPDynamicPorts = ว่าง
TCPPort = พอร์ตคงที่ใหม่ที่คุณตั้งค่าโดยใช้ Server Network Utility
สำหรับคำถามที่สองของคุณ -
ทุกครั้งที่คุณเริ่มต้น SQLServer ที่มีชื่อจะใช้พอร์ตที่ถูกจัดสรร ในกรณีที่พอร์ตอื่นถูกใช้โดยโปรแกรมอื่น SQL Server จะเลือกพอร์ตอื่น ณ เวลาที่ทำการรีสตาร์ทนั่นคือเลือกพอร์ตแบบไดนามิกเมื่อเริ่มต้นครั้งแรกและโดยทั่วไปจะยังคงเหมือนเดิมผ่านการรีสตาร์ทในอนาคต (แต่เก็บไว้ใน Registry) มันใช้โดยโปรแกรมอื่นจากนั้นเซิร์ฟเวอร์ SQL จะเลือกพอร์ตใหม่ หมายเหตุ: สำหรับเซิร์ฟเวอร์ Prod ฉันใช้พอร์ตคงที่เท่านั้น - ความปลอดภัยและเหตุผลด้านความสะดวกในการจัดการ
หมายเหตุ: มีอะไรเจ๋ง ๆ อีกมากที่จะค้นพบ:
ตรวจสอบว่ามีการใช้พอร์ตแบบไดนามิกหรือไม่ใช้ T-SQL:
SELECT NAME
,protocol_desc
,type_desc
,state_desc
,is_admin_endpoint
,port
,is_dynamic_port
,ip_address
FROM sys.tcp_endpoints
คุณสามารถใช้ netstat -ano
เพื่อตรวจสอบโดยใช้ cmdline
นอกจากนี้คุณสามารถตรวจสอบสิ่งที่แคชไว้ก่อนหน้านี้ในรีจิสทรีในฝั่งไคลเอ็นต์เป็นพอร์ตที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ sql:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect
Second question
ในคำถามของฉันด้านบน