Powershell - ISUG 99 (Aviad Deri)

Post on 29-Jun-2015

920 views 0 download

Tags:

Transcript of Powershell - ISUG 99 (Aviad Deri)

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל 1סימוכיןתאריך

May the Powershell be with you

אביעד דרעי

מ"מערכות לחימה מתקדמות בע–ל "רפא

aviadd@rafael.co.il5/7/2010

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל 2סימוכין2010, יולי 8

...קצת על רפאל

מייצרת ומספקת מגוון מערכות לחימה , מפתחת•:מתקדמות אשר תורמות למערכת הביטחון יכולות

בים–

באוויר–

ביבשה–

₪מיליארד 1.5למעלה מ –2008רווחים בשנת •

עובדים 5000-למעלה מ•

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

קצת עלי

בוגר החוג למערכות מידע באוניברסיטת חיפה •

•DBA שנים 3.5-תשתיתי כ:

–MS SQL 2000-2008R2

–Oracle 9i-11g

–SQL Anywhere 10

3סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

תחומי אחריות

שרתים במערכות 100-תחזוקה שוטפת של למעלה מ•.מרכזיות ובפרוייקטים שונים

:הדרכה והטמעה של מגוון שירותים וכלים, פיתוח•

–Reporting Services

–Integration Services

–Spatial

–PowerShell

–Mirroring, Replication ועוד...

4סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?מה בתפריט

הצגת הבעייה–? איך הכל התחיל•

הדרישות עבור הפתרון •

:ובהרחבה•

?ואיך הוא עוזר לי PowerShellמה זה –

–SSIS גנרי עם פרמטרים

השילוב של שניהם –

שאלות•

5סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?איך הכל התחיל

על כל שרת מספר קבצי , מספר מצומצם של שרתים•

batch תחזוקה והגדרות , וסקריפטים עבור גיבויים

.שונות של בסיסי הנתונים

exchange-בכל סקריפט קיימות הגדרות של שרת ה•

ב והגדרות שרת התזמון המרכזי ממנו "שרת השו

.רצים הסקריפטים

6סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?אז איפה הבעיה

מספר השרתים הולך ועולה משבוע לשבוע•

מעתיקים אליו את , כשמקימים שרת חדש•הסקריפטים ומשנים את משתני הסביבה השונים

:נוצר מצב של קושי בתחזוקת הסקריפטים•

כל שינוי הכי קטן דורש מעבר על מאות סקריפטים–

מסקריפט אחד ראשי נוצרו עשרות עותקים וקשה לעקוב –אחריהם

חוסר תאימות של הסקריפטים השונים ומספרם •ההולך וגדל גורם לכך שזמן יקר הולך לאיבוד

7סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?אז מה אתה מציע לעשות, טוב

צריך למצוא פתרון אחר לתחזוקה השוטפת שיענה •:על הדרישות הבאות

יהיה עותק אחד ויחיד שירוץ ממקום מרכזי–

במידת האפשר יאחד את כל הסקריפטים–

גריעת שרתים ישנים /יאפשר הוספת שרתים חדשים–

באופן דינאמי וקל

8סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המשך -הדרישות מהפתרון

ידרוש מינימום תחזוקה ויאפשר אותה בקלות–

יאפשר גיבויי מקומי של בסיסי הנתונים על השרתים–

ירכז את הלוגים השונים למקום מרכזי–

במידת האפשר יהיה חינמי ולא תלוי במוצר מדף כזה או –

אחר

9סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?Powershellאז מה זה בעצם

המרחיב את שורת , כלי שורת פקודה של מיקרוסופט•ומעניק לו יכולות תכנות ( cmd)הפקודה הסטנדרטית

נרחבות יותר

משולב כחלק אינטגרלי בקו המוצרים האחרון • SQL 2008, Exchange 2007, Win 7, Win:כגון

Server 2008 ועוד

אידאלי לאוטומציה של תהליכים שונים לניהול •ותחזוקת שרתים ותחנות עבודה

10סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

היכרות בסיסית

ps1: סיומת קבצי הסקריפט•

cmdletsמורכב לרוב מ• (command-lets) שבנויים:למשל verb-nounבצורת

– Get-help

– Write-host

– Get-content

– Copy-item

-י שימוש ב"על כל פקודה ניתן לקבל עזרה ופירוט ע–

Get-help cmd-lets -detailed

11סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?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}

}

12סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המשך -יכולות

עבודה אל מול שרתים ותחנות עבודה מרוחקות•begin

{

$BckDir = $BckDir.Substring(0,$BckDir.Length -1 )

–replace (":","$")

if (Test-Path "\\$ServerName\$BckDir\full_backup\")

{Get-ChildItem

-Path "\\$ServerName\$BckDir\full_backup\"

| Remove-Item -Recurse}

return 0

}13סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המשך -יכולות

י מחלקות ואובייקטים שונים כמו "הרחבה ע•.Net/Com/WMI

$Srv=New-Object

"Microsoft.SqlServer.Management.Smo.Server"

"$ServerName“

$SmtpClient = new-object system.net.mail.smtpClient

$MailMessage = New-Object system.net.mail.mailmessage

[System.Reflection.Assembly]::LoadWithPartialName

("Microsoft.SharePoint")

14סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

-Powershellהקריאה ל

במידה ורוצים להפעיל powershell.exeי "הפעלת סקריפט מתבצעת ע•במידה sqlps.exeי "או ע, PSשל סנדרטייםולהשתמש באובייקטים

.SQL Serverורוצים להשתמש בהרחבות עבור

. י קריאה לקובצי קונפיגורציה חיצוניים"ניתן להרחיב את השפה ע•NetAppלמשל עבור Snap Manager for SQL Server:

• powershell -PSConsoleFile "D:\Program

Files\NetApp\SnapManager for SQL Server\SmsqlShell.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

15סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

היישום שלנו ברפאל

מבצע גיבויים •

מלאים פעם ביום–

לוגים כל שעה–

שעות במהלך יום העבודה 4דיפרנציאליים כל –

מבצע בדיקת חיות ותקינות בסיסית של בסיסי •

דקות 5הנתונים בשרת כל

16סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המשך -היישום

פעם ביום עובר על כל בסיסי הנתונים בשרת ומשנה את •

ההגדרות שלהם כך שיתאימו לתקנים ולשיטת העבודה

ברפאל

ארגון לבסיסי הנתונים כולל ארגון -פעם בשבוע ביצוע רה•

, כיווץ בסיסי הנתונים, ובנייה מחדש של האינדקסים

מחיקת היסטוריות ועוד, עדכון סטטיסטיקות

17סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המשך -היישום

כולל צירוף קובץ הלוג של , שליחת מיילים במקרה של כשל•

הפעולה שנכשלה

מחיקת קבצים ישנים לפי גיל•

ביצוע פעולות מותאמות על שרתים ובסיסי נתונים •

רגישים/מיוחדים

המרכזית ולמערכת התזמון ב"השולמערכת Trapsשליחת •

המרכזית

18סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

עם פרמטרים SSIS-שימוש ב

•SSIS- SQL Server Integration Services

-ומחליפים את ה Net.-מבוססים על טכולוגית ה•DTS החל מגרסתSQL 2005

משמשים למעבר נתונים בין פלטפורומות שונות תוך •הפעלת לוגיקות שונות על הנתונים במהלך המעבר

משמשים גם לביצוע פעולות תחזוקה שונות כמו •.'ארגון של אינדקסים וכו-רה, גיבויים

19סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

Backup.dtsx

SQLDBMaintחדש מסוג SSISלצורך הפתרון בניתי •

משימת ניקוי וכתיבה לקובץ , מכיל משימת גיבוי SSIS-ה•

לוג

20סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

Backup.dtsx

כל . כולו Packageהוגדרו משתנים גלובליים ברמת ה•משתנה מתקבל משורת הפקודה ומשוייך במהלך .הריצה למשתנים הפנימיים של הרכיבים השונים

21סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

מבנה הקבצים והתיקיות

בה יושב סקריפט , תיקייה מרכזית על השרת הראשי•הבודד -Powershellה

לכל שרת מנוהל יש תת תיקיה ובתוכה קבצים עם •עבור הלוגים logהגדרות עבור השרת ותיקיית

22סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?איך עובד התהליך

בשעה batchמערכת התזמון המרכזית מפעילה קובץ •בדוגמא הזו נציג גיבוי לוג. מסויימת

23סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?מה בעצם קורה

dmp_log.batהקובץ שמורץ למעשה הוא הקובץ •

:שנראה כך

• call %~dp0db_env.bat

• sqlps "&'%ScriptDir%maintian.ps1' Backup

%ServerName% %LogDir% log %logBackupDir% 3"

24סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

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:\jobs\mssql\%ServerName%\log

set ScriptDir=D:\jobs\mssql\

25סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

עיבוד המשתנים

26סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

המתאימה לפונקצייההעברת המשתנים

27סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

בניית שורת הפקודה

עם PSנבנתה בתוך קובץ ה( dtexec)שורת הפקודה •הפרמטרים שנשלחו בהתאם לשרתים השונים

28סימוכיןתאריך

$strSsis = 'dtexec /DTS "\MSDB\Maintenance Plans\Backup" '

$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

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

ניטור הפעולה

29סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?מה בעצם נעשה–סיכום

איחוד של מספר קבצי תחזוקת מערכת לקובץ אחד •גנרי

ריכוז כל ההרצות למקום מרכזי אחד•

ריכוז כל הלוגים למקום מרכזי אחד•

שמירה על אחידות של בסיסי הנתונים•

פשוטה ומהירה שחוסכת עשרות שעות , תחזוקה קלה•עבודה

30סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

?לאן מתקדמים מכאן

בין היתר )ייתן כלים חדשים Powershell V2.0-מעבר ל•

ויאפשר לייעל את הסקריפט ואת ( גם כלים גרפיים

(Send-Mailי פקודת "למשל ע)תחזוקתו

תריץ , SSISגנרית שתקבל כקלט שם פונקצייהכתיבת •

פעילות שלו ותוציא את תוצאת ההרצה logתכתוב , אותו

(תזמון מרכזי, ב"שו)למערכים השונים

31סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

!תודה על ההקשבה

?שאלות

32סימוכיןתאריך

ס"בלמללא סיווג עסקי

מ"מערכות לחימה מתקדמות בע -קניין רפאל

קישורים מעניינים

• 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/

33סימוכיןתאריך