משיב מוביל
cdc tables

שאלה
-
שלום
עקב תעופה של השרת( לא שרת ייצור) , טבלאות cdc הפסיקו להתמלא גם אחרי הפעלה מחדש של השרת ושל האגנט.
ניסיתי להפעיל מחדש , תוך שמירת הנתונים על ידי העתקת הנתונים לטבלאות זמניות ו- וdisable_table + enable_table והחזרתם לטבלאות cdc
זה עבד בסביבת טסט אבל לא בסביבה שבה רציתי.
השאלות:
1. איך לוודא שנתונים נרשמים ל--cdc -כלומר שאין הפסקה בכתיבה.
2. איך לוודא שנתונים לא ימחקו אחרי שנכתבו לטבלאות cdc
תודה
רוני גודפרי
Ronnie Godfrey
תשובות
-
אהלן
למעשה כבר רשמתי לך תשובה ארוכה מאוד אתמול בערב, אבל בטעות לחצתי על המקש של החץ אחורה, כאשר הפוקוס לא היה בחלון העריכה של הטקסט :-(, התוצאה היא שהדפדפן עבר לקישור הקודם שהייתי בו, וכל מה שרשמתי נעלם והלך לאיבוד. אחר כך התבאסתי ולא היה לי כוח לרשום הכל שוב.
אני אנסה לרשום בקצרה מאוד את הנקודות החשובות
1. על מנת לנטר שפעולת ניטור מסויימת עובדת כראוי, אפשר לבצע ניטור במספר שיטות במקביל ולהשוות את התוצאות. למשל אתה יכול לנטר שינויים ב DML בעזרת CDC, בעזרת מעקב אחרי אירועים מורחבים או בפרופיילר, ואתה יכול ליצור מערכת ניטור שלך בעזרת טריגרים וטבלאות לשמירת הנתונים, ועוד. אתה צריך לזכור שמאחורי הקלעים CDC בעצם עובד עם אלמנטים פשוטים כמו טריגרים וטבלאות לשמירת הנתונים, ואין בעיה ליצור מערכת מקבילה. כאשר אתה מפעיל CDC על מסד נתונים נוצרים לך מייד כ 20 אטלמנטים חדשים (טבלאות, טריגרים, פרוצדורות שמורות), ובכל פעם שאתה מוסיף למעקב טבלאות נוספות נוספים אלמנטם, כמו למשל טריגר על הטבלה שהוספת.
באופן כללי לא אמורה להיות בעיה מכיוון שטריגרים הם חלק מהטרנזקציה הרגילה, ואם יש נפילה אז הנפילה אמורה להיות לטרנזקציה עצמה. תוכל גם לעקוב אחרי לוג השגיאות לכן של השרת כדי לנטר נפילות אחרי שהגדרת CDC. אם יש בעיה אז פעולות שאמורות היו להצליח עלולות ליפול בשל הטריגרים של ה CDC למשל.
2. שוב, אין מדובר בקסם חדש, אלא פשוט בשאלה שכמעט מקבילה לשאלה: "כיצד לוודא שנתונים לא נמחקים מטבלה מסויימת" (טבלה פעילה ולא read only). תיאורטית אתה יכול ליצור טריגרים על הטבלאות של ה CDC אבל זה יכול להשליך על פעולות אוטומטיות של ה CD ולכן צריך תמיד לחשוב.
** חשוב לציין שכל פעולות הניטור האלה, ועל אחת כמה וכמה עאם מבצעים מספר שיטות במקביל, מאוד מכבידות על השרת ומסד הנתונים ולא מומלץ לבצע אותם בשרת חי פעיל לתקופות ארוכות. ניטור צריך תמיד להיות ממוקד ככל הניתן.
*** CDC בניגוד למערכת שבונים לבד יוצר מגבלות ברמת המסד נתונים, מכיוון שהוא מנוהל בחלקו ברמת השרת.
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום רביעי 10 דצמבר 2014 15:17
- סומן כתשובה על-ידי R1G2 יום חמישי 11 דצמבר 2014 06:23
כל התגובות
-
-
אהלן
למעשה כבר רשמתי לך תשובה ארוכה מאוד אתמול בערב, אבל בטעות לחצתי על המקש של החץ אחורה, כאשר הפוקוס לא היה בחלון העריכה של הטקסט :-(, התוצאה היא שהדפדפן עבר לקישור הקודם שהייתי בו, וכל מה שרשמתי נעלם והלך לאיבוד. אחר כך התבאסתי ולא היה לי כוח לרשום הכל שוב.
אני אנסה לרשום בקצרה מאוד את הנקודות החשובות
1. על מנת לנטר שפעולת ניטור מסויימת עובדת כראוי, אפשר לבצע ניטור במספר שיטות במקביל ולהשוות את התוצאות. למשל אתה יכול לנטר שינויים ב DML בעזרת CDC, בעזרת מעקב אחרי אירועים מורחבים או בפרופיילר, ואתה יכול ליצור מערכת ניטור שלך בעזרת טריגרים וטבלאות לשמירת הנתונים, ועוד. אתה צריך לזכור שמאחורי הקלעים CDC בעצם עובד עם אלמנטים פשוטים כמו טריגרים וטבלאות לשמירת הנתונים, ואין בעיה ליצור מערכת מקבילה. כאשר אתה מפעיל CDC על מסד נתונים נוצרים לך מייד כ 20 אטלמנטים חדשים (טבלאות, טריגרים, פרוצדורות שמורות), ובכל פעם שאתה מוסיף למעקב טבלאות נוספות נוספים אלמנטם, כמו למשל טריגר על הטבלה שהוספת.
באופן כללי לא אמורה להיות בעיה מכיוון שטריגרים הם חלק מהטרנזקציה הרגילה, ואם יש נפילה אז הנפילה אמורה להיות לטרנזקציה עצמה. תוכל גם לעקוב אחרי לוג השגיאות לכן של השרת כדי לנטר נפילות אחרי שהגדרת CDC. אם יש בעיה אז פעולות שאמורות היו להצליח עלולות ליפול בשל הטריגרים של ה CDC למשל.
2. שוב, אין מדובר בקסם חדש, אלא פשוט בשאלה שכמעט מקבילה לשאלה: "כיצד לוודא שנתונים לא נמחקים מטבלה מסויימת" (טבלה פעילה ולא read only). תיאורטית אתה יכול ליצור טריגרים על הטבלאות של ה CDC אבל זה יכול להשליך על פעולות אוטומטיות של ה CD ולכן צריך תמיד לחשוב.
** חשוב לציין שכל פעולות הניטור האלה, ועל אחת כמה וכמה עאם מבצעים מספר שיטות במקביל, מאוד מכבידות על השרת ומסד הנתונים ולא מומלץ לבצע אותם בשרת חי פעיל לתקופות ארוכות. ניטור צריך תמיד להיות ממוקד ככל הניתן.
*** CDC בניגוד למערכת שבונים לבד יוצר מגבלות ברמת המסד נתונים, מכיוון שהוא מנוהל בחלקו ברמת השרת.
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום רביעי 10 דצמבר 2014 15:17
- סומן כתשובה על-ידי R1G2 יום חמישי 11 דצמבר 2014 06:23
-
-
-
שלום לכולם,
אני רק רוצה לחדד נקודה חשובה. CDC לא משתמש בטריגרים על מנת לזהות שינויים בתוך טבלה, ולכן הוא גם לא יוצר אף טריגר על הטבלה. דרך הפעולה של CDC היא באמצעות ה-Log Reader, בדיוק כמו שעובדת Transactional Replication. הקריאה מהלוג מבוצעת באופן אסינכרוני, ואין לה שום השפעה על הטרנזקציות שמשנות נתונים בטבלה. הטריגרים היחידים ש-CDC כן יוצר הם DDL Triggers ברמת ה-Database וברמת ה-Server על מנת לזהות שינויים במבנה הטבלה או מחיקה של ה-Database כולו.
-----------------------------
גיא גלנצר
יועץ ומדריך SQL Server
Madeira - SQL Server Services
http://www.madeirasql.com
-
-
שלום לכולם,
אני רק רוצה לחדד נקודה חשובה. CDC לא משתמש בטריגרים על מנת לזהות שינויים בתוך טבלה, ולכן הוא גם לא יוצר אף טריגר על הטבלה. דרך הפעולה של CDC היא באמצעות ה-Log Reader, בדיוק כמו שעובדת Transactional Replication. הקריאה מהלוג מבוצעת באופן אסינכרוני, ואין לה שום השפעה על הטרנזקציות שמשנות נתונים בטבלה. הטריגרים היחידים ש-CDC כן יוצר הם DDL Triggers ברמת ה-Database וברמת ה-Server על מנת לזהות שינויים במבנה הטבלה או מחיקה של ה-Database כולו.
אכן, תודה על התיקון :-)
לא נוצר טריגר על הטבלה עצמה, אלא אלמנטים אחרים "על" הטבלה עצמה (לא על הטבלה אבל בהוספת טבלה עבור ה CDC) כמו למשל (1) טבלה חדשה בה ישמרו הנתונים, (2) פונקציה חדשה (3) פרוצדורות חדשות.
Ronen Ariely
[Personal Site] [Blog] [Facebook]- נערך על-ידי pituachMVP, Moderator יום חמישי 25 דצמבר 2014 07:26