none
cdc tables RRS feed

  • שאלה

  • שלום

    עקב תעופה של השרת( לא שרת ייצור) , טבלאות cdc הפסיקו להתמלא גם אחרי הפעלה מחדש של השרת ושל האגנט.

    ניסיתי להפעיל מחדש , תוך שמירת הנתונים על ידי העתקת הנתונים  לטבלאות זמניות ו- וdisable_table + enable_table והחזרתם לטבלאות cdc

    זה עבד בסביבת טסט אבל לא בסביבה שבה רציתי.

    השאלות:

    1. איך  לוודא שנתונים נרשמים ל--cdc -כלומר שאין הפסקה בכתיבה.

    2. איך לוודא שנתונים לא ימחקו אחרי שנכתבו לטבלאות cdc

    תודה

    רוני גודפרי


    Ronnie Godfrey

    יום שלישי 09 דצמבר 2014 13:40

תשובות

  • אהלן

    למעשה כבר רשמתי לך תשובה ארוכה מאוד אתמול בערב, אבל בטעות לחצתי על המקש של החץ אחורה, כאשר הפוקוס לא היה בחלון העריכה של הטקסט :-(, התוצאה היא שהדפדפן עבר לקישור הקודם שהייתי בו, וכל מה שרשמתי נעלם והלך לאיבוד. אחר כך התבאסתי ולא היה לי כוח לרשום הכל שוב.

    אני אנסה לרשום בקצרה מאוד את הנקודות החשובות

    1. על מנת לנטר שפעולת ניטור מסויימת עובדת כראוי, אפשר לבצע ניטור במספר שיטות במקביל ולהשוות את התוצאות. למשל אתה יכול לנטר שינויים ב DML בעזרת CDC, בעזרת מעקב אחרי אירועים מורחבים או בפרופיילר, ואתה יכול ליצור מערכת ניטור שלך בעזרת טריגרים וטבלאות לשמירת הנתונים, ועוד. אתה צריך לזכור שמאחורי הקלעים CDC  בעצם עובד עם אלמנטים פשוטים כמו טריגרים וטבלאות לשמירת הנתונים, ואין בעיה ליצור מערכת מקבילה. כאשר אתה מפעיל CDC על מסד נתונים נוצרים לך מייד כ 20 אטלמנטים חדשים (טבלאות, טריגרים, פרוצדורות שמורות), ובכל פעם שאתה מוסיף למעקב טבלאות נוספות נוספים אלמנטם, כמו למשל טריגר על הטבלה שהוספת.

    באופן כללי לא אמורה להיות בעיה מכיוון שטריגרים הם חלק מהטרנזקציה הרגילה, ואם יש נפילה אז הנפילה אמורה להיות לטרנזקציה עצמה. תוכל גם לעקוב אחרי לוג השגיאות לכן של השרת כדי לנטר נפילות אחרי שהגדרת CDC. אם יש בעיה אז פעולות שאמורות היו להצליח עלולות ליפול בשל הטריגרים של ה CDC למשל.

    2. שוב, אין מדובר בקסם חדש, אלא פשוט בשאלה שכמעט מקבילה לשאלה: "כיצד לוודא שנתונים לא נמחקים מטבלה מסויימת" (טבלה פעילה ולא read only). תיאורטית אתה יכול ליצור טריגרים על הטבלאות של ה CDC אבל זה יכול להשליך על פעולות אוטומטיות של ה CD ולכן צריך תמיד לחשוב.

    ** חשוב לציין שכל פעולות הניטור האלה, ועל אחת כמה וכמה עאם מבצעים מספר שיטות במקביל, מאוד מכבידות על השרת ומסד הנתונים ולא מומלץ לבצע אותם בשרת חי פעיל לתקופות ארוכות. ניטור צריך תמיד להיות ממוקד ככל הניתן.

    *** CDC בניגוד למערכת שבונים לבד יוצר מגבלות ברמת המסד נתונים, מכיוון שהוא מנוהל בחלקו ברמת השרת.



    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Editor יום רביעי 10 דצמבר 2014 15:17
    • סומן כתשובה על-ידי R1G2 יום חמישי 11 דצמבר 2014 06:23
    יום רביעי 10 דצמבר 2014 15:12
    מנחה דיון

כל התגובות

  • בקרוב מומחי הקהילה ינסו לסייע.

    תודה.


    מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של מיקרוסופט. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.

    יום רביעי 10 דצמבר 2014 12:31
  • אהלן

    למעשה כבר רשמתי לך תשובה ארוכה מאוד אתמול בערב, אבל בטעות לחצתי על המקש של החץ אחורה, כאשר הפוקוס לא היה בחלון העריכה של הטקסט :-(, התוצאה היא שהדפדפן עבר לקישור הקודם שהייתי בו, וכל מה שרשמתי נעלם והלך לאיבוד. אחר כך התבאסתי ולא היה לי כוח לרשום הכל שוב.

    אני אנסה לרשום בקצרה מאוד את הנקודות החשובות

    1. על מנת לנטר שפעולת ניטור מסויימת עובדת כראוי, אפשר לבצע ניטור במספר שיטות במקביל ולהשוות את התוצאות. למשל אתה יכול לנטר שינויים ב DML בעזרת CDC, בעזרת מעקב אחרי אירועים מורחבים או בפרופיילר, ואתה יכול ליצור מערכת ניטור שלך בעזרת טריגרים וטבלאות לשמירת הנתונים, ועוד. אתה צריך לזכור שמאחורי הקלעים CDC  בעצם עובד עם אלמנטים פשוטים כמו טריגרים וטבלאות לשמירת הנתונים, ואין בעיה ליצור מערכת מקבילה. כאשר אתה מפעיל CDC על מסד נתונים נוצרים לך מייד כ 20 אטלמנטים חדשים (טבלאות, טריגרים, פרוצדורות שמורות), ובכל פעם שאתה מוסיף למעקב טבלאות נוספות נוספים אלמנטם, כמו למשל טריגר על הטבלה שהוספת.

    באופן כללי לא אמורה להיות בעיה מכיוון שטריגרים הם חלק מהטרנזקציה הרגילה, ואם יש נפילה אז הנפילה אמורה להיות לטרנזקציה עצמה. תוכל גם לעקוב אחרי לוג השגיאות לכן של השרת כדי לנטר נפילות אחרי שהגדרת CDC. אם יש בעיה אז פעולות שאמורות היו להצליח עלולות ליפול בשל הטריגרים של ה CDC למשל.

    2. שוב, אין מדובר בקסם חדש, אלא פשוט בשאלה שכמעט מקבילה לשאלה: "כיצד לוודא שנתונים לא נמחקים מטבלה מסויימת" (טבלה פעילה ולא read only). תיאורטית אתה יכול ליצור טריגרים על הטבלאות של ה CDC אבל זה יכול להשליך על פעולות אוטומטיות של ה CD ולכן צריך תמיד לחשוב.

    ** חשוב לציין שכל פעולות הניטור האלה, ועל אחת כמה וכמה עאם מבצעים מספר שיטות במקביל, מאוד מכבידות על השרת ומסד הנתונים ולא מומלץ לבצע אותם בשרת חי פעיל לתקופות ארוכות. ניטור צריך תמיד להיות ממוקד ככל הניתן.

    *** CDC בניגוד למערכת שבונים לבד יוצר מגבלות ברמת המסד נתונים, מכיוון שהוא מנוהל בחלקו ברמת השרת.



    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Editor יום רביעי 10 דצמבר 2014 15:17
    • סומן כתשובה על-ידי R1G2 יום חמישי 11 דצמבר 2014 06:23
    יום רביעי 10 דצמבר 2014 15:12
    מנחה דיון
  • תודה רבה.

    נתת לי כמה רעיונות טובים.

    רוני


    Ronnie Godfrey

    יום חמישי 11 דצמבר 2014 06:24
  • בכיף,

    אני שמח שזה עזר :-)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שישי 12 דצמבר 2014 12:06
    מנחה דיון
  • שלום לכולם,

    אני רק רוצה לחדד נקודה חשובה. CDC לא משתמש בטריגרים על מנת לזהות שינויים בתוך טבלה, ולכן הוא גם לא יוצר אף טריגר על הטבלה. דרך הפעולה של CDC היא באמצעות ה-Log Reader, בדיוק כמו שעובדת Transactional Replication. הקריאה מהלוג מבוצעת באופן אסינכרוני, ואין לה שום השפעה על הטרנזקציות שמשנות נתונים בטבלה. הטריגרים היחידים ש-CDC כן יוצר הם DDL Triggers ברמת ה-Database וברמת ה-Server על מנת לזהות שינויים במבנה הטבלה או מחיקה של ה-Database כולו.

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeirasql.com

    יום חמישי 25 דצמבר 2014 06:29
    מנחה דיון
  • תודה רבה

    Ronnie Godfrey

    יום חמישי 25 דצמבר 2014 06:46
  • שלום לכולם,

    אני רק רוצה לחדד נקודה חשובה. CDC לא משתמש בטריגרים על מנת לזהות שינויים בתוך טבלה, ולכן הוא גם לא יוצר אף טריגר על הטבלה. דרך הפעולה של CDC היא באמצעות ה-Log Reader, בדיוק כמו שעובדת Transactional Replication. הקריאה מהלוג מבוצעת באופן אסינכרוני, ואין לה שום השפעה על הטרנזקציות שמשנות נתונים בטבלה. הטריגרים היחידים ש-CDC כן יוצר הם DDL Triggers ברמת ה-Database וברמת ה-Server על מנת לזהות שינויים במבנה הטבלה או מחיקה של ה-Database כולו.

    אכן, תודה על התיקון :-)

    לא נוצר טריגר על הטבלה עצמה, אלא אלמנטים אחרים "על" הטבלה עצמה (לא על הטבלה אבל בהוספת טבלה עבור ה CDC) כמו למשל (1) טבלה חדשה בה ישמרו הנתונים, (2) פונקציה חדשה (3) פרוצדורות חדשות.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    יום חמישי 25 דצמבר 2014 07:25
    מנחה דיון