Dynamic Port“ ไดนามิก” เมื่อใด


23

วันนี้ฉันมีการพูดคุยเกี่ยวDynamic Portsกับหนึ่งในเพื่อนร่วมงานของฉันและสามารถใช้ความช่วยเหลือบางอย่างเพื่ออธิบายวิธีการทำงานของพวกเขา

คำถามแรก:หากการIPALL TCP Dynmaic Portsตั้งค่าเป็นหมายเลขเฉพาะ (พูด 1971) นั่นหมายความว่าคุณมีพอร์ตคงที่เป็น 1971 หรือพอร์ตแบบไดนามิกที่ปัจจุบันคือ 1971 และอาจมีการเปลี่ยนแปลงในบางจุดในอนาคต

ป้อนคำอธิบายรูปภาพที่นี่

คำถามที่สอง:นี่คือสิ่งที่ฉันอยากรู้มากที่สุด เรามีอินสแตนซ์ที่มีพอร์ตเดียวกัน (ค่าในการIPALL TCP Dynmaic Portsตั้งค่า) เป็นเวลาหลายปีผ่านการรีสตาร์ทจำนวนมาก สาเหตุใดที่ทำให้ไดนามิกพอร์ตเปลี่ยนหลังจากที่รีสตาร์ทอินสแตนซ์แล้วจริง ๆ ?

คำตอบ:


22

บทความ 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ในคำถามของฉันด้านบน
Kenneth Fisher

@ KennethFisher สำหรับคุณsecond question- ทุกครั้งที่คุณเริ่มใช้งาน SQLServer ที่มีชื่อจะใช้พอร์ตที่จัดสรรไว้ ในกรณีที่พอร์ตอื่นถูกใช้โดยโปรแกรมอื่น SQL Server จะเลือกพอร์ตอื่นในเวลาที่รีสตาร์ท ไดนามิกพอร์ตถูกเลือกเมื่อเริ่มต้นครั้งแรกและโดยทั่วไปจะยังคงเหมือนเดิมผ่านการรีสตาร์ทในอนาคต (เก็บไว้ใน Registry) - แต่ถ้าใช้โดยโปรแกรมอื่นเซิร์ฟเวอร์ SQL จะเลือกพอร์ตใหม่ หมายเหตุ : สำหรับเซิร์ฟเวอร์ Prod ฉันใช้พอร์ตคงที่เท่านั้น - ความปลอดภัยและเหตุผลด้านความสะดวกในการจัดการ
Kin Shah

คุณจะอธิบายได้ไหมว่าทำไมคุณถึงคิดว่ามันคุ้มค่าที่จะใช้บริการใหม่อย่างสมบูรณ์ (เบราว์เซอร์เซิร์ฟเวอร์ SQL) ซึ่งทำงานบนพอร์ตแบบคงที่ดังนั้นจึงอาจไม่เริ่มทำงานถ้าพอร์ตนี้ถูกใช้เพียงเพราะคุณต้องการเริ่มเซิร์ฟเวอร์ SQL ใน กรณีที่มีบริการอื่น ๆ กำลังใช้พอร์ตที่คุณเงอะงะเกินกว่าจะแนบไปกับซอฟต์แวร์ที่แพงที่สุดที่คุณใช้อยู่
kakaz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.