• Save
6   sql explorer - powershell dba
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,043
On Slideshare
872
From Embeds
171
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 171

http://www.sqlserver.co.il 171

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ‫‪ Powershell‬להמונים‬ ‫אביעד דרעי | ‪ | DBA‬רפאל‬
  • 2. ‫קצת על רפאל...‬ ‫•‬ ‫קצת עליי...‬ ‫•‬ ‫איך הכל התחיל?‬ ‫•‬ ‫איפה הבעייה?‬ ‫•‬ ‫• הדרישות עבור הפתרון‬ ‫מה זה בעצם ‪?Powershell‬‬ ‫•‬ ‫מה מאפשר ה-‪?Powershell‬‬ ‫•‬‫השילוב של ‪SSIS+Powershell‬‬ ‫•‬ ‫סיכום + שאלות‬ ‫•‬
  • 3. ‫קצת על רפאל...‬ ‫• מפתחת, מייצרת ומספקת מגוון מערכות‬ ‫לחימה מתקדמות אשר תורמות למערכת‬ ‫הביטחון יכולות:‬ ‫– בים‬ ‫– באוויר‬ ‫– ביבשה‬‫• רווחים בשנת 0102 – למעלה מ 8.1 מיליארד ₪‬ ‫• למעלה מ-0005 עובדים‬
  • 4. ‫קצת עליי...‬‫• בוגר החוג למערכות מידע באוניברסיטת חיפה‬ ‫• ‪ DBA‬תשתיתי כ-5.4 שנים:‬ ‫– 2‪MS SQL 2000-2008R‬‬ ‫– ‪Oracle 9i-11g‬‬ ‫– 01 ‪SQL Anywhere‬‬ ‫– ‪Sybase‬‬
  • 5. ‫באחריותי...‬‫תחזוקה שוטפת של למעלה מ-001 שרתים במערכות מרכזיות.‬ ‫•‬ ‫פיתוח, הדרכה והטמעה של מגוון שירותים וכלים:‬ ‫•‬ ‫– ‪Reporting Services‬‬ ‫– ‪Integration Services‬‬ ‫– ‪Spatial‬‬ ‫– ‪PowerShell‬‬ ‫– ‪ Mirroring, Replication‬ועוד...‬ ‫שיפור ביצועים וכיוונון שאילתות‬ ‫•‬ ‫ייעוץ וליווי פרוייקטים ברפא"ל‬ ‫•‬ ‫אבטחת מידע בבסיסי נתונים‬ ‫•‬
  • 6. ‫איך הכל התחיל?‬
  • 7. ‫• מספר מצומם של שרתים, על כל שרת מספר קבצי‬‫‪ batch‬וסקריפטים עבור גיבויים, תחזוקה והגדרות‬ ‫שונות של בסיסי הנתונים.‬ ‫• בכל סקריפט קיימות הגדרות של שרת‬ ‫הדואר,השו"ב ושרת התזמון המרכזי ממנו רצים‬ ‫הסקריפטים.‬
  • 8. ‫אז איפה הבעיה?‬
  • 9. ‫• מספר השרתים הולך ועולה משבוע לשבוע‬ ‫• כשמקימים שרת חדש, מעתיקים אליו את הסקריפטים‬ ‫ומשנים את משתני הסביבה השונים‬ ‫• נוצר מצב של קושי בתחזוקת הסקריפטים:‬ ‫– כל שינוי הכי קטן דורש מעבר על מאות סקריפטים‬ ‫– מסקריפט אחד ראשי נוצרו עשרות עותקים וקשה לעקוב‬ ‫אחריהם‬‫• חוסר תאימות של הסקריפטים השונים ומספרם ההולך‬ ‫וגדל גורם לכך שזמן יקר הולך לאיבוד‬
  • 10. ‫אז מה הפתרון?‬
  • 11. ‫• צריך למצוא פתרון אחר לתחזוקה השוטפת שיענה‬ ‫על הדרישות הבאות:‬ ‫– יהיה עותק אחד ויחיד שירוץ ממקום מרכזי‬ ‫– במידת האפשר יאחד את כל הסקריפטים‬ ‫– יאפשר הוספת שרתים חדשים/גריעת שרתים ישנים‬ ‫באופן דינאמי וקל‬
  • 12. ‫– ידרוש מינימום תחזוקה ויאפשר אותה בקלות‬‫– יאפשר גיבויי מקומי של בסיסי הנתונים על השרתים‬ ‫– ירכז את הלוגים השונים למקום מרכזי‬ ‫– במידת האפשר יהיה חינמי ולא תלוי במוצר מדף‬
  • 13. ?POWERSHELL ‫אז מה זה בעצם‬
  • 14. ‫• כלי שורת פקודה של מיקרוסופט, המרחיב את שורת‬ ‫הפקודה הסטנדרטית (‪ )cmd‬ומעניק לו יכולות תכנות‬ ‫נרחבות יותר‬‫• משולב כחלק אינטגרלי בקו המוצרים האחרון כגון: ‪SQL‬‬‫8002 ‪2008, Exchange 2007, Win 7, Win Server‬‬ ‫ועוד‬ ‫• אידאלי לאוטומציה של תהליכים שונים לניהול ותחזוקת‬ ‫שרתים ותחנות עבודה‬
  • 15. ps1 :‫• סיומת קבצי הסקריפט‬‫ שבנויים בצורת‬cmdlets (command-lets)‫• מורכב לרוב מ‬ :‫ למשל‬verb-noun–Get-help–Write-host–Get-content–Copy-item -‫– על כל פקודה ניתן לקבל עזרה ופירוט ע"י שימוש ב‬Get-help cmd-lets -detailed
  • 16. ?Powershell-‫מה מאפשר ה‬ ‫• יכולות תכנות נרחבות כמו שימוש בפונקציות, לולאות, תנאים וכו‬foreach ($db in $Srv.Databases) { $msg = $db.Name | Out-File $LogFile -Append $msg = " Status is: "+ $db.Status.ToString() | Out-File $LogFile -Append $msg = " Mirorring Status is: "+ $db.MirroringStatus.ToString()| Out-File $LogFile -Append if ((-not $db.Status.ToString().Equals("Normal")) -and ($db.IsMirroringEnabled) -and ( $db.MirroringStatus -ne 5)) {$DBStatus=1} }
  • 17. ‫עבודה אל מול שרתים ותחנות עבודה מרוחקות‬begin{ $BckDir = $BckDir.Substring(0,$BckDir.Length -1 ) –replace (":","$") if (Test-Path "$ServerName$BckDirfull_backup") {Get-ChildItem -Path "$ServerName$BckDirfull_backup" | Remove-Item -Recurse} return 0}
  • 18. ‫הרחבה ע"י מחלקות ואובייקטים שונים למשל‬ .Net/Com/WMI$Srv=New-Object "Microsoft.SqlServer.Management.Smo.Serv er" "$ServerName“$SmtpClient = new-object system.net.mail.smtpClient$MailMessage = New-Object system.net.mail.mailmessage[System.Reflection.Assembly]::LoadWithPartial Name ("Microsoft.SharePoint")
  • 19. Powershell-‫הקריאה ל‬ ‫ במידה ורוצים להפעיל‬powershell.exe ‫• הפעלת סקריפט מתבצעת ע"י‬ ‫ במידה‬sqlps.exe ‫, או ע"י‬PS ‫ולהשתמש באובייקטים סנדרטיים של‬ .SQL Server ‫ורוצים להשתמש בהרחבות עבור‬ .‫• ניתן להרחיב את השפה ע"י קריאה לקובצי קונפיגורציה חיצוניים‬ :NetApp Snap Manager for SQL Server ‫למשל עבור‬• powershell -PSConsoleFile "D:Program FilesNetAppSnapManager for SQL ServerSmsqlShell.psc1" "&%ScriptDir%maintian.ps1 Backup %ServerName% %LogDir% full %FullBackupDir% 1“ ‫ ע"י‬SnapManager ‫• לאחר הקריאה להרחבה ניתן להפעיל פקודות של‬ :PS• New-Backup -LogBkup -bkupsif -verify -truncatelogs - GenericNaming -retainbackups 7 -retainsnapofsnapinfo 7 | Out-File $log
  • 20. ‫קישורים מעניינים‬• PowerShell wiki: http://en.wikipedia.org/wiki/Windows_PowerShell• Why This SQL Server DBA is Learning Powershell by Ron Dameron http://www.simple-talk.com/sql/database- administration/why-this-sql-server-dba-is- learning-powershell/• SQLPSX Project on Codeplex http://sqlpsx.codeplex.com/
  • 21. ‫דוגמאות בסיסיות‬
  • 22. ‫אז מה עושים עם ה-‪ POWERSHELL‬הזה?‬
  • 23. ‫• מבצע גיבויים‬‫• מבצע בדיקת חיות ותקינות בסיסית של בסיסי הנתונים‬ ‫בשרת כל 5 דקות‬ ‫• מוריד ומעלה ‪ services‬בשרתים‬ ‫• מריץ ‪SSIS‬‬‫• במקרה של כשל, מכין דוח ‪ html‬ושולח אותו למפעילים‬
  • 24. ‫• פעם ביום עובר על כל בסיסי הנתונים בשרת ומשנה את‬ ‫ההגדרות שלהם כך שיתאימו לתקנים ולשיטת העבודה‬ ‫ברפאל‬ ‫• פעם בשבוע ביצוע רה-ארגון לבסיסי הנתונים כולל ארגון‬‫ובנייה מחדש של האינדקסים, כיווץ בסיסי הנתונים, עדכון‬ ‫סטטיסטיקות, מחיקת היסטוריות ועוד‬
  • 25. ‫• שליחת מיילים במקרה של כשל, כולל צירוף קובץ הלוג של‬ ‫הפעולה שנכשלה‬ ‫• מחיקת קבצים ישנים לפי גיל‬ ‫• ביצוע פעולות מותאמות על שרתים ובסיסי נתונים‬ ‫מיוחדים/רגישים‬‫• שליחת ‪ Traps‬למערכת השו"ב המרכזית ולמערכת התזמון‬ ‫המרכזית‬
  • 26. ‫המימוש אצלנו‬
  • 27. ‫‪SQL Server Integration Services -SSIS‬‬‫• מבוססים על טכולוגית ה-‪ .Net‬ומחליפים את ה-‬ ‫‪ DTS‬החל מגרסת 5002 ‪SQL‬‬‫• משמשים למעבר נתונים בין פלטפורומות שונות‬ ‫תוך הפעלת לוגיקות שונות על הנתונים במהלך‬ ‫המעבר‬‫• משמשים גם לביצוע פעולות תחזוקה שונות כמו‬ ‫גיבויים, רה-ארגון של אינדקסים וכו.‬
  • 28. ‫גיבוי באמצעות ‪ ssis‬ו-‪powershell‬‬‫• לצורך הפתרון בניתי ‪ SSIS‬חדש מסוג ‪SQLDBMaint‬‬
  • 29. ‫• כל פרמטר שניתן היה – הומר לפרמטר שמתקבל באופן‬ ‫דינאמי משורת הפקודה. למשל: מיקום הגיבויים,סוג‬ ‫הגיבויים, זמן שמירת הגיבויים ועוד‬
  • 30. ‫מבנה הקבצים והתיקיות‬‫• תיקייה מרכזית על השרת הראשי, בה יושב סקריפט‬ ‫ה-‪ Powershell‬הבודד‬ ‫• לכל שרת מנוהל יש תת תיקיה ובתוכה קבצים עם‬ ‫הגדרות עבור השרת ותיקיית ‪ log‬עבור הלוגים‬
  • 31. ‫איך עובד התהליך?‬‫• מערכת התזמון המרכזית מפעילה קובץ ‪ batch‬בשעה‬ ‫מסויימת. בדוגמא הזו נציג גיבוי לוג‬
  • 32. ?‫מה בעצם קורה‬‫ שנראה‬dmp_log.bat ‫• הקובץ שמורץ למעשה הוא הקובץ‬ :‫כך‬• call %~dp0db_env.bat• sqlps "&%ScriptDir%maintian.ps1 Backup %ServerName% %LogDir% log %logBackupDir% 3"
  • 33. Db_env.bat‫ מכיל פרמטרים שמשתנים משרת לשרת‬db_env-‫• קובץ ה‬ Powershell-‫ונקראים לפני הרצת ה‬set ServerName=SERVERNAMEset FullBackupDir=E:mssql_dumpset LogBackupDir=F:mssql_dumpset DiffBackupDir=G:mssql_dumpset LogDir=D:jobsmssql%ServerName%logset ScriptDir=D:jobsmssql
  • 34. ‫עיבוד המשתנים‬
  • 35. ‫העברת המשתנים לפונקצייה המתאימה‬
  • 36. ‫בניית שורת הפקודה‬ ‫ עם‬PS‫) נבנתה בתוך קובץ ה‬dtexec( ‫• שורת הפקודה‬ ‫הפרמטרים שנשלחו בהתאם לשרתים השונים‬$strSsis = dtexec /DTS "MSDBMaintenance PlansBackup" $strSsis +=/SET "package.Variables[User::BackupPath].Value;$BckPath" $strSsis +=/SET "package.Variables[User::BackupType].Value;$BckType" $strSsis +=/SET "package.Variables[User::BackupTypeID].Value;$BckTypeID" $strSsis +=/SET "package.Variables[User::Extension].Value;$Ext" $strSsis +=/SET "package.Variables[User::IsDifferntial].Value;$IsDif" $strSsis +=/SET "package.Variables[User::ServerName].Value;$Server" # Execute the sring and save the log to fileInvoke-Expression $strSsis | Out-File $LogFile
  • 37. ‫ניטור הפעולה‬
  • 38. ‫דוגמאות נוספות‬
  • 39. ‫אז מה בעצם הרווחתי?‬ ‫איחוד של מספר קבצי תחזוקת מערכת לקובץ‬ ‫•‬ ‫אחד גנרי‬ ‫ריכוז כל ההרצות למקום מרכזי אחד‬ ‫•‬ ‫ריכוז כל הלוגים למקום מרכזי אחד‬ ‫•‬ ‫שמירה על אחידות של בסיסי הנתונים‬ ‫•‬‫תחזוקה קלה, פשוטה ומהירה שחוסכת עשרות‬ ‫•‬ ‫שעות עבודה‬
  • 40. ‫זמן לעשות חיים :)‬
  • 41. ‫‪ PS‬מאפשר יכולות חדשות לניהול תחנות עבודה ושרתים‬ ‫•‬‫‪ PS‬מעניק גמישות רחבה יותר (לעומת ‪)...VBS/Batchs‬‬ ‫•‬ ‫‪ PS‬קל לשימוש‬ ‫•‬ ‫הטמעה מהירה וקלה‬ ‫•‬ ‫שימוש ב-‪ PS‬חוסך זמן יקר (תחזוקה, עדכונים...)‬ ‫•‬