SlideShare a Scribd company logo
‫‪ 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=SERVERNAME
set FullBackupDir=E:mssql_dump
set LogBackupDir=F:mssql_dump
set DiffBackupDir=G:mssql_dump
set LogDir=D:jobsmssql%ServerName%log
set 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 file
Invoke-Expression $strSsis | Out-File $LogFile
‫ניטור הפעולה‬
‫דוגמאות נוספות‬
‫אז מה בעצם הרווחתי?‬

 ‫איחוד של מספר קבצי תחזוקת מערכת לקובץ‬       ‫•‬
                                 ‫אחד גנרי‬
         ‫ריכוז כל ההרצות למקום מרכזי אחד‬     ‫•‬
           ‫ריכוז כל הלוגים למקום מרכזי אחד‬   ‫•‬
        ‫שמירה על אחידות של בסיסי הנתונים‬     ‫•‬
‫תחזוקה קלה, פשוטה ומהירה שחוסכת עשרות‬        ‫•‬
                              ‫שעות עבודה‬
‫זמן לעשות חיים :)‬
‫‪ PS‬מאפשר יכולות חדשות לניהול תחנות עבודה ושרתים‬      ‫•‬
‫‪ PS‬מעניק גמישות רחבה יותר (לעומת ‪)...VBS/Batchs‬‬      ‫•‬
                                      ‫‪ PS‬קל לשימוש‬   ‫•‬
                                 ‫הטמעה מהירה וקלה‬    ‫•‬
      ‫שימוש ב-‪ PS‬חוסך זמן יקר (תחזוקה, עדכונים...)‬   ‫•‬
6   sql explorer - powershell dba

More Related Content

PPTX
Eu quero ser santo
PDF
Avoidance of stochastic RNA interactions can be harnessed to control protein ...
PDF
Daniel UCT Technical Report
PPTX
Bruno See - Eu me rendo
PPTX
Field Activity Planner SaaS SW Overview for the Digital Oilfield
PPTX
PPTX
Clase 10 danitza abregú calderón
DOCX
Resume
Eu quero ser santo
Avoidance of stochastic RNA interactions can be harnessed to control protein ...
Daniel UCT Technical Report
Bruno See - Eu me rendo
Field Activity Planner SaaS SW Overview for the Digital Oilfield
Clase 10 danitza abregú calderón
Resume

Viewers also liked (9)

PPTX
myVR presentation at HXGN Live 2013
PPTX
Vou deixar na cruz - kleber lucas
PPTX
Te louvarei - Toque no altar
PDF
Xvision Field Activity Planner in Maritimt Magasin no 9
PPTX
A vida segundo o Espírito - Lição 07 - 2º Trimestre de 2016
PPTX
7 habbits
PDF
ME RENDO A TI
PPT
MAIS UM DIA - LIVRES PARA ADORAR
PPTX
Palavras ao vento
myVR presentation at HXGN Live 2013
Vou deixar na cruz - kleber lucas
Te louvarei - Toque no altar
Xvision Field Activity Planner in Maritimt Magasin no 9
A vida segundo o Espírito - Lição 07 - 2º Trimestre de 2016
7 habbits
ME RENDO A TI
MAIS UM DIA - LIVRES PARA ADORAR
Palavras ao vento
Ad

Similar to 6 sql explorer - powershell dba (20)

PDF
Powershell - ISUG 99 (Aviad Deri)
PPTX
Managing oracle Database Instance
DOC
Check Point Command
DOC
Expand Cli Command
PDF
מדריך להתקנת Joomla 2.5
PPTX
מערכות ניטור ובקרה למערכות It
PDF
Active active sql 2008 r2 cluster - Aviad Deri
PDF
Exploring Oracle Database Architecture (Hebrew)
PDF
316756893 desktops-2016
PPT
OpenVMS Security
PDF
217188243 rt-infa-general-2008
DOCX
Daniel Shtern CV
PPT
אבטחת מערכות על Novell
PDF
217185145 dba-rt-2011
PDF
Data Analyst&Scientist course
PDF
PHP ואבטחה - חלק ראשון
PDF
10 istm bi and dw-amn
PDF
217188253 vdi-case-final-2010
PDF
Libi
PDF
Libi
Powershell - ISUG 99 (Aviad Deri)
Managing oracle Database Instance
Check Point Command
Expand Cli Command
מדריך להתקנת Joomla 2.5
מערכות ניטור ובקרה למערכות It
Active active sql 2008 r2 cluster - Aviad Deri
Exploring Oracle Database Architecture (Hebrew)
316756893 desktops-2016
OpenVMS Security
217188243 rt-infa-general-2008
Daniel Shtern CV
אבטחת מערכות על Novell
217185145 dba-rt-2011
Data Analyst&Scientist course
PHP ואבטחה - חלק ראשון
10 istm bi and dw-amn
217188253 vdi-case-final-2010
Libi
Libi
Ad

More from sqlserver.co.il (20)

PDF
Windows azure sql_database_security_isug012013
PPTX
Things you can find in the plan cache
PPTX
Sql server user group news january 2013
PPTX
DAC 2012
PPTX
Query handlingbytheserver
PPTX
Adi Sapir ISUG 123 11/10/2012
PPTX
Products.intro.forum version
PPTX
SQL Explore 2012: P&T Part 3
PPTX
SQL Explore 2012: P&T Part 2
PPTX
SQL Explore 2012: P&T Part 1
PPTX
SQL Explore 2012 - Tzahi Hakikat and Keren Bartal: Extended Events
PPTX
SQL Explore 2012 - Michael Zilberstein: ColumnStore
PPTX
SQL Explore 2012 - Meir Dudai: DAC
PPTX
SQL Explore 2012 - Aviad Deri: Spatial
PPTX
מיכאל
PPTX
נועם
PPTX
PPTX
מיכאל
PDF
Bi303 data warehousing with fast track and pdw - Assaf Fraenkel
PPTX
DBCC - Dubi Lebel
Windows azure sql_database_security_isug012013
Things you can find in the plan cache
Sql server user group news january 2013
DAC 2012
Query handlingbytheserver
Adi Sapir ISUG 123 11/10/2012
Products.intro.forum version
SQL Explore 2012: P&T Part 3
SQL Explore 2012: P&T Part 2
SQL Explore 2012: P&T Part 1
SQL Explore 2012 - Tzahi Hakikat and Keren Bartal: Extended Events
SQL Explore 2012 - Michael Zilberstein: ColumnStore
SQL Explore 2012 - Meir Dudai: DAC
SQL Explore 2012 - Aviad Deri: Spatial
מיכאל
נועם
מיכאל
Bi303 data warehousing with fast track and pdw - Assaf Fraenkel
DBCC - Dubi Lebel

6 sql explorer - powershell dba

  • 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‬ועוד...‬ ‫שיפור ביצועים וכיוונון שאילתות‬ ‫•‬ ‫ייעוץ וליווי פרוייקטים ברפא"ל‬ ‫•‬ ‫אבטחת מידע בבסיסי נתונים‬ ‫•‬
  • 7. ‫• מספר מצומם של שרתים, על כל שרת מספר קבצי‬ ‫‪ batch‬וסקריפטים עבור גיבויים, תחזוקה והגדרות‬ ‫שונות של בסיסי הנתונים.‬ ‫• בכל סקריפט קיימות הגדרות של שרת‬ ‫הדואר,השו"ב ושרת התזמון המרכזי ממנו רצים‬ ‫הסקריפטים.‬
  • 9. ‫• מספר השרתים הולך ועולה משבוע לשבוע‬ ‫• כשמקימים שרת חדש, מעתיקים אליו את הסקריפטים‬ ‫ומשנים את משתני הסביבה השונים‬ ‫• נוצר מצב של קושי בתחזוקת הסקריפטים:‬ ‫– כל שינוי הכי קטן דורש מעבר על מאות סקריפטים‬ ‫– מסקריפט אחד ראשי נוצרו עשרות עותקים וקשה לעקוב‬ ‫אחריהם‬ ‫• חוסר תאימות של הסקריפטים השונים ומספרם ההולך‬ ‫וגדל גורם לכך שזמן יקר הולך לאיבוד‬
  • 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/
  • 22. ‫אז מה עושים עם ה-‪ POWERSHELL‬הזה?‬
  • 23. ‫• מבצע גיבויים‬ ‫• מבצע בדיקת חיות ותקינות בסיסית של בסיסי הנתונים‬ ‫בשרת כל 5 דקות‬ ‫• מוריד ומעלה ‪ services‬בשרתים‬ ‫• מריץ ‪SSIS‬‬ ‫• במקרה של כשל, מכין דוח ‪ html‬ושולח אותו למפעילים‬
  • 24. ‫• פעם ביום עובר על כל בסיסי הנתונים בשרת ומשנה את‬ ‫ההגדרות שלהם כך שיתאימו לתקנים ולשיטת העבודה‬ ‫ברפאל‬ ‫• פעם בשבוע ביצוע רה-ארגון לבסיסי הנתונים כולל ארגון‬ ‫ובנייה מחדש של האינדקסים, כיווץ בסיסי הנתונים, עדכון‬ ‫סטטיסטיקות, מחיקת היסטוריות ועוד‬
  • 25. ‫• שליחת מיילים במקרה של כשל, כולל צירוף קובץ הלוג של‬ ‫הפעולה שנכשלה‬ ‫• מחיקת קבצים ישנים לפי גיל‬ ‫• ביצוע פעולות מותאמות על שרתים ובסיסי נתונים‬ ‫מיוחדים/רגישים‬ ‫• שליחת ‪ Traps‬למערכת השו"ב המרכזית ולמערכת התזמון‬ ‫המרכזית‬
  • 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=SERVERNAME set FullBackupDir=E:mssql_dump set LogBackupDir=F:mssql_dump set DiffBackupDir=G:mssql_dump set LogDir=D:jobsmssql%ServerName%log set ScriptDir=D:jobsmssql
  • 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 file Invoke-Expression $strSsis | Out-File $LogFile
  • 39. ‫אז מה בעצם הרווחתי?‬ ‫איחוד של מספר קבצי תחזוקת מערכת לקובץ‬ ‫•‬ ‫אחד גנרי‬ ‫ריכוז כל ההרצות למקום מרכזי אחד‬ ‫•‬ ‫ריכוז כל הלוגים למקום מרכזי אחד‬ ‫•‬ ‫שמירה על אחידות של בסיסי הנתונים‬ ‫•‬ ‫תחזוקה קלה, פשוטה ומהירה שחוסכת עשרות‬ ‫•‬ ‫שעות עבודה‬
  • 41. ‫‪ PS‬מאפשר יכולות חדשות לניהול תחנות עבודה ושרתים‬ ‫•‬ ‫‪ PS‬מעניק גמישות רחבה יותר (לעומת ‪)...VBS/Batchs‬‬ ‫•‬ ‫‪ PS‬קל לשימוש‬ ‫•‬ ‫הטמעה מהירה וקלה‬ ‫•‬ ‫שימוש ב-‪ PS‬חוסך זמן יקר (תחזוקה, עדכונים...)‬ ‫•‬