یکی از چالشهای رایج مدیران پایگاه داده (DBA) و مدیران شبکه، نصب و راهاندازی چند نسخه از SQL Server روی یک Windows Server است. در این مقاله، به صورت گامبهگام و کاربردی بررسی میکنیم که چگونه میتوان بدون ایجاد اختلال در نسخههای موجود، اتصال راه دور (Remote Connection) را برای نسخه جدید برقرار کرد. اگر با خطاهای اتصال به SQL Server مواجه میشوید، این راهنمای عیبیابی مخصوص شماست.
۱. وضعیت اولیه سرور و بررسی چالش
فرض کنید روی یک سرور ویندوزی، دو نسخه SQL Server نصب شده است:
نسخه اول (SQL Server 2017): روی Instance پیشفرض `MSSQLSERVER` و پورت `TCP 1433` فعال است.
نسخه دوم (SQL Server 2022): روی Instance با نام `MSSQLSERVER2022` نصب شده است.
هدف ما این است که کلاینتها بتوانند از راه دور به صورت `SERVER-IP\MSSQLSERVER2022` به نسخه ۲۰۲۲ متصل شوند، بدون اینکه SQL Server 2017 دچار مشکل شود.
۲. مشکل اتصال اولیه چه بود؟
در حالت پیشفرض، SQL Server 2017 روی پورت استاندارد `TCP 1433` در حال کار بود. اما SQL Server 2022 به صورت Dynamic Port (پورت داینامیک) تنظیم شده بود (مثلاً `TCP Dynamic Ports: 51234`).
استفاده از پورت داینامیک باعث میشود مدیریت اتصال با Instance Name پیچیده شود، مخصوصاً اگر سرویس SQL Server Browser یا Windows Firewall به درستی تنظیم نشده باشند.
۳. چرا نمیتوانیم هر دو SQL Server را روی پورت 1433 قرار دهیم؟
یک قانون در شبکه وجود دارد: یک IP و یک پورت TCP نمیتوانند همزمان توسط دو سرویس مستقل Listen شوند.
اگر هر دو سرویس را روی 1433 تنظیم کنید، یکی از آنها نمیتواند سرویسدهی کند. بنابراین باید برای SQL 2022 یک پورت متفاوت تعیین کنیم. در این سناریو، پورت `1434` را برای نسخه ۲۰۲۲ در نظر میگیریم.
۴. آموزش تنظیم SQL Server 2022 روی پورت ثابت (Static Port)
برای تغییر پورت از داینامیک به ثابت، مراحل زیر را طی کنید:
1. نرمافزار **SQL Server Configuration Manager** را باز کنید.
2. به مسیر زیر بروید:
`SQL Server Network Configuration` / `Protocols for MSSQLSERVER2022`
3. روی `TCP/IP` کلیک راست کرده و `Properties` را انتخاب کنید.
4. به تب `IP Addresses` بروید.
5. در قسمت `IPAll`، تنظیمات را به شکل زیر تغییر دهید:
TCP Dynamic Ports: (مقدار آن را خالی کنید)
TCP Port: `1434`
با این کار، Dynamic Port غیرفعال شده و سرویس ملزم میشود فقط روی پورت 1434 گوش دهد.
۵. مزایای استفاده از پورت ثابت (Static Port) در SQL Server
برای سرورهای Production و محیطهای واقعی، استفاده از پورت ثابت مزایای زیر را دارد:
* مدیریت سادهتر فایروال (Windows Firewall)
* مانیتورینگ و عیبیابی (Troubleshooting) راحتتر
* جلوگیری از تغییر ناگهانی پورت در راهاندازی مجدد سرور
* امکان تعریف Rule دقیق در فایروال شبکه
۶. نقش SQL Server Browser در اتصال به SQL Server چیست؟
نکته بسیار مهم: وقتی کاربر در SSMS آدرس `SERVER-IP\MSSQLSERVER2022` را وارد میکند، کلاینت مستقیماً نمیداند که Instance مورد نظر روی چه پورتی در حال کار است.
اینجاست که سرویس SQL Server Browser وارد عمل میشود. وظیفه این سرویس اعلام پورت به کلاینت است. سرویس Browser از پورت `UDP 1434` استفاده میکند تا به کلاینت اعلام کند که `MSSQLSERVER2022` روی `TCP 1434` در حال کار است.
۷. تفاوت TCP و UDP در این سناریو
به عنوان یک مدیر سرور، این تفاوت را به خاطر بسپارید:
TCP 1434: برای ارتباط مستقیم دادهای با SQL Server 2022 است. (Client / TCP 1434 / SQL Server 2022)
UDP 1434: برای سرویس SQL Server Browser است. (Client / UDP 1434 / SQL Server Browser)
بنابراین، باز بودن فقط TCP 1434 برای اتصال با Instance Name کافی نیست؛ اگر از Browser برای Resolve کردن نام Instance استفاده شود، UDP 1434 نیز باید در دسترس باشد.
۸. تنظیم Windows Firewall برای SQL Server
در فایروال ویندوز سرور باید Ruleهای زیر را ایجاد کنید:
TCP 1433 : برای SQL Server 2017
TCP 1434 : برای SQL Server 2022
UDP 1434 : برای سرویس SQL Server Browser
نکته: اگر SQL Server 2017 از قبل روی 1433 در دسترس بوده، به Rule آن دست نزنید.
۹. بررسی Listen کردن SQL Server روی پورت
پس از Restart کردن سرویس SQL Server 2022، روی خود سرور Command Prompt را باز کرده و دستور زیر را اجرا کنید:
netstat -ano | findstr :1434
اگر خروجی شبیه به زیر بود، یعنی سرویس با موفقیت روی پورت 1434 در حال Listen است:
TCP 0.0.0.0:1434 0.0.0.0:0 LISTENING
برای بررسی همزمان چند پورت میتوانید از دستور زیر استفاده کنید:
netstat -ano | findstr "1433 1434 51234"
10. تست نهایی در SQL Server Management Studio (SSMS)
در محیط SSMS در قسمت Server name، آدرس `SERVER-IP\MSSQLSERVER2022` را وارد کنید. اگر تنظیمات درست باشند، مسیر ارتباطی به این شکل خواهد بود:
برای SQL Server 2022: کلاینت از طریق `UDP 1434` با Browser صحبت میکند و سپس از طریق `TCP 1434` به دیتابیس وصل میشود.
برای SQL Server 2017:کلاینت مستقیماً از طریق `TCP 1433` متصل میشود.
نتیجهگیری نهایی و ساختار سرور
در نهایت ساختار سرور شما به این شکل درآمد:
SQL Server 2017 (MSSQLSERVER): روی پورت `TCP 1433`
SQL Server 2022 (MSSQLSERVER2022): روی پورت `TCP 1434`
SQL Server Browser:روی پورت `UDP 1434`