Microsoft SQL Server

גרסאות ושירותים

לכל מהדורה של SQL Server יש מספר גרסאות בעלויות שונות (לכל גרסה וגרסה) ומשתנות (בהתאם לקונפיגורציה של השרת הפיזי). להלן הגרסאות העיקריות:

Enterprise

הגרסה המלאה הכוללת את כל האופציות (שחלקן מנוטרל בגרסאות אחרות).

Developer

גרסה בעלת אותן יכולות כמו Enterprise אך נועדה לפיתוח בלבד בעמדת הפיתוח ולא להתקנה על שרת הייצור.
מובן שבפיתוח בעזרת Developer לגרסת Standard (להלן) יש לשים לב לא להשתמש ביכולות שאינן נתמכות בה.

Standard

גרסה מוגבלת מבחינת הקונפיגורציה של השרת והיכולות שלה שנועדה לשרתים חלשים יחסית. 
למשל- ממהדורת 2012 Enterprise ניתן ליהנות מתמיכה בלתי מוגבלת בליבות ולבצע "הוספה חמה" (מבלי לעצור את ה-Service ולכבות את השרת) של מעבדים וזיכרון פנימי, בעוד שה-Standard מוגבל ל-16 ליבות ולא ניתן לבצע בו "הוספה חמה".

Express

גרסה חינמית המאפשרת ליצור בסיס נתונים בעל יכולות בסיסיות ליישומים הזקוקים לכלי פשוט לאחסון כמות מוגבלת של נתונים או לצרכנים שצרכיהם ומשאביהם מוגבלים.
במהדורת 2012, גרסה זו משתמשת ב-1GB זיכרון לכל היותר, מוגבלת לנפח אחסון של 10GB, ופועלת על שרתים בעלי 4 ליבות לכל היותר.

ממשקי עבודה

SQL Server מספק מספר ממשקי עבודה שהשתנו והתפתחו במשך השנים, כאשר המוכרים יותר הם הממשקים הגרפיים המשמשים ככלי העבודה הסטנדרטים למפתחים ולאדמיניסטרטורים (DBA = Database Administrator). הממשק הגרפי עד גרסת 2005 כלל את ה-Enterprise Manager שכלל תצוגת עץ של האובייקטים השונים ויכולת ניהול שלהם, ולו התווסף ה-Query Analyzer ששימש לעבודה ב-TSQL.
בגרסת 2005 אוחדו שני הממשקים לממשק אחד SQL Server Management Studio ‏ (SSMS). החל מגרסת 2008 התווספה ל-SSMS  אופציית עבודה עם Visual Studio שהוא ממשק הפיתוח הסטנדרטי של מיקרוסופט לכלים השונים (שפות תכנות, כלי BI  וכדומה). ממשק עבודה חלופי הוא הפעלת Command Line (שורת פקודה) שהתאפשרה הודות לכלים כמו ISQL, OSQL, SQLCmd (משמאל לימין), ואפשרה הרצת סקריפטים וקובצי Batch (אצווה). מגרסת 2008 ניתן לעבוד עם SQLCmd ‏(SQL Command) דרך ה-SSMS מבלי לעבור לסביבת ה-Command של מערכת ההפעלה. אופצייה נוספת לעבודה דרך Command Line הוא שימוש בשפת הסקריפטים PowerShell של מיקרוסופט.
בנוסף לממשקים התקניים של SQL Server, ניתן להפעיל פקודות TSQL בעזרת כלי התממשקות סטנדרטיים כדוגמת ODBC, ו-OLE-DB.‏

טבלאות קבועות וזמניות

ברמה הלוגית- הנתונים נשמרים בבסיסי הנתונים בטבלאות, שבאמצעותן מיושמת התאוריה של בסיסי הנתונים הרלציוניים.
הטבלה מחולקת לשורות ועמודות (לעיתים מתייחסים אליהן כאל רשומות ושדות).
הטבלאות יכולות להיות קבועות או זמניות, כשבמקרה השני הן קיימות בדטבייס tempdb ונמחקות אוטומטית כשהקישור לשרת (Session או Connection) מתנתק או כשהמשתמש (שיכול להחזיק מספר קישורים) מתנתק - תלוי בסוג הטבלה הזמנית.
ברמה הפיזית

- המערכת מחלקת את קובץ (או קובצי) הדטבייס ל-Extents של 64KB, וכל Extent לשמונה Pages של 8KB.
לרוב כל Extent מוקצה לטבלה אחרת (או לאינדקס כפי שיוסבר להלן), למעט טבלאות קטנות; ואילו כל Page מוקצה תמיד לטבלה אחת.
המערכת דואגת להגדיל את הקבצים על פי מה שהגדיר המשתמש, ולהקצות לטבלאות Extents ו-Pages על פי הצורך.
לטבלאות ניתן ליצור אינדקסים, כאשר אחת משתיים: או שהאינדקסים מאוחסנים בנוסף לטבלה (אינדקסים רגילים) או שמדובר בדרך בה הטבלה מאוחסנת (Clustered Index).
האינדקסים יכולים לסייע בחיפוש מידע בטבלאות (בדומה לכרטיסיות שהיו מקובלות בעבר בספריות), במיונן, ובהגדרת מפתחות.
בין הטבלאות ניתן ליצור יחסי תלות מסוג "אחת לרבים".
בנוסף לטבלאות במשתמשים הנ"ל יש טבלאות מערכת שמאוחסנים בהם מטה-דאטה, כלומר - נתונים על המערכת עצמה, האובייקטים השונים בה, ההרשאות, סטטיסטיקות שונות לגבי ביצועי המערכת (DMV) וכו'.

Views

Views מציינים בדרך כלל פקודות שליפה שנשמרות ללא הנתונים (שנשמרים כאמור בטבלאות). הדבר מאפשר ליצור שליפות מורכבות או סטנדרטיות, לשמור אותן בתור View, ולהשתמש ב-View ללא צורך לכתוב בכל פעם מחדש אותה שליפה ולתחזק את כל הקודים בהן היא מופיעה. בנוסף, זה כלי חשוב למתן הרשאות צפיה סלקטיביות בנתונים (אם רוצים לאפשר למשתמשים מסוימים לצפות רק בחלק מהשורות או העמודות של הטבלאות).

פרוצדורות

פרוצדורות הן סקריפטים של פקודות TSQL בדרך כלל שניתן להפעיל אותן עם פרמטרים שונים. למשל, פרוצדורה שמקבלת כפרמטר שנה, ומעדכנת את טבלת סיכום המכירות בסך כל המכירות של כל סוכן בשנה המדוברת, על פי הפירוט בטבלת המכירות של הסוכנים.

פונקציות

פונקציות הן אובייקט המשלב יכולות מסוימות של ה-Views עם יכולות אחרות של הפרוצדורות. בדומה ל-Views הן נועדו לשלוף נתונים או לבצע חישובים, ובכל מקרה להחזיר תוצאה כלשהי למשתמש או לתוכנית שהפעילה אותן. בדומה לפרוצדורות הן כוללות קוד TSQL בדרך כלל וניתן להפעיל אותן עם פרמטרים.
הפונקציות מחזירות ערך בודד או סט של ערכים.

טרנזקציות

טרנזקציה היא אוסף של פקודות שמתבצעות בשלמותן או אינן מתבצעות כלל, אך בשום מקרה אינן מתבצעות חלקית. למשל, אם הועבר כסף מחשבון אחד בבנק לאחר ויש לעדכן את הטבלה כך שחשבון אחד יזוכה והשני יחויב, נדרש ששתי הפעולות יתבצעו יחד או שלא יתבצעו כלל, ושלא יווצר מצב אבסורדי בו חשבון אחד זוכה והכסף לא הגיע משום מקום או לא הגיע לשום מקום כי החשבון הנגדי לא חויב בשל תקלה.
ל-SQL Server יש יכולת מוגבלת של קינון טרנזקציות.

האופטימייזר

האופטימייזר הוא רכיב התוכנה ש"מחליט" כיצד כל פקודה תתבצע כך שהביצוע יהיה הכי יעיל, או לפחות מספיק יעיל (כלומר, יעיל מספיק שלא יהיה טעם לחפש פתרון יעיל יותר מחשש שהחיפוש "יעלה" יותר מהרווח הצפוי בביצוע).
SQL היא שפה דקלרטיבית בה המשתמש מצהיר מה הוא רוצה לשלוף או לעדכן אך פטור מלציין איך, ולכן יש משקל רב לאופטימייזר שעל פי הסטטיסטיקות שהמערכת מחזיקה על הנתונים בטבלאות, האינדקסים וכללי החלטה שונים שקודדו במערכת בוחר בדרך הביצוע המתאימה.

הרשאות ואבטחת מידע

כדי להתחבר לשרת יש צורך ב-Login (משתמש ברמת השרת). כשאבטחת השרת מוגדרת כ-Windows Authentication בו השרת משתלב בהגדרות של ה-Domain, אזי ה-Logins מוגדרים ב-Active Directory. כשההגדרה היא Mixed Mode (או SQL Server Authentication) ה-Logins (שם וסיסמה) מוגדרים ב-SQL Server עצמו. משמעות הדברים היא שבמקרה הראשון יש להזדהות באמצעות שם וסיסמה או באופן אחר (ביומטרי למשל) עם ההתחברות מהמחשב לרשת, ולאחר מכן ניתן להתחבר ל-SQL Server ללא צורך בהזדהות נוספת מכיוון שאותו Login משמש בשתי הסביבות. במקרה השני יש צורך בהזדהות בכל התחברות ל- SQL Server.
ברמת הדטבייס המשתמש מזוהה עם User המקושר ל-Login שהוא ברמת השרת, וההרשאות ל-User מגדירות באופן ספציפי את ההרשאות ברמת הדטבייס בנוסף למה שהוגדר כבר ברמת השרת. לשם מתן הרשאות ניתן להשתמש ברשימה של Server Roles (ברמת השרת) ו-Database Roles (ברמת הדטבייס) שכל אחד מהם כולל שורה של הרשאות טיפוסיות לתפקיד מסוים, ושיוך Login ל-Server Role או User ל-Database Role יעניק לו את ההרשאות האלו. לכך ניתן להוסיף הרשאות ספציפיות וכן ליצור Database Roles חדשים בכל דטבייס בנפרד (לא ניתן ליצור Server Roles).
ההרשאות ברמת השרת מתייחסות ליכולת ליצור דטבייסים חדשים, להשתמש בג'ובים, לגבות ולשחזר, לשנות הגדרות של השרת ועוד. הרשאות ברמת הדטבייס מאפשרות לשלוף או לשנות נתונים בטבלאות, ליצור אובייקטים כדוגמת פרוצדורות וטבלאות, להשתמש באובייקטים וכו'. באופן כללי ניתן לתת הרשאות (Grant), לשלול הרשאות קיימות (Revoke), ולמנוע במפורש הרשאות - בין אם יש (במישרין ובעקיפין) ובין אם אין (Deny).

תוכניות שירות נוספות

בנוסף ליכולות היסודיות של תוכנה לניהול בסיסי נתונים רלציוניים כמו יצירת טבלאות, הגדרת יחסים ביניהן, ניהול טרנזקציות, יצירת אינדקסים וכיוצא בזה; SQL Server כולל שורה הולכת וגדלה של תוכניות שירות; כאשר במקביל קיימים כלי צד שלישי שמחליפים ומשלימים את הקיים.

גיבוי

בנוסף לכלי גיבוי חלופיים ברמת מערכת ההפעלה (כלומר- מגבים את קובצי הדטבייסים) יש כלי גיבוי מובנה שמאפשר גיבוי מלא או גיבוי "דלתא", בהתאם ל-Recovery Model שהוגדר לדטבייס; ושחזור בהתאם – מלא או לנקודת זמן מסוימת. בנוסף לגיבוי מלא של דטבייס ניתן לגבות חלק מהאובייקטים (עם או בלי הנתונים) על ידי יצירת סקריפט שלהם. החל מגרסת 2008 ניתן לכווץ את קובצי הגיבוי.

כיווץ

החל מגרסת 2008 התווספה אופציית הכיווץ שמאפשרת לכווץ את גודלם הפיזי של טבלאות ואינדקסים, וכך לחסוך בשטח דיסק ובפעולות IO, במחיר של גידול בעומס על ה-CPU (המעבד של השרת). בנוסף, ניתן אף לכווץ את קובצי הגיבוי.

שכפול, זמינות גבוהה והתאוששות מתקלות

מספר כלים מאפשרים ליצור עותקים של דטבייסים, לשפר את הזמינות (High Availability) וההתאוששות מתקלות (Data Recovery), בנוסף לגיבוי הנ"ל שנחשב לאיטי (זמן שחזור הגיבויים). העותקים הנוצרים באמצעות הכלים שלהלן יכולים לשמש הן כגיבוי זמין במקרה של תקלה במערכת, הן לעבודה במערכות משנה המנותקות מהמערכת הראשית, והן לחלוקת עומסים כך שהעדכון יתבצע בדטבייס האמיתי והשליפות לצורכי דוחות ותחקור מההעתקים.
בין הכלים ניתן לציין את כלי הרפליקציה שמאפשרים ליצור עותק מסונכרן של הדטבייס, Mirroring שמאפשר החזקת עותק של הדטבייס ולהריץ עליו כל פקודה שמשנה את הדטבייס המקורי, Log Shipping שמאפשר החזקת עותק מסונכרן באמצעות העברת קובצי הלוג וביצוע (בעותק) של השינויים שהצטברו בהם (במקור), וכלי ה-HADR (החל מגרסת 2012) שפותר בעיות שונות של ה-Mirroring מבחינת מהירות התגובה לתקלה.

ג'ובים - תזמון משימות

ה-Agent הוא ה-Service שמאפשר לתזמן משימות, והוא (ה-Service) אחראי להריץ אותן באופן עצמאי. לרוב הוא זה שיטפל בהרצת תוכניות תחזוקה תקופתיות, פעולות ETL כבדות, ביצוע גיבויים וכו'.

תחזוקה

לצורך שיפור ביצועי המערכת יש צורך לתחזק את הסטטיסטיקות המשמשות את האופטימייזר, ארגון הקבצים הפיזיים וכו'; ולשם כך יש שורת כלים ייעודיים, והם מופעלים בדרך כלל אופן תקופתי על ידי ג'וב, ובמתואם עם פעולות ETL וגיבוי.

Service Broker

כלי זה שהתווסף בגרסת 2005 מאפשר לעבוד באופן אסינכרוני: בראש ובראשונה לשם העברת הודעות בין ישומים שונים הרצים בו זמנית, אך גם לשם הפעלה אסינכרונית של פרוצדורות בשיטת "שגר ושכח" - מופעלת פרוצדורה ב-Session נפרד, וזו שהפעילה אותה ממשיכה הלאה באופן בלתי תלוי במועד סיומה ובהצלחתה.

משלוח מיילים

ל-SQL Server יש יכולת לשלוח מיילים מתוך הקוד. אמצעי זה משמש בעיקר למשלוח התראות תחזוקה (נניח- אם ה-CPU עולה מעל רמה מסוימת), דיווחים על סיום פעולות - כולל סטטוס הצלחה, ועוד.

Full Text Search

כלי מובנה המאפשר ליצור אינדקס על עמודות טקסט כך שניתן יהיה לבצע חיפושים מורכבים ומשמעותיים תלויי שפה. למשל- אנחנו מחפשים היכן מופיע הצבע "לבן" בהטיות שונות (לבנים, הלבנה וכו') אך לא מעוניינים לקבל תוצאות כמו לבני (פוליטיקאית ישראלית), לבן (אחי רבקה) וכו'. 
התמיכה שלו באנגלית נחשבת לטובה, אך בעברית הוא מוגבל יחסית.

מעקב והתחקות

הכלים הללו כוללים את ה-Trace שמאפשר לבצע מעקב אחר פעולות שונות הקורות בשרת לצורכי תחזוקה (איתור תקלות ועומסים) ואבטחת נתונים (מניעת פריצות ושימוש לא מורשה במידע), ה-Profiler שמאפשר לעקוב אחר הפקודות המורצות והאירועים בשרת - בעיקר כדי לקבל תמונת מצב, וה-Extended Events שהתווסף בגרסת 2008, אמור במשך הזמן להחליף את ה-Profiler, ונהנה מ"חתימה" נמוכה יותר (כלומר- רץ בצד ה-Client ולא על השרת עצמו ולכן העומס שהוא יוצר - זניח).
בנוסף לאלו ניתן להשתמש בטריגרים משני סוגים כדי לעקוב אחר פעילות ושינויים: DML Triggers שמוגדרים על טבלאות ו-Views ומופעילם בעקבות פעולות עדכון, הוספה ומחיקה של שורות; ו-DDL Triggers שמופעלים בעקבות שינויים באובייקטים עצמם - ברמת הדטבייס או השרת.

שילוב קוד CLR

החל מגרסת 2005 ניתן לשלב ב-SQL Server פרוצדורות, פונקציות ואגרגציות הכתובות ב-CLR, בקלות רבה יחסית. יש לכתוב קוד מתאים באחד מכלי הפיתוח של .NET, ליצור DLL מתאים, ואותו לשלב במערכת.
היתרון של טכנולוגיה זו טמון בעיקר בהתמודדות עם בעיות שאינן בעיות מובהקות של בסיסי נתונים (כמו שליפה ועדכון שורות וסטים), וכוללות חישובים מורכבים ועיבוד מחרוזות; ואז הביצועים אמורים להיות משופרים לאין ערוך.

כלי BI

התקנה טיפוסית של SQL Server כוללת חבילה של כלי BI:

SSIS ‏ (SQL Server Integration Services)

כלי ETL שמאפשר שליפת מידע ממקורות שונים (לאו דווקא SQL Server), עיבודם, וטעינתם (בדרך כלל ל-DWH ‏- Data Warehouse אך לא בהכרח).

SSAS ‏ (SQL Server Analysis Services לשעבר OLAP)

כלי ליצירת בסיס נתונים רב ממדי (לא רלציוני) שניתן לתחקר אותו באמצעות שליפה של חיתוכים של המידע ברמות סיכום שונות, הסתעפות (drill down) מסיכום לפירוט שלו, מתן הרשאות צפייה ברמת השורה, ושימוש ב-MDX (שפת שאילתות בדומה ל-SQL המותאמת לבסיס נתונים רב ממדי). 
המידע בקוביות ה-OLAP מגיע בדרך כלל ממחסן הנתונים של מערכת המידע. את כל הפעולות הללו ניתן בסופו של דבר לבצע כך או אחרת גם בבסיס נתונים רלציוני, אולם בסיס הנתונים הרב ממדי נועד לשם כך, היכולות הללו מובנות בו, והביצועים שלו כתוצאה מכך טובים יותר.

SSRS ‏ (SQL Server Reporting Services)

כלי ליצירה ועיצוב של דוחות, מתן הרשאות צפייה בהם, והפצתם. הצפייה בהם נעשית באמצעות דפדפן כדוגמת אינטרנט אקספלורר, אך ניתן לייצא אותו לאקסל, קובצי PDF ועוד. המידע המוצג בדוחות נשלף בדרך כלל מה-DWH או מה-OLAP.