SQL Server Mirroring مکانیزمی در سطح دیتابیس است که با نگهداری یک نسخه همگام یا ناهمگام از دیتابیس اصلی (Principal) روی سرور پشتیبان (Mirror)، امکان Failover سریع و کاهش downtime را فراهم میکند. در این مقاله، همه آنچه درباره Mirroring نیاز دارید از مفاهیم پایه تا پیادهسازی قدمبهقدم، مسائل فنی، چالشها و ابزارهای مانیتورینگ بررسی میشود.
انواع Mirroring
High-Safety Mode با Failover دستی
- تراکنشها بهصورت همگام (Synchronous) روی هر دو سرور Principal و Mirror کامیت میشوند.
- کارایی اندکی کاهش مییابد اما تضمین میشود هیچ دادهای از دست نرود.
- Failover بهصورت دستی با دستور
ALTER DATABASE … SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSSانجام میشود.
High-Safety Mode با Failover اتوماتیک
- مشابه حالت قبلی با قابلیت همگامسازی کامل.
- با اضافه کردن یک Witness، زمانی که Principal از دسترس خارج شود، Mirror بهصورت خودکار جایگزین میشود.
High-Performance Mode (Asynchronous)
- تراکنش پس از نوشتن در لاگ روی Principal کامیت میشود و لاگها بهصورت ناهمگام به Mirror ارسال میشوند.
- امکان از دست رفتن دادههای نهایی وجود دارد اما تأثیر کمتری بر کارایی دارد.
- فقط در نسخه Enterprise در دسترس است.
موارد استفاده و عدم استفاده
- موارد استفاده
- نیاز به حداقل downtime و بازیابی سریع
- حفظ نسخه Hot Standby برای دیتابیسهای حیاتی
- انجام Rolling Upgrade با حداقل اختلال
- موارد عدم استفاده
- نیاز به Scale-Out خواندن روی نسخه پشتیبان
- همزمان Mirror کردن چندین دیتابیس
- محیطهایی که توصیه به استفاده از Always On Availability Groups است
مزایا و معایب
| ویژگی | مزایا | معایب |
|---|---|---|
| افزایش دسترسپذیری | Failover خودکار/دستی با حداقل downtime | فقط یک Mirror به ازای هر دیتابیس |
| یکپارچگی دادهها | همگامسازی کامل در High-Safety | افزایش حجم لاگ و نیاز به Full Recovery |
| امنیت در انتقال | پشتیبانی از رمزنگاری و استفاده از Endpoint امن | اندکی تأخیر در حالت همگام (Latency) |
| سادگی پیادهسازی با SSMS | راهاندازی و مانیتورینگ آسان | منسوخ شدن تدریجی؛ توصیه مایکروسافت: Availability Groups |
تفاوت با سایر راهکارهای HA
| راهکار HA | سطح پشتیبانی | همگام بودن تراکنش | Failover اتوماتیک | محدودیتها |
|---|---|---|---|---|
| Failover Clustering | Instance-Level | ندارد | دارد | اشتراکگذاری Storage، هزینه بالا |
| Log Shipping | Database-Level | ندارد | دستی | تأخیر در ارسال لاگ |
| Mirroring | Database-Level | انتخابی | اختیاری (Witness) | یک Mirror، نیاز به Full Recovery |
| Always On Availability Group | Database-Level | دارد | دارد | فقط Enterprise، پیچیدگی پیکربندی |
معماری داخلی و فرآیند همگامسازی

اجزای اصلی
- Principal Server: دیتابیس اصلی
- Mirror Server: نسخه پشتیبان با امکان NORECOVERY
- Witness Server: فقط در High-Safety اتوماتیک برای تصمیمگیری در مورد Failover
جریان کار Mirroring
- کاربر تراکنش را روی Principal انجام میدهد.
- لاگ تراکنش پس از کامیت روی Principal به Mirror ارسال میشود.
- در حالت همگام، Mirror لاگ را روی دیسک ذخیره کرده و تأیید میکند.
- تراکنش در Principal تکمیل میشود و در Mirror آماده Apply است.
صفهای همگامسازی
- Send Queue: لاگهای در انتظار ارسال
- Redo Queue: لاگهای دریافتی در انتظار Apply
امنیت در Mirroring
- ارتباط از طریق Database Mirroring Endpoint و پورت TCP (پیشفرض ۵۰۲۲)
- پشتیبانی از Encryption روی Endpoint
- نیاز به ایجاد Login با دسترسی CONNECT روی هر Endpoint
پیادهسازی Mirroring: Step by Step
۱- ایجاد Endpoint روی Principal و Mirror
-- روی Principal
CREATE ENDPOINT [Mirroring]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO
-- روی Mirror
CREATE ENDPOINT [Mirroring]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO
۲- بکاپ و ریاستور با NORECOVERY
-- روی Principal
ALTER DATABASE [TestDB] SET RECOVERY FULL;
BACKUP DATABASE [TestDB] TO DISK = N'\\Backup\TestDB.bak';
BACKUP LOG [TestDB] TO DISK = N'\\Backup\TestDB.trn';
GO
-- روی Mirror
RESTORE DATABASE [TestDB]
FROM DISK = N'\\Backup\TestDB.bak'
WITH NORECOVERY;
RESTORE LOG [TestDB]
FROM DISK = N'\\Backup\TestDB.trn'
WITH NORECOVERY;
GO
۳- تنظیم Partner و شروع Mirroring
-- روی Mirror
ALTER DATABASE [TestDB]
SET PARTNER = 'TCP://PrincipalServer:5022';
-- روی Principal
ALTER DATABASE [TestDB]
SET PARTNER = 'TCP://MirrorServer:5022';
GO
-- برای حالت Asynchronous
ALTER DATABASE [TestDB]
SET PARTNER SAFETY OFF;
GO
چالشهای رایج در پیادهسازی Mirroring
- خطای اتصال (Error 1418): تنظیم اشتباه Endpoint یا مجوزهای ناقص
- همگامسازی متوقف (SUSPENDED/DISCONNECTED): مشکلات شبکه یا فشار منابع
- Latency بالا: Send Queue و Redo Queue طولانی
- فشار منابع: افزایش CPU و I/O در حالت همگام
- محدودیت Mirror تکی و نبود Read-Only
- پیچیدگی در Failover دستی و خطر از دست رفتن داده
- اشتباه در مراحل Backup/Restore اولیه
ابزارهای مانیتورینگ Mirroring
ابزارهای داخلی SQL Server
- SQL Server Management Studio (SSMS): مشاهده وضعیت، Failover دستی
- Activity Monitor: بررسی بار و قفلها
- DMVs (
sys.database_mirroring): کوئری مانیتورینگ - Extended Events: ردیابی خطاها و قطع ارتباط
پیشنهاد مطالعه: SSMS ۲۲ چیست؟ بررسی کامل جدیدترین نسخه SQL Server Management Studio
دیگر ابزارهای موجود
| ابزار | ویژگیها |
|---|---|
| Redgate SQL Monitor | داشبورد گرافیکی، هشدارهای لحظهای |
| Idera SQL Diagnostic Manager | تحلیل منابع، هشدارهای پیشگیرانه |
| SolarWinds Database Performance | یادگیری ماشینی برای ناهنجاریها، میانپلتفرم |
| SentryOne SQL Sentry | شناسایی گلوگاهها، مدیریت منابع در محیطهای بزرگ |
سوالات متداول (FAQ)
۱. Mirroring چیست و چه تفاوتی با Replication دارد؟
Mirroring همگامسازی در سطح لاگ فیزیکی است و نسخه یکسانی از دیتابیس اصلی ارائه میدهد. Replication تغییرات منطقی را منتقل میکند.
۲. محدودیتهای اصلی چیست؟
فقط یک Mirror به ازای هر دیتابیس، نیاز به Full Recovery، عدم پشتیبانی از خواندن روی Mirror.
۳. چه زمانی از Mirroring استفاده کنیم؟
دیتابیسهای حیاتی که نیاز به بازیابی سریع دارند و Scale-Out خواندن اهمیت ندارد.
۴. اگر Principal قطع شود چه اتفاقی میافتد؟
در High-Safety اتوماتیک با Witness، Failover خودکار رخ میدهد. در دیگر حالات باید Failover دستی انجام شود.
تماس و مشاوره با لاندا
- راهاندازی Database Mirroring بدون تجربه و دانش عمیق میتواند منجر به خطاهای پرهزینه شود.
با خدمات لاندا میتوانید: - Mirroring را به صورت ایمن و بهینه پیادهسازی کنید.
- از ابزارهای مانیتورینگ پیشرفته برای تشخیص مشکلات استفاده کنید.
- در کنار Mirroring، گزینههای نوین مثل Always On را هم بررسی کنید.

و سپس «افزودن به صفحه اصلی» ضربه بزنید
و سپس «افزودن به صفحه اصلی» ضربه بزنید

نظری داده نشده