דברים שונים אשר הינם טריוויאליים לחלוטין כאשר מדובר על בסיס נתונים רגיל, הופכים למורכבים יותר בעולם SSAS.
לאחרונה נדרשתי לבצע גיבוי של מספר דורות לבסיס נתונים של SSAS 2012.
הפתרון שמצאתי לסוגיה זו הוא הוספה של תאריך הגיבוי לשם קובץ הגיבוי. עליה וקוץ בה, כיצד מוסיפים את תאריך הגיבוי לשם קובץ הגיבוי? או במילים אחרות, כיצד יוצרים פקודת XMLA דינאמית ? לא מצאתי פתרון ל- XMLA דינאמי אך מצאתי מעקף לבעיה באמצעות מספר שלבים פשוטים ושימוש ב- T-SQL לסיוע.
ראשית יש ליצור Linked Server בין SQL Server לבין Analysis 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 |
החלקים המודגשים בצהוב הינם חלקים אותם עליכם לשנות על מנת להתאים את הקוד לשרת שלכם:
- BI_Cube – שם בסיס הנתונים אותו תרצו לגבות.
- D:\Backup\AnalysisServices\bi_cubes\BI_Cube – הנתיב ושם הרובץ של קובץ הגיבוי. לאחר שם קובץ הגיבוי, יחובר התאריך הנוכחי בפורמט YYYYMMDD.
- <AllowOverwrite>true</AllowOverwrite> – קובע שאם באותו יום יורץ הסקריפט פעמיים, הגיבוי יעלה על הגיבוי הקודם מאותו יום ויישמר הגיבוי האחרון מאותו יום. לחילופין אפשר לקבוע שהתוספת לשם הקובץ לא תספתפק בתאריך ברמת יום אלא תוסיף גם את השעה ואז אפשר יהיה לשמור מספר גיבויים מאותו יום.
- AS_Necto – שם ה- Linked Server של SSAS על גבי SQL Server.
למעשה מה שמבוצע כאן הוא ניצול של האפשרות של Exec להריץ סקריפט כלשהו על שרת מרוחק ולא רק על השרת בו הוא רץ. בדרך כלל משתמשים ב- EXEC כדי להריץ פקודת SQL אך אפשר להשתמש בו גם לצורך הרצת פקודת XMLA על שרת SSAS.