none
מחיקת טבלאות מבסיס הנתונים RRS feed

  • שאלה

  •  היי, שאלה קצת מורכבת אז ככה :

    יש לנו בבסיס נתונים המון טבלאות שלא צריך אותם ( לא ניכנס  לפרטים  אבל  יותר מסביר להניח שלא צריך אותם)

    מנהל קיבל החלטה שהוע מעוניין למחוק את הטבלאות הללו - רק מה  הועלתה בקשה לגבות את הטבלאות הללו על בסיס נתונים אחר.

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

    עכשיו לפני ביצוע הפעולה אמרו  תדאג שיהיה rollback  במקרה והפעולה לא מצליחה  - זאת אומרת נגיד האפליקציה נפלה לא חוקרים לא בודקים כלום לא מפעילים פרופיילר

    ישר  ROLLBACK  כלומר להחזיר את כל הטבלאות שנמחקו למצבם המקורי כמובן עם כל  ה data  ועם המבנה  המקורי שלהם -- עכשיו פה נכנסתי לבעיה והבעיה היא:

    יש לי את כל השמות של הטבלאות שאותם אנ מגבה - אבל אני מעוניין  להפיק עבור כל טבלה כזאת סקריפט שיוצר אותה עם כל   הפרמטרים שלה ופה אני בבעיה איך אני יכול

    עבור כל שם טבלה לחולל את   statement  create שלה  ( בעצם לדמות את הפעולה של לעמוד על כפתור ימני על טבלה לועשות genereate script)

    ( אין פרצדורה פונקציה שמקבלת שם טבלה כפרמטר ומחוולת את כל  תהליך ה create שלה עם כל האובייקטים הקשורים אליה כגון PK,FK וכדומה?

    ( עוד דבר אני  אני לא מעוניין להשתמש generete script שעומדים על בסיס נתונים  ומחוללים סקריפט עבור כל הטבלאות או חלקים מהם )

    יום חמישי 26 ינואר 2012 11:31

תשובות

  •  היי ותודה על התגובה,

    אז ככה בארגון שי גיבויים מסודרים מלאים   + דיפרנציאלים + לוגים :)  ככה שאין בעיה בקטע של הגיבווים.

    הבעיה  שנגיד  שגיביתי  עכשיו את כל הבסיס נתונים ומחקתי טבלאות ( לאחר שעשיתי את כל הבדיקות שאני חושב שצריך לעשות)

    לא נחוצות -- עכשיו עולה הדרישה הבאה :

    המחיקה לא תקינה נא החזר את כל הטבלאות שמחקת -  ( ככה ממש )  אני לא אלך לגיבוי יתחיל לשחזר   200 טבלאות  + כל ה data שלהם מגיבוי.

    אני רוצה שבסקריפט שלי עבור כל טבלה שמחקתי וגיביתי יש מוצמד statement  עם כל  defention של הטבלה -- ככה במקרה של  rollback

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

    אם יש לך לזה רעיון אשמח לשמוע - אם לא אני יחשוב על פתרונות מחיקה יותר יצירתיים ( חשבית למחוק ב bulk  קטנים וכיוצא בזה)

    תודה שרון

     

     

    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 16:17
  • אהלן גיבור,

    איזו גרסא ומהדורה אתם עובדים ? 2005? 2008? Enterprise? Standard?

    יצא לי לעשות דבר דומה על 2005 Enterprise edition, לקחתי גיבוי Snapshot לפני השינוי ובמידה והיתה נפילה הייתי משחזר ממנו.

    אופציה?

    ערב טוב

     


    אסף שלם
    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 16:54
  • אני חושב שהדרך הנכונה היא מה שהצעתי למעלה (ומה שאסף מציע)

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

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


    signature
    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 20:02
    מנחה דיון

כל התגובות

  • לא הבנתי מה הבעיה פשוט לבצע גיבוי FULL למסד הנתונים כולו במקרה שעושים שינוי כל כך מהותי ב DDL+DML כפעולה חד פעמית זה ייתן לך את הדרך הכי מהירה וקלה להחזיק נקודת חזרה (וכמובן השיחזור יהיה קל)

    * האם אתם לא מבצעים גיבויים מלאים אף פעם? האם מסד הנתונים עבר את המאות טרה ובחרת לעבוד רק עם גיבוי חלקי? האם כמות הנתונים שנשארים (ז"א לא רוצים לגבות) גדול מאוד ביחס לכמות שמוחקים (ורוצים לגבות) ולכן יש מניעה לביצוע גיבוי של חלקים מיותרים? במקרים כאלה אתה יכול לעבוד עם SSIS ולבצע העתקה של האלמנטים והנתונים למסד נתונים חדש שישמש לשחזור במקרה הצורך

    ** אם אתה רוצה להריץ סקריפט על כל הטבלאות אתה יכול להשתמש בפרוצדורה המובנית sp_msforeachtable שנועדה בדיוק לזה


    signature
    יום חמישי 26 ינואר 2012 15:29
    מנחה דיון
  •  היי ותודה על התגובה,

    אז ככה בארגון שי גיבויים מסודרים מלאים   + דיפרנציאלים + לוגים :)  ככה שאין בעיה בקטע של הגיבווים.

    הבעיה  שנגיד  שגיביתי  עכשיו את כל הבסיס נתונים ומחקתי טבלאות ( לאחר שעשיתי את כל הבדיקות שאני חושב שצריך לעשות)

    לא נחוצות -- עכשיו עולה הדרישה הבאה :

    המחיקה לא תקינה נא החזר את כל הטבלאות שמחקת -  ( ככה ממש )  אני לא אלך לגיבוי יתחיל לשחזר   200 טבלאות  + כל ה data שלהם מגיבוי.

    אני רוצה שבסקריפט שלי עבור כל טבלה שמחקתי וגיביתי יש מוצמד statement  עם כל  defention של הטבלה -- ככה במקרה של  rollback

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

    אם יש לך לזה רעיון אשמח לשמוע - אם לא אני יחשוב על פתרונות מחיקה יותר יצירתיים ( חשבית למחוק ב bulk  קטנים וכיוצא בזה)

    תודה שרון

     

     

    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 16:17
  • אהלן גיבור,

    איזו גרסא ומהדורה אתם עובדים ? 2005? 2008? Enterprise? Standard?

    יצא לי לעשות דבר דומה על 2005 Enterprise edition, לקחתי גיבוי Snapshot לפני השינוי ובמידה והיתה נפילה הייתי משחזר ממנו.

    אופציה?

    ערב טוב

     


    אסף שלם
    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 16:54
  • אני חושב שהדרך הנכונה היא מה שהצעתי למעלה (ומה שאסף מציע)

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

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


    signature
    • סומן כתשובה על-ידי sharonof יום שלישי 31 ינואר 2012 16:38
    יום חמישי 26 ינואר 2012 20:02
    מנחה דיון
  • שלום,

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

    אם מצאת פתרון אחר, נשמח אם תשתף אותנו.

    תודה,

    צוות הפורומים.


    אם תגובתי פתרה את בעייתך - לחץ/י, על "סמן כתשובה" ליד סימן ה V הירוק. מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של Microsoft. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
    יום שלישי 31 ינואר 2012 15:20