בדף הזה מוסבר איך להפעיל רמת בידוד של טרנזקציה בצילומי מצב של מסדי נתונים של Microsoft SQL Server ו-MySQL בעבודות שכפול של Cloud Data Fusion.
כשמגדירים משימת שכפול למסד נתונים, המשימה יוצרת תמונת מצב ראשונית של טבלאות המקור. כדי להבטיח עקביות של הנתונים, צריך להגדיר נעילות בטבלאות האלה.
אחרי הצילום הראשוני, המערכת מתעדת שינויים מצטברים במקור ומחיל אותם על יעד BigQuery כחלק מתהליך השכפול המתמשך.
שרת SQL
כדי לתעד שינויים בטבלאות המקור במסד נתונים של SQL Server, עבודת השכפול משתמשת במחבר Debezium. במהלך השלב snapshotting, Debezium מקבל נעילות בהתאם לsnapshot.isolation.mode שהוגדר.
בטבלה הבאה מוצגת השוואה בין מצבי הבידוד הנתמכים עבור משימות שכפול.
| מצב בידוד | נעילות שנרכשו | עקביות הנתונים |
|---|---|---|
read_uncommitted |
ללא | לא. |
read_committed |
נעילות משותפות על קבוצת שורות בכל פעם | חלקי. רשומה שנוספה יכולה להופיע פעמיים: פעם אחת בתמונת המצב הראשונית ופעם אחת בשלב הסטרימינג. |
repeatable_read(ברירת מחדל) |
מנעולים משותפים בכל השורות | חלקי. רשומה שנוספה יכולה להופיע פעמיים: פעם אחת בתמונת המצב הראשונית ופעם אחת בשלב הסטרימינג. |
snapshot |
ללא | מלא. |
exclusive |
נעילה בלעדית של כל הטבלאות | מלא. |
מידע נוסף על מצבי בידוד זמין במאמר בנושא הגדרת רמת בידוד של טרנזקציות.
מצב ברירת המחדל של בידוד snapshot הוא repeatable_read. במצב הזה, נעילות משותפות מופעלות על כל הנתונים שנקראים במהלך שלב יצירת התמונה. היא מונעת מעסקאות אחרות לשנות את השורות הקיימות, ויכולה לאפשר הוספה של רשומות חדשות (ראו העלאת רמת הנעילה).
מומלץ להשתמש ברפליקציה עם בידוד snapshot אם הוא כבר מופעל במסד הנתונים של המקור, כי הוא מספק עקביות מלאה של הנתונים בלי לנעול את הטבלאות. אם האפשרות לא מופעלת, כדאי לקרוא על ההשפעה של רמות בידוד שמבוססות על ניהול גרסאות של שורות במנוע מסד הנתונים של SQL Server לפני שמפעילים אותה.
לחלופין, אפשר להשתמש במצב בידוד read_committed, שלא נועל את הטבלאות במהלך שלב יצירת התמונה.
הפעלת בידוד snapshot במשימת רפליקציה
מפעילים בידוד snapshot במסד הנתונים של SQL Server:
ALTER DATABASE DATABASE_NAME SET ALLOW_SNAPSHOT_ISOLATION ON
מחליפים את
DATABASE_NAMEבשם של מסד הנתונים של SQL Server.מגדירים את ארגומנט זמן הריצה
snapshot.isolation.modeל-snapshot. מידע נוסף מופיע במאמר העברת ארגומנט של זמן ריצה לעבודת שכפול.
MySQL
כדי לתעד שינויים בטבלאות המקור במסד נתונים של MySQL, עבודת השכפול משתמשת במחבר Debezium. במהלך השלב snapshotting, Debezium מקבל נעילות בהתאם לsnapshot.locking.mode שהוגדר.
מצב הנעילה של התמונה הוא minimal כברירת מחדל. במצב הזה, המחבר מחזיק בנעילת הקריאה הגלובלית עבור החלק הראשוני של התמונה בזמן שהוא קורא את סכימות מסד הנתונים ומטא-נתונים אחרים. לאחר מכן, המחבר מאחזר את כל השורות באמצעות קריאה עקבית, באמצעות טרנזקציית REPEATABLE READ, שלא נועלת את הטבלאות.
כדי למנוע נעילות, מגדירים את המצב לnone.
לחלופין, כדי למנוע נעילות במסדי נתונים של MySQL שפועלים ב-Cloud SQL, אפשר לשכפל מהרפליקה במקום ממסד הנתונים הטרנזקציונלי.
שינוי התנהגות הנעילה במהלך הצילום של תמונת מצב ב-MySQL
- כדי לשנות את אופן הנעילה של תמונת מצב במסד הנתונים של MySQL, צריך להגדיר את ארגומנט זמן הריצה,
snapshot.locking.modeproperty, לערך מתאים של מצב נעילה.
מידע נוסף מופיע במאמר העברת ארגומנט של Debezium לעבודת שכפול.
מגבלות
- שכפול ב-Cloud Data Fusion תומך ב-Debezium Connector גרסה 1.3.
מקורות Oracle ב-Cloud Data Fusion
שכפול ממקורות Oracle ב-Cloud Data Fusion מבוסס על Datastream. Datastream לא נועל טבלאות.