הגדרת שיקוף מסד נתונים ב-MS SQL Server

מערכות SQL Server ה legacy שלכם זקוקות לסובלנות תקלות, אך הרישוי מונע פתרונות מודרניים? אנו מגדירים Database Mirroring—מנגנון שכפול סינכרוני או אסינכרוני אמין המגן על נתונים גם בגרסאות ישנות יותר. הצוות שלנו מספק פרויקט מפתח: מבחירת מצב ועד הגדרת failover אוטומטי, עם תמיכה מתמשכת ופעולה יציבה.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הוטל עליך להבטיח סובלנות לתקלות עבור מסדי נתונים מדור קודם בגרסאות SQL Server מיושנות שבהן Always On AG אינו זמין עקב רישוי. אנו נתקלים לעתים קרובות בבקשות כאלה מלקוחות שעדיין יש להם מערכות הפועלות על גרסאות מדור קודם בסביבת ייצור. Database Mirroring הוא פתרון עובד, אף שמיקרוסופט סימנה אותו כמיושן. להלן פרטים מעשיים שיעזרו לך להימנע ממלכודות נפוצות.

מדוע Database Mirroring עדיין מבוקש

למרות גיל הטכנולוגיה, mirroring נותר האפשרות היחידה עבור גרסאות SQL Server ישנות יותר (Standard, Web) ללא רישיון Enterprise. הוא אינו דורש רכיבים נוספים כמו Windows clustering, וההתקנה אורכת 2–3 ימים. מצב סינכרוני מספק RPO=0, שהוא קריטי עבור מערכות פיננסיות ו-ERP. בנוסף, mirroring אינו תלוי בגרסת מערכת ההפעלה וניתן לפרוס אותו על שרתים מבודדים ללא אחסון משותף.

כיצד לבחור: מצב סינכרוני או אסינכרוני

הבחירה נקבעת על ידי דרישות RPO וביצועים. מצב סינכרוני (High Safety) מבטיח אפס אובדן נתונים אך מגדיל את זמן התגובה ב-10–30% עקב המתנה לאישור מה-mirror. מצב אסינכרוני (High Performance) אינו ממתין, וממקסם את התפוקה, אך אובדן נתונים של כמה שניות אפשרי במהלך תקלה. failover אוטומטי פועל רק במצב סינכרוני עם שרת witness.

מצב RPO RTO ביצועים Failover אוטומטי
High Safety (סינכרוני) 0 שניות יורד ב-10–30% כן (עם witness)
High Performance (אסינכרוני) כמה שניות (אובדן אפשרי) דקות מקסימלי לא (ידני בלבד)

כיצד להגדיר Database Mirroring באמצעות T-SQL

ההתקנה מורכבת משלושה שלבים: יצירת endpoints, אתחול מסד הנתונים של ה-mirror, והתחלת הסשן. התהליך אורך בדרך כלל כ-30–40 דקות עם שרתים נקיים.

יצירת Endpoints

על שני השרתים ועל ה-witness (אופציונלי), צור endpoints על יציאת TCP 5022:

-- На PRINCIPAL и MIRROR
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = REQUIRED ALGORITHM AES);

-- На WITNESS (можно SQL Express)
CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);

אתחול מסד הנתונים של ה-Mirror

בצע גיבוי מלא וגיבוי לוג על ה-principal, ושחזר על ה-mirror במצב NORECOVERY:

-- На principal: бэкап
BACKUP DATABASE AppDB TO DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH COMPRESSION;
BACKUP LOG AppDB TO DISK = 'D:\Backup\AppDB_mirror_log.bak';
-- На mirror: восстановление
RESTORE DATABASE AppDB FROM DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH NORECOVERY, REPLACE, MOVE 'AppDB' TO 'E:\SQLData\AppDB.mdf', MOVE 'AppDB_log' TO 'E:\SQLLog\AppDB_log.ldf';
RESTORE LOG AppDB FROM DISK = 'D:\Backup\AppDB_mirror_log.bak' WITH NORECOVERY;

התחלת הסשן ואימות

תחילה על ה-mirror, ולאחר מכן על ה-principal:

-- На MIRROR:
ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL01.corp.local:5022';
-- На PRINCIPAL:
ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL02.corp.local:5022';
-- Добавление witness (если нужен автоfailover):
ALTER DATABASE AppDB SET WITNESS = N'TCP://SQL03.corp.local:5022';
-- Проверка состояния:
SELECT mirroring_state_desc, mirroring_role_desc, mirroring_safety_level_desc
FROM sys.database_mirroring
WHERE database_id = DB_ID('AppDB');

מצב תקין הוא -- На PRINCIPAL и MIRROR CREATE ENDPOINT Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = REQUIRED ALGORITHM AES); -- На WITNESS (можно SQL Express) CREATE ENDPOINT Mirroring STATE = STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED); (סינכרוני) או -- На principal: бэкап BACKUP DATABASE AppDB TO DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH COMPRESSION; BACKUP LOG AppDB TO DISK = 'D:\Backup\AppDB_mirror_log.bak'; -- На mirror: восстановление RESTORE DATABASE AppDB FROM DISK = 'D:\Backup\AppDB_mirror_init.bak' WITH NORECOVERY, REPLACE, MOVE 'AppDB' TO 'E:\SQLData\AppDB.mdf', MOVE 'AppDB_log' TO 'E:\SQLLog\AppDB_log.ldf'; RESTORE LOG AppDB FROM DISK = 'D:\Backup\AppDB_mirror_log.bak' WITH NORECOVERY; (אסינכרוני). -- На MIRROR: ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL01.corp.local:5022'; -- На PRINCIPAL: ALTER DATABASE AppDB SET PARTNER = N'TCP://SQL02.corp.local:5022'; -- Добавление witness (если нужен автоfailover): ALTER DATABASE AppDB SET WITNESS = N'TCP://SQL03.corp.local:5022'; -- Проверка состояния: SELECT mirroring_state_desc, mirroring_role_desc, mirroring_safety_level_desc FROM sys.database_mirroring WHERE database_id = DB_ID('AppDB'); מצביע על בעיה.

כיצד להימנע משגיאות אופייניות

מצב קלאסי: לאחר הגדרת endpoints, הקישוריות מאומתת (telnet ליציאה 5022 עובד), אך SYNCHRONIZED נתקע עם שגיאה 1418. הסיבה היא שלחשבונות השירות של SQL Server אין הרשאת CONNECT על ה-endpoints של זה. הפתרון הוא GRANT מפורש:

-- На SQL01 разрешить SQL02
GRANT CONNECT ON ENDPOINT::Mirroring TO [CORP\SQL02SvcAccount];
-- На SQL02 разрешить SQL01
GRANT CONNECT ON ENDPOINT::Mirroring TO [CORP\SQL01SvcAccount];

אם SQL פועל תחת Local System או Network Service, השתמש באישורים (certificates) במקום באימות Windows. טעות נפוצה נוספת היא שכחה להגדיר DNS או להוסיף ערכים לקובץ hosts, מה שגורם לכשלי חיבור.

שגיאה סיבה פתרון
שגיאה 1418 על SET PARTNER אין CONNECT על ה-endpoint GRANT CONNECT
SUSPENDED לאחר בעיית רשת אובדן קישוריות, הצפת לוג בדוק לוגים, ALTER ... RESUME
Failover אוטומטי לא מופעל אין witness או מצב אסינכרוני הוסף witness, עבור לסינכרוני

מה כוללת ההתקנה שלנו ל-Mirroring

המהנדסים שלנו מבצעים את המחזור המלא: ביקורת של התצורה הנוכחית (גרסת SQL Server, מהדורה, קישוריות רשת), תכנון הסכמה (בחירת מצב, החלטה על witness), הגדרת endpoints והרשאות, אתחול מסד הנתונים של ה-mirror עם העברה ל-LUNs חדשים, בדיקת כל תרחישי ה-failover (ידני ואוטומטי), ופיתוח runbook עם סקריפטים לניטור שמתריעים דרך Telegram/Slack. זמן התקנה ממוצע הוא 2–3 ימים כולל בדיקות. עבור הגירה ל-Always On AG, לוחות הזמנים מתארכים ל-5–7 ימים, אך זמן ההשבתה אינו עולה על 10 דקות.

לוחות זמנים ועלות

התקנת mirroring אורכת בין 2 ל-3 ימי עסקים. אם נדרשת הגירה ל-Always On AG, בין 5 ל-7 ימים. העלות נקבעת באופן אישי לאחר ביקורת, תוך התחשבות בגרסת SQL Server, מורכבות הסכמה ודרישות RPO/RTO. צור קשר לקבלת ביקורת של התשתית שלך — הצוות שלנו יישם מעברים כאלה עבור למעלה מ-30 לקוחות. קבל ייעוץ לבחירת אסטרטגיית סובלנות תקלות אופטימלית.