PracticU

cursor - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › cursor - חלק 2
מילון מושגים:
דיסק - התקן לאחסון קבוע של נתונים, כמו כונן קשיח (HDD) או כונן מבוסס זיכרון מהיר (SSD).
גיבוי - העתק שמור של נתונים שנשמר כדי לאפשר שחזור במקרה של תקלה, מחיקה או פגיעה במקור.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.

cursor - חלק 2
בשיעור ממשיכים את נושא הקרסורים (cursor) ב-T-SQL, ובונים תוכנית תחזוקה שעוברת על כל בסיסי הנתונים בשרת ומגבה כל אחד מהם לדיסק.
השלבים העיקריים
1. זיהוי בסיסי הנתונים: שולפים את שמות הבסיסים מטבלת המערכת sys.databases. בסיסי המערכת master, model ו-msdb לא נכללים בגיבוי.
2. הגבלה לדוגמה: בהרצאה נבחרו שני בסיסים בלבד, כדי שהתוכנית תרוץ בזמן סביר.
3. הצהרה על הקרסור: מגדירים קרסור שמכיל את השאילתה שמחזירה את שמות הבסיסים שנבחרו.
4. פתיחה וקריאה: פותחים את הקרסור, ובכל איטרציה קוראים שורה עם FETCH NEXT לתוך משתנה.
5. לולאה: לולאת WHILE רצה כל עוד FETCH מחזיר שורה. בכל איטרציה בונים נתיב גיבוי מתוך שם הבסיס וסיומת .bak.
6. גיבוי: מריצים BACKUP DATABASE עם שם הבסיס ועם היעד TO DISK לנתיב שנבנה.
7. סגירה: בסיום סוגרים את הקרסור עם CLOSE, ומשחררים את המשאבים עם DEALLOCATE.
פקודות והגדרות
- DECLARE db_cursor CURSOR FOR SELECT name FROM master.sys.databases WHERE name IN (...)
- OPEN db_cursor ו-FETCH NEXT FROM db_cursor INTO @name
- BACKUP DATABASE @name TO DISK = @path
- CLOSE db_cursor ו-DEALLOCATE db_cursor
טעויות נפוצות
- מי שמריץ את הסקריפט בלי לסמן את כל הקוד יקבל שגיאה, כי הריצה מתייחסת רק לחלק המסומן.
- כל הגיבויים נכתבים לאותו נתיב עם אותו שם בכל הרצה, ולכן מומלץ להוסיף תאריך לשם הקובץ.
שימו לב
קרסור שמריץ פקודת תחזוקה על כל בסיס נתונים הוא דרך נוחה לתזמן גיבויים בזמן שאין עומס על השרת, ולשמור את התוכנית לשימוש חוזר.

פרקי ההרצאה: cursor - חלק 2

  1. 00:00

    קרסור לגיבוי כל בסיס נתונים

  2. 00:58

    שליפת שמות בסיסי הנתונים מ-sysdatabases

  3. 01:37

    בחירת בסיסי נתונים לגיבוי לדוגמה

  4. 02:13

    הגדרת משתנים לשם הבסיס ולנתיב

  5. 02:49

    הגדרת הקרסור על רשימת הבסיסים

  6. 03:29

    פתיחת הקרסור ושליפת שורות

  7. 04:06

    נתיב הגיבוי ופקודת BACKUP DATABASE

  8. 05:01

    סגירת הקרסור ושחרור המשאבים

תמלול ההרצאה: cursor - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «cursor - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:19

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

  2. 00:38

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

  3. 00:58

    איך אנחנו עושים זאת? קודם כל אני צריך לזהות מהם בסיסי הנתונים שקיימים. את זה אנחנו יכולים לגשת לטבלת מערכת name from master.sysdata.bases סיס דאטאבייסס זוהי טבלה שנותנת לנו בעצם את כל בסיסי הנתונים שמותקנים לנו כרגע בתוך המערכת.

  4. 01:22

    אני אריץ את זה F5 ונפתח כאן את ההודעה, אנחנו נראה את כל הבסיסי נתונים שרצים. יש לנו את ה-System Databases כמו המאסטר, 10DB מודל וה-LSDB, אותם אנחנו לא רוצים לגבות. בואו נבחר לעצמנו כאן שני דאטאבייסים על מנת לא להכביד על התוכנית.

  5. 01:42

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

  6. 02:08

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

  7. 02:30

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

  8. 02:42

    כבר קר גם כאן, כבר ניתן לזה 50. הגדרנו את המשתנה "עזר" לרוץ עליהם בלולאה של הקרסור, כרגע בואו נייצר את הקרסור עצמו. הדבר שלו: declare db-cursors ניתן לו אובייקט ניסוי cursor, 4. למה הוא ה-select?

  9. 02:58

    ה-select הוא אותו סלקט שראינו אותו מקודם. Select name הוא master.db.sysdatabases אנחנו רוצים להגדיר. בואו לא נרוץ על כולם. ב-ware name נבחר רק שני דאטאבייסים על מנת שהתוכנית תרוץ לנו בזמן סביר.

  10. 03:17

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

  11. 03:29

    קדימה, לפתוח את הקרסור ולהתחיל לרוץ עליו. בואו נוריד קצת קצת ונתקדם. Open Cursor. DB Cursor. Fetch Next.

  12. 03:40

    From DB Cursors. Into. למי אנחנו שופכים את הנתון הזה? אנחנו שופכים את זה ל Strudel Name, למשתמש המחזיק לנו row by row את שם הדאטה בסן הנוכחי, שם הדאטה בסן המיועד לגיבוי, לדקה.

  13. 03:55

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

  14. 04:30

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

  15. 04:59

    fetch next from dbcursor into name וזהו ובא לציון גואל, אנחנו יכולים לסיים עם הלולאה הווייל שלנו יסתיים כאן ואנחנו יכולים כרגע רק לשחרר את הזיכרון שלנו קלוז דיבי קרסור ודיאלוקייט של דיבי קרסור לשחרר משאבים נדרשים של התוכנית שלנו של הקרסורים ואנחנו כרגע ערוכים ומוכנים להריץ את השאילתא את התוכנית כפי

  16. 05:32

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: cursor - חלק 1

ההרצאה הבאה: מבוא לטרנזקציה - transaction

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI