גיבוי עם שם קובץ דינאמי לקובית SSAS – ביצוע דורות של גיבויים

By | 3 בדצמבר 2013

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

לאחרונה נדרשתי לבצע גיבוי של מספר דורות לבסיס נתונים של SSAS 2012.

הפתרון שמצאתי לסוגיה זו הוא הוספה של תאריך הגיבוי לשם קובץ הגיבוי. עליה וקוץ בה, כיצד מוסיפים את תאריך הגיבוי לשם קובץ הגיבוי? או במילים אחרות, כיצד יוצרים פקודת XMLA דינאמית ? לא מצאתי פתרון ל- XMLA דינאמי אך מצאתי מעקף לבעיה באמצעות מספר שלבים פשוטים ושימוש ב- T-SQL לסיוע.

ראשית יש ליצור Linked Server  בין SQL Server  לבין Analysis Server.

יש להקפיד על האפשרות הבאה מסומנת:

SSAS_Linked_Server

עתה נתחכם מעט, במקום XMLA דינאמי, נבנה משפט SQL דינאמי אשר יריץ על השרת המרוחק, SSAS, פקודה באמצעות ה- Linked server שיצרנו.

Declare @XMLA nvarchar(1000),
@DateSerial nvarchar(35);– הגדרת תאריך עד רמת יום. אם יהיו שני גיבויים באותו יום, יישמר הגיבוי האחרון מאותו היום
Set @DateSerial = Convert(nvarchar, getdate(), 112) ; — YYYYMMDD– Create the XMLA string
Set @XMLA = N'<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object>
<DatabaseID>BI_Cube</DatabaseID>
</Object>
<File>D:\Backup\AnalysisServices\bi_cubes\BI_Cube_' + @DateSerial + '.abf</File>
<AllowOverwrite>true</AllowOverwrite>
</Backup>';– Execute the string across the linked server (SSAS)
Exec (@XMLA) At AS_Necto;  — AS_Necto is the name of the SSAS linked server

החלקים המודגשים בצהוב הינם חלקים אותם עליכם לשנות על מנת להתאים את הקוד לשרת שלכם:

  1. BI_Cube – שם בסיס הנתונים אותו תרצו לגבות.
  2. D:\Backup\AnalysisServices\bi_cubes\BI_Cube – הנתיב ושם הרובץ של קובץ הגיבוי. לאחר שם קובץ הגיבוי, יחובר התאריך הנוכחי בפורמט YYYYMMDD.
  3. <AllowOverwrite>true</AllowOverwrite> – קובע שאם באותו יום יורץ הסקריפט פעמיים, הגיבוי יעלה על הגיבוי הקודם מאותו יום ויישמר הגיבוי האחרון מאותו יום. לחילופין אפשר לקבוע שהתוספת לשם הקובץ לא תספתפק בתאריך ברמת יום אלא תוסיף גם את השעה ואז אפשר יהיה לשמור מספר גיבויים מאותו יום.
  4. AS_Necto – שם ה- Linked Server של SSAS על גבי SQL Server.

למעשה מה שמבוצע כאן הוא ניצול של האפשרות של Exec להריץ סקריפט כלשהו על שרת מרוחק ולא רק על השרת בו הוא רץ. בדרך כלל משתמשים ב- EXEC כדי להריץ פקודת SQL אך אפשר להשתמש בו גם לצורך הרצת פקודת XMLA על שרת SSAS.

Share

כתיבת תגובה

האימייל לא יוצג באתר.