1. בלמ"ס
ללא סיווג עסקי
May the Powershell be with you
אביעד דרעי
רפא"ל – מערכות לחימה מתקדמות בע"מ
aviadd@rafael.co.il
0102/7/5
1 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
2. בלמ"ס
ללא סיווג עסקי
קצת על רפאל...
• מפתחת, מייצרת ומספקת מגוון מערכות לחימה
מתקדמות אשר תורמות למערכת הביטחון יכולות:
– בים
– באוויר
– ביבשה
• רווחים בשנת 8002 – למעלה מ 5.1 מיליארד ₪
• למעלה מ-0005 עובדים
2 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ 8 יולי, 0102
3. בלמ"ס
ללא סיווג עסקי
קצת עלי
• בוגר החוג למערכות מידע באוניברסיטת חיפה
• DBAתשתיתי כ-5.3 שנים:
– 2MS SQL 2000-2008R
– Oracle 9i-11g
– 01 SQL Anywhere
3 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
4. בלמ"ס
ללא סיווג עסקי
תחומי אחריות
• תחזוקה שוטפת של למעלה מ-001 שרתים במערכות
מרכזיות ובפרוייקטים שונים.
• פיתוח, הדרכה והטמעה של מגוון שירותים וכלים:
Reporting Services –
Integration Services –
Spatial –
PowerShell –
Mirroring, Replicationועוד... –
4 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
5. בלמ"ס
ללא סיווג עסקי
מה בתפריט?
• איך הכל התחיל? – הצגת הבעייה
• הדרישות עבור הפתרון
• ובהרחבה:
– מה זה PowerShellואיך הוא עוזר לי?
– SSISגנרי עם פרמטרים
– השילוב של שניהם
• שאלות
5 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
6. בלמ"ס
ללא סיווג עסקי
איך הכל התחיל?
• מספר מצומצם של שרתים, על כל שרת מספר קבצי
batchוסקריפטים עבור גיבויים, תחזוקה והגדרות
שונות של בסיסי הנתונים.
• בכל סקריפט קיימות הגדרות של שרת ה-exchange
שרת השו"ב והגדרות שרת התזמון המרכזי ממנו
רצים הסקריפטים.
6 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
7. בלמ"ס
ללא סיווג עסקי
אז איפה הבעיה?
• מספר השרתים הולך ועולה משבוע לשבוע
• כשמקימים שרת חדש, מעתיקים אליו את
הסקריפטים ומשנים את משתני הסביבה השונים
• נוצר מצב של קושי בתחזוקת הסקריפטים:
– כל שינוי הכי קטן דורש מעבר על מאות סקריפטים
– מסקריפט אחד ראשי נוצרו עשרות עותקים וקשה לעקוב
אחריהם
• חוסר תאימות של הסקריפטים השונים ומספרם
ההולך וגדל גורם לכך שזמן יקר הולך לאיבוד
7 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
8. בלמ"ס
ללא סיווג עסקי
טוב, אז מה אתה מציע לעשות?
• צריך למצוא פתרון אחר לתחזוקה השוטפת שיענה
על הדרישות הבאות:
– יהיה עותק אחד ויחיד שירוץ ממקום מרכזי
– במידת האפשר יאחד את כל הסקריפטים
– יאפשר הוספת שרתים חדשים/גריעת שרתים ישנים
באופן דינאמי וקל
8 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
9. בלמ"ס
ללא סיווג עסקי
הדרישות מהפתרון - המשך
– ידרוש מינימום תחזוקה ויאפשר אותה בקלות
– יאפשר גיבויי מקומי של בסיסי הנתונים על השרתים
– ירכז את הלוגים השונים למקום מרכזי
– במידת האפשר יהיה חינמי ולא תלוי במוצר מדף כזה או
אחר
9 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
10. בלמ"ס
ללא סיווג עסקי
אז מה זה בעצם ?Powershell
• כלי שורת פקודה של מיקרוסופט, המרחיב את שורת
הפקודה הסטנדרטית ( )cmdומעניק לו יכולות תכנות
נרחבות יותר
• משולב כחלק אינטגרלי בקו המוצרים האחרון
כגון: SQL 2008, Exchange 2007, Win 7, Win
8002 Serverועוד
• אידאלי לאוטומציה של תהליכים שונים לניהול
ותחזוקת שרתים ותחנות עבודה
01 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
11. בלמ"ס
ללא סיווג עסקי
היכרות בסיסית
• סיומת קבצי הסקריפט: 1ps
• מורכב לרוב מ) cmdlets (command-letsשבנויים
בצורת verb-nounלמשל:
–Get-help
–Write-host
–Get-content
–Copy-item
– על כל פקודה ניתן לקבל עזרה ופירוט ע"י שימוש ב-
Get-help cmd-lets -detailed
11 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
12. בלמ"ס
ללא סיווג עסקי
?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 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
13. בלמ"ס
ללא סיווג עסקי
יכולות - המשך
• עבודה אל מול שרתים ותחנות עבודה מרוחקות
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
}
13 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
14. בלמ"ס
ללא סיווג עסקי
יכולות - המשך
• הרחבה ע"י מחלקות ואובייקטים שונים כמו
.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 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
15. בלמ"ס
ללא סיווג עסקי
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
15 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
16. בלמ"ס
ללא סיווג עסקי
היישום שלנו ברפאל
• מבצע גיבויים
– מלאים פעם ביום
– לוגים כל שעה
– דיפרנציאליים כל 4 שעות במהלך יום העבודה
• מבצע בדיקת חיות ותקינות בסיסית של בסיסי
הנתונים בשרת כל 5 דקות
61 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
17. בלמ"ס
ללא סיווג עסקי
היישום - המשך
• פעם ביום עובר על כל בסיסי הנתונים בשרת ומשנה את
ההגדרות שלהם כך שיתאימו לתקנים ולשיטת העבודה
ברפאל
• פעם בשבוע ביצוע רה-ארגון לבסיסי הנתונים כולל ארגון
ובנייה מחדש של האינדקסים, כיווץ בסיסי הנתונים,
עדכון סטטיסטיקות, מחיקת היסטוריות ועוד
71 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
18. בלמ"ס
ללא סיווג עסקי
היישום - המשך
• שליחת מיילים במקרה של כשל, כולל צירוף קובץ הלוג של
הפעולה שנכשלה
• מחיקת קבצים ישנים לפי גיל
• ביצוע פעולות מותאמות על שרתים ובסיסי נתונים
מיוחדים/רגישים
• שליחת Trapsלמערכת השו"ב המרכזית ולמערכת התזמון
המרכזית
81 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
19. בלמ"ס
ללא סיווג עסקי
שימוש ב- SSISעם פרמטרים
SQL Server Integration Services -SSIS •
מבוססים על טכולוגית ה- .Netומחליפים את ה- •
DTSהחל מגרסת 5002 SQL
משמשים למעבר נתונים בין פלטפורומות שונות תוך •
הפעלת לוגיקות שונות על הנתונים במהלך המעבר
משמשים גם לביצוע פעולות תחזוקה שונות כמו •
גיבויים, רה-ארגון של אינדקסים וכו'.
91 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
20. בלמ"ס
ללא סיווג עסקי
Backup.dtsx
• לצורך הפתרון בניתי SSISחדש מסוג SQLDBMaint
• ה- SSISמכיל משימת גיבוי, משימת ניקוי וכתיבה לקובץ
לוג
02 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
21. בלמ"ס
ללא סיווג עסקי
Backup.dtsx
• הוגדרו משתנים גלובליים ברמת ה Packageכולו. כל
משתנה מתקבל משורת הפקודה ומשוייך במהלך
הריצה למשתנים הפנימיים של הרכיבים השונים.
12 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
22. בלמ"ס
ללא סיווג עסקי
מבנה הקבצים והתיקיות
• תיקייה מרכזית על השרת הראשי, בה יושב סקריפט
ה- Powershellהבודד
• לכל שרת מנוהל יש תת תיקיה ובתוכה קבצים עם
הגדרות עבור השרת ותיקיית logעבור הלוגים
22 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
23. בלמ"ס
ללא סיווג עסקי
איך עובד התהליך?
• מערכת התזמון המרכזית מפעילה קובץ batchבשעה
מסויימת. בדוגמא הזו נציג גיבוי לוג
32 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
24. בלמ"ס
ללא סיווג עסקי
מה בעצם קורה?
• הקובץ שמורץ למעשה הוא הקובץ dmp_log.bat
שנראה כך:
• call %~dp0db_env.bat
• sqlps "&'%ScriptDir%maintian.ps1' Backup
"3 %%ServerName% %LogDir% log %logBackupDir
42 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
25. בלמ"ס
ללא סיווג עסקי
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
25 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
26. בלמ"ס
ללא סיווג עסקי
עיבוד המשתנים
62 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
27. בלמ"ס
ללא סיווג עסקי
העברת המשתנים לפונקצייה המתאימה
72 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
28. בלמ"ס
ללא סיווג עסקי
בניית שורת הפקודה
עם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
28 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
29. בלמ"ס
ללא סיווג עסקי
ניטור הפעולה
92 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
30. בלמ"ס
ללא סיווג עסקי
סיכום – מה בעצם נעשה?
איחוד של מספר קבצי תחזוקת מערכת לקובץ אחד •
גנרי
ריכוז כל ההרצות למקום מרכזי אחד •
ריכוז כל הלוגים למקום מרכזי אחד •
שמירה על אחידות של בסיסי הנתונים •
תחזוקה קלה, פשוטה ומהירה שחוסכת עשרות שעות •
עבודה
03 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
31. בלמ"ס
ללא סיווג עסקי
לאן מתקדמים מכאן?
• מעבר ל-0.2 Powershell Vייתן כלים חדשים (בין היתר
גם כלים גרפיים) ויאפשר לייעל את הסקריפט ואת
תחזוקתו (למשל ע"י פקודת )Send-Mail
• כתיבת פונקצייה גנרית שתקבל כקלט שם ,SSISתריץ
אותו, תכתוב logפעילות שלו ותוציא את תוצאת ההרצה
למערכים השונים (שו"ב, תזמון מרכזי)
13 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
32. בלמ"ס
ללא סיווג עסקי
תודה על ההקשבה!
שאלות?
23 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך
33. בלמ"ס
ללא סיווג עסקי
קישורים מעניינים
• 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 סימוכין קניין רפאל - מערכות לחימה מתקדמות בע"מ תאריך