ברמה הלוגית - הנתונים נשמרים בבסיסי הנתונים בטבלאות, שבאמצעותן מיושמת התאוריה של בסיסי הנתונים הרלציוניים. הטבלה מחולקת לשורות ועמודות (לעיתים מתייחסים אליהן כאל רשומות ושדות). הטבלאות יכולות להיות קבועות או זמניות, כשבמקרה השני הן קיימות בדטבייס tempdb ונמחקות אוטומטית כשהקישור לשרת (Session או Connection) מתנתק או כשהמשתמש (שיכול להחזיק מספר קישורים) מתנתק – תלוי בסוג הטבלה הזמנית.
ברמה הפיזית - המערכת מחלקת את קובץ (או קובצי) הדטבייס ל-Extents של 64KB, וכל Extent לשמונה Pages של 8KB. לרוב כל Extent מוקצה לטבלה אחרת (או לאינדקס כפי שיוסבר להלן), למעט טבלאות קטנות; ואילו כל Page מוקצה תמיד לטבלה אחת. המערכת דואגת להגדיל את הקבצים על פי מה שהגדיר המשתמש, ולהקצות לטבלאות Extents ו-Pages על פי הצורך.
לטבלאות ניתן ליצור אינדקסים, כאשר אחת משתיים: או שהאינדקסים מאוחסנים בנוסף לטבלה (אינדקסים רגילים) או שמדובר בדרך בה הטבלה מאוחסנת (Clustered Index). האינדקסים יכולים לסייע בחיפוש מידע בטבלאות (בדומה לכרטיסיות שהיו מקובלות בעבר בספריות), במיונן, ובהגדרת מפתחות.
בין הטבלאות ניתן ליצור יחסי תלות מסוג "אחת לרבים".
בנוסף לטבלאות במשתמשים הנ"ל יש טבלאות מערכת שמאוחסנים בהם מטה-דאטה, כלומר נתונים על המערכת עצמה, האובייקטים השונים בה, ההרשאות, סטטיסטיקות שונות לגבי ביצועי המערכת (DMV) וכו'.
סוגי נתונים.
לכל עמודה בטבלה וגם כל משתנה בקוד TSQL מוגדר סוג הנתונים שיאוחסנו בו.
יש סוגי נתונים שונים:
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 ולא על השרת עצמו ולכן העומס שהוא יוצר – זניח).