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

6 sql explorer - powershell dba

on

  • 978 views

 

Statistics

Views

Total Views
978
Views on SlideShare
807
Embed Views
171

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 171

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

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    6   sql explorer - powershell dba 6 sql explorer - powershell dba Presentation Transcript

    • ‫‪ Powershell‬להמונים‬ ‫אביעד דרעי | ‪ | DBA‬רפאל‬
    • ‫קצת על רפאל...‬ ‫•‬ ‫קצת עליי...‬ ‫•‬ ‫איך הכל התחיל?‬ ‫•‬ ‫איפה הבעייה?‬ ‫•‬ ‫• הדרישות עבור הפתרון‬ ‫מה זה בעצם ‪?Powershell‬‬ ‫•‬ ‫מה מאפשר ה-‪?Powershell‬‬ ‫•‬‫השילוב של ‪SSIS+Powershell‬‬ ‫•‬ ‫סיכום + שאלות‬ ‫•‬
    • ‫קצת על רפאל...‬ ‫• מפתחת, מייצרת ומספקת מגוון מערכות‬ ‫לחימה מתקדמות אשר תורמות למערכת‬ ‫הביטחון יכולות:‬ ‫– בים‬ ‫– באוויר‬ ‫– ביבשה‬‫• רווחים בשנת 0102 – למעלה מ 8.1 מיליארד ₪‬ ‫• למעלה מ-0005 עובדים‬
    • ‫קצת עליי...‬‫• בוגר החוג למערכות מידע באוניברסיטת חיפה‬ ‫• ‪ DBA‬תשתיתי כ-5.4 שנים:‬ ‫– 2‪MS SQL 2000-2008R‬‬ ‫– ‪Oracle 9i-11g‬‬ ‫– 01 ‪SQL Anywhere‬‬ ‫– ‪Sybase‬‬
    • ‫באחריותי...‬‫תחזוקה שוטפת של למעלה מ-001 שרתים במערכות מרכזיות.‬ ‫•‬ ‫פיתוח, הדרכה והטמעה של מגוון שירותים וכלים:‬ ‫•‬ ‫– ‪Reporting Services‬‬ ‫– ‪Integration Services‬‬ ‫– ‪Spatial‬‬ ‫– ‪PowerShell‬‬ ‫– ‪ Mirroring, Replication‬ועוד...‬ ‫שיפור ביצועים וכיוונון שאילתות‬ ‫•‬ ‫ייעוץ וליווי פרוייקטים ברפא"ל‬ ‫•‬ ‫אבטחת מידע בבסיסי נתונים‬ ‫•‬
    • ‫איך הכל התחיל?‬
    • ‫• מספר מצומם של שרתים, על כל שרת מספר קבצי‬‫‪ batch‬וסקריפטים עבור גיבויים, תחזוקה והגדרות‬ ‫שונות של בסיסי הנתונים.‬ ‫• בכל סקריפט קיימות הגדרות של שרת‬ ‫הדואר,השו"ב ושרת התזמון המרכזי ממנו רצים‬ ‫הסקריפטים.‬
    • ‫אז איפה הבעיה?‬
    • ‫• מספר השרתים הולך ועולה משבוע לשבוע‬ ‫• כשמקימים שרת חדש, מעתיקים אליו את הסקריפטים‬ ‫ומשנים את משתני הסביבה השונים‬ ‫• נוצר מצב של קושי בתחזוקת הסקריפטים:‬ ‫– כל שינוי הכי קטן דורש מעבר על מאות סקריפטים‬ ‫– מסקריפט אחד ראשי נוצרו עשרות עותקים וקשה לעקוב‬ ‫אחריהם‬‫• חוסר תאימות של הסקריפטים השונים ומספרם ההולך‬ ‫וגדל גורם לכך שזמן יקר הולך לאיבוד‬
    • ‫אז מה הפתרון?‬
    • ‫• צריך למצוא פתרון אחר לתחזוקה השוטפת שיענה‬ ‫על הדרישות הבאות:‬ ‫– יהיה עותק אחד ויחיד שירוץ ממקום מרכזי‬ ‫– במידת האפשר יאחד את כל הסקריפטים‬ ‫– יאפשר הוספת שרתים חדשים/גריעת שרתים ישנים‬ ‫באופן דינאמי וקל‬
    • ‫– ידרוש מינימום תחזוקה ויאפשר אותה בקלות‬‫– יאפשר גיבויי מקומי של בסיסי הנתונים על השרתים‬ ‫– ירכז את הלוגים השונים למקום מרכזי‬ ‫– במידת האפשר יהיה חינמי ולא תלוי במוצר מדף‬
    • ?POWERSHELL ‫אז מה זה בעצם‬
    • ‫• כלי שורת פקודה של מיקרוסופט, המרחיב את שורת‬ ‫הפקודה הסטנדרטית (‪ )cmd‬ומעניק לו יכולות תכנות‬ ‫נרחבות יותר‬‫• משולב כחלק אינטגרלי בקו המוצרים האחרון כגון: ‪SQL‬‬‫8002 ‪2008, Exchange 2007, Win 7, Win Server‬‬ ‫ועוד‬ ‫• אידאלי לאוטומציה של תהליכים שונים לניהול ותחזוקת‬ ‫שרתים ותחנות עבודה‬
    • ps1 :‫• סיומת קבצי הסקריפט‬‫ שבנויים בצורת‬cmdlets (command-lets)‫• מורכב לרוב מ‬ :‫ למשל‬verb-noun–Get-help–Write-host–Get-content–Copy-item -‫– על כל פקודה ניתן לקבל עזרה ופירוט ע"י שימוש ב‬Get-help cmd-lets -detailed
    • ?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} }
    • ‫עבודה אל מול שרתים ותחנות עבודה מרוחקות‬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}
    • ‫הרחבה ע"י מחלקות ואובייקטים שונים למשל‬ .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")
    • 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
    • ‫קישורים מעניינים‬• 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/
    • ‫דוגמאות בסיסיות‬
    • ‫אז מה עושים עם ה-‪ POWERSHELL‬הזה?‬
    • ‫• מבצע גיבויים‬‫• מבצע בדיקת חיות ותקינות בסיסית של בסיסי הנתונים‬ ‫בשרת כל 5 דקות‬ ‫• מוריד ומעלה ‪ services‬בשרתים‬ ‫• מריץ ‪SSIS‬‬‫• במקרה של כשל, מכין דוח ‪ html‬ושולח אותו למפעילים‬
    • ‫• פעם ביום עובר על כל בסיסי הנתונים בשרת ומשנה את‬ ‫ההגדרות שלהם כך שיתאימו לתקנים ולשיטת העבודה‬ ‫ברפאל‬ ‫• פעם בשבוע ביצוע רה-ארגון לבסיסי הנתונים כולל ארגון‬‫ובנייה מחדש של האינדקסים, כיווץ בסיסי הנתונים, עדכון‬ ‫סטטיסטיקות, מחיקת היסטוריות ועוד‬
    • ‫• שליחת מיילים במקרה של כשל, כולל צירוף קובץ הלוג של‬ ‫הפעולה שנכשלה‬ ‫• מחיקת קבצים ישנים לפי גיל‬ ‫• ביצוע פעולות מותאמות על שרתים ובסיסי נתונים‬ ‫מיוחדים/רגישים‬‫• שליחת ‪ Traps‬למערכת השו"ב המרכזית ולמערכת התזמון‬ ‫המרכזית‬
    • ‫המימוש אצלנו‬
    • ‫‪SQL Server Integration Services -SSIS‬‬‫• מבוססים על טכולוגית ה-‪ .Net‬ומחליפים את ה-‬ ‫‪ DTS‬החל מגרסת 5002 ‪SQL‬‬‫• משמשים למעבר נתונים בין פלטפורומות שונות‬ ‫תוך הפעלת לוגיקות שונות על הנתונים במהלך‬ ‫המעבר‬‫• משמשים גם לביצוע פעולות תחזוקה שונות כמו‬ ‫גיבויים, רה-ארגון של אינדקסים וכו.‬
    • ‫גיבוי באמצעות ‪ ssis‬ו-‪powershell‬‬‫• לצורך הפתרון בניתי ‪ SSIS‬חדש מסוג ‪SQLDBMaint‬‬
    • ‫• כל פרמטר שניתן היה – הומר לפרמטר שמתקבל באופן‬ ‫דינאמי משורת הפקודה. למשל: מיקום הגיבויים,סוג‬ ‫הגיבויים, זמן שמירת הגיבויים ועוד‬
    • ‫מבנה הקבצים והתיקיות‬‫• תיקייה מרכזית על השרת הראשי, בה יושב סקריפט‬ ‫ה-‪ Powershell‬הבודד‬ ‫• לכל שרת מנוהל יש תת תיקיה ובתוכה קבצים עם‬ ‫הגדרות עבור השרת ותיקיית ‪ log‬עבור הלוגים‬
    • ‫איך עובד התהליך?‬‫• מערכת התזמון המרכזית מפעילה קובץ ‪ batch‬בשעה‬ ‫מסויימת. בדוגמא הזו נציג גיבוי לוג‬
    • ?‫מה בעצם קורה‬‫ שנראה‬dmp_log.bat ‫• הקובץ שמורץ למעשה הוא הקובץ‬ :‫כך‬• call %~dp0db_env.bat• sqlps "&%ScriptDir%maintian.ps1 Backup %ServerName% %LogDir% log %logBackupDir% 3"
    • 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
    • ‫עיבוד המשתנים‬
    • ‫העברת המשתנים לפונקצייה המתאימה‬
    • ‫בניית שורת הפקודה‬ ‫ עם‬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
    • ‫ניטור הפעולה‬
    • ‫דוגמאות נוספות‬
    • ‫אז מה בעצם הרווחתי?‬ ‫איחוד של מספר קבצי תחזוקת מערכת לקובץ‬ ‫•‬ ‫אחד גנרי‬ ‫ריכוז כל ההרצות למקום מרכזי אחד‬ ‫•‬ ‫ריכוז כל הלוגים למקום מרכזי אחד‬ ‫•‬ ‫שמירה על אחידות של בסיסי הנתונים‬ ‫•‬‫תחזוקה קלה, פשוטה ומהירה שחוסכת עשרות‬ ‫•‬ ‫שעות עבודה‬
    • ‫זמן לעשות חיים :)‬
    • ‫‪ PS‬מאפשר יכולות חדשות לניהול תחנות עבודה ושרתים‬ ‫•‬‫‪ PS‬מעניק גמישות רחבה יותר (לעומת ‪)...VBS/Batchs‬‬ ‫•‬ ‫‪ PS‬קל לשימוש‬ ‫•‬ ‫הטמעה מהירה וקלה‬ ‫•‬ ‫שימוש ב-‪ PS‬חוסך זמן יקר (תחזוקה, עדכונים...)‬ ‫•‬