You are on page 1of 864

Programmieren einer Microsoft SQL Server 2000-Datenbank

Arbeitsbuch fr Kursleiter
Kursnummer: 2328A

Artikelnummer: X06-15268 Version: 11/2000

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Kursnummer: 2328A Artikelnummer: X06-15268 Version: 11/2000

Programmieren einer Microsoft SQL Server 2000-Datenbank

iii

Inhalt
Einfhrung
Einfhrung ...............................................................................................................1 Kursunterlagen.........................................................................................................2 Voraussetzungen......................................................................................................3 Kursbeschreibung ....................................................................................................5 Installation ...............................................................................................................9 Microsoft Official Curriculum ...............................................................................12 Microsoft Certified Professional-Programm..........................................................13 Einrichtungen.........................................................................................................15

Unterrichtseinheit 1: bersicht ber SQL Server


bersicht..................................................................................................................1 Informationen zu SQL Server ..................................................................................2 SQL Server-Integration..........................................................................................12 SQL Server-Datenbanken ......................................................................................18 SQL Server-Sicherheit ...........................................................................................28 Arbeiten mit SQL Server .......................................................................................35 bungseinheit A: bersicht ber SQL Server.......................................................44 Lernzielkontrolle....................................................................................................50

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung


bersicht..................................................................................................................1 Entwerfen der Anwendungsarchitektur einer Organisation .....................................2 SQL Server-Programmierungstools.........................................................................8 Transact-SQL (Programmiersprache) ....................................................................11 Elemente von Transact-SQL..................................................................................12 Zustzliche Sprachelemente...................................................................................20 Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen.........................33 Empfohlene Methoden...........................................................................................44 bungseinheit A: bersicht ber Transact-SQL ...................................................45 Lernzielkontrolle....................................................................................................53

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken


bersicht..................................................................................................................1 Erstellen von Datenbanken ......................................................................................2 Erstellen von Dateigruppen....................................................................................11 Verwalten von Datenbanken..................................................................................14 Einfhrung in Datenstrukturen ..............................................................................25 Empfohlene Methoden...........................................................................................32 bungseinheit A: Erstellen und Verwalten von Datenbanken...............................33 Lernzielkontrolle....................................................................................................39

iv

Programmieren einer Microsoft SQL Server 2000-Datenbank

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen


bersicht................................................................................................................. 1 Erstellen von Datentypen ........................................................................................ 2 Erstellen von Tabellen ............................................................................................ 9 Generieren von Spaltenwerten .............................................................................. 17 Generieren von Skripts.......................................................................................... 21 Empfohlene Methoden.......................................................................................... 22 bungseinheit A: Erstellen von Datentypen und Tabellen ................................... 23 Lernzielkontrolle................................................................................................... 33

Unterrichtseinheit 5: Implementieren der Datenintegritt


bersicht................................................................................................................. 1 Datenintegrittstypen .............................................................................................. 2 Erzwingen der Datenintegritt ................................................................................ 3 Definieren von Einschrnkungen............................................................................ 4 Einschrnkungstypen ............................................................................................ 10 Deaktivieren von Einschrnkungen ...................................................................... 20 Verwenden von Standardwerten und Regeln........................................................ 25 Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt ............ 27 Empfohlene Methoden.......................................................................................... 29 bungseinheit A: Implementieren der Datenintegritt ......................................... 30 Lernzielkontrolle................................................................................................... 41

Unterrichtseinheit 6: Planen von Indizes


bersicht................................................................................................................. 1 Einfhrung in Indizes.............................................................................................. 2 Indexarchitektur ...................................................................................................... 7 Abrufen von gespeicherten Daten durch SQL Server ........................................... 12 Verwaltung von Index- und Heapstrukturen durch SQL Server........................... 19 Entscheiden, welche Spalten indiziert werden...................................................... 25 Empfohlene Methoden.......................................................................................... 39 bungseinheit A: Bestimmen der Indizes fr eine Tabelle .................................. 40 Lernzielkontrolle................................................................................................... 44

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes


bersicht................................................................................................................. 1 Erstellen von Indizes............................................................................................... 2 Arbeiten mit den CREATE INDEX-Optionen...................................................... 13 Verwalten von Indizes .......................................................................................... 18 bungseinheit A: Erstellen und Verwalten von Indizes ....................................... 27 Einfhrung in die Arbeit mit Statistiken ............................................................... 37 Abfragen der sysindexes-Tabelle ...................................................................... 48 Einrichten von Indizes mit Hilfe des Indexoptimierungs-Assistenten .................. 50 Leistungsaspekte ................................................................................................... 53 Empfohlene Methoden.......................................................................................... 54 bungseinheit B: Anzeigen von Indexstatistiken ................................................. 56 Lernzielkontrolle................................................................................................... 65

Programmieren einer Microsoft SQL Server 2000-Datenbank

Unterrichtseinheit 8: Implementieren von Sichten


bersicht..................................................................................................................1 Einfhrung zu Sichten..............................................................................................2 Vorteile von Sichten ................................................................................................4 Definieren von Sichten ............................................................................................6 ndern von Daten mit Hilfe von Sichten...............................................................17 Optimieren der Leistung mit Hilfe von Sichten.....................................................19 Empfohlene Methoden...........................................................................................26 bungseinheit A: Implementieren von Sichten .....................................................28 Lernzielkontrolle....................................................................................................38

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren


bersicht..................................................................................................................1 Einfhrung in gespeicherte Prozeduren ...................................................................2 Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren..................10 bungseinheit A: Erstellen gespeicherter Prozeduren...........................................21 Verwenden von Parametern in gespeicherten Prozeduren.....................................26 Ausfhren erweiterter gespeicherter Prozeduren ...................................................37 Behandeln von Fehlermeldungen...........................................................................39 Leistungsaspekte ....................................................................................................45 Empfohlene Methoden...........................................................................................47 bungseinheit B: Erstellen gespeicherter Prozeduren mit Parametern..................48 Lernzielkontrolle....................................................................................................59

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen


bersicht..................................................................................................................1 Arten von benutzerdefinierten Funktionen ..............................................................2 Definieren von benutzerdefinierten Funktionen ......................................................3 Beispiele fr benutzerdefinierte Funktionen............................................................9 Empfohlene Methoden...........................................................................................17 bungseinheit A: Erstellen von benutzerdefinierten Funktionen ..........................18 Lernzielkontrolle....................................................................................................24

Unterrichtseinheit 11: Implementieren von Triggern


bersicht..................................................................................................................1 Einfhrung in Trigger ..............................................................................................2 Definieren von Triggern ........................................................................................10 Funktionsweise von Triggern ................................................................................16 Beispiele fr Trigger..............................................................................................31 Leistungsaspekte ....................................................................................................34 Empfohlene Methoden...........................................................................................35 bungseinheit A: Erstellen von Triggern ..............................................................36 Lernzielkontrolle....................................................................................................44

vi

Programmieren einer Microsoft SQL Server 2000-Datenbank

Unterrichtseinheit 12: Programmieren fr mehrere Server


bersicht................................................................................................................. 1 Einfhrung in verteilte Abfragen ............................................................................ 2 Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle .............................. 4 Einrichten einer Verbindungsserverumgebung....................................................... 7 Ausfhren einer Abfrage auf einem Verbindungsserver....................................... 18 Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver .............. 23 Verwalten von verteilten Transaktionen ............................................................... 24 ndern von Daten auf einem Verbindungsserver ................................................. 25 Verwenden partitionierter Sichten ........................................................................ 27 Empfohlene Methoden.......................................................................................... 34 bungseinheit A: Verwenden von verteilten Daten ............................................. 36 Lernzielkontrolle................................................................................................... 48

Unterrichtseinheit 13: Optimieren der Abfrageleistung


bersicht................................................................................................................. 1 Einfhrung zum Abfrageoptimierer........................................................................ 2 Abrufen von Ausfhrungsplaninformationen ....................................................... 13 Verwenden eines Indexes zum Abdecken einer Abfrage...................................... 25 Indizierungsstrategien ........................................................................................... 36 Auerkraftsetzen des Abfrageoptimierers............................................................. 43 Empfohlene Methoden.......................................................................................... 50 bungseinheit A: Optimieren der Abfrageleistung .............................................. 52 Lernzielkontrolle................................................................................................... 67

Unterrichtseinheit 14: Analysieren von Abfragen


bersicht................................................................................................................. 1 Abfragen mit dem AND-Operator .......................................................................... 2 Abfragen mit dem OR-Operator ............................................................................. 4 bungseinheit A: Analysieren von Abfragen mit dem AND-Operator und dem OR-Operator............................................................................................. 5 Abfragen mit Verknpfungsoperationen............................................................... 35 bungseinheit B: Analysieren von Abfragen mit unterschiedlichen Verknpfungsstrategien ........................................................................................ 48 Empfohlene Methoden.......................................................................................... 57 Lernzielkontrolle................................................................................................... 58

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren


bersicht................................................................................................................. 1 Einfhrung in Transaktionen und Sperren .............................................................. 2 Verwalten von Transaktionen ................................................................................. 4 SQL Server-Sperren.............................................................................................. 13 Verwalten von Sperren.......................................................................................... 22 Empfohlene Methoden.......................................................................................... 33 bungseinheit A: Verwalten von Transaktionen und Sperren.............................. 34 Lernzielkontrolle................................................................................................... 45

Programmieren einer Microsoft SQL Server 2000-Datenbank

vii

ber diesen Kurs


Dieser Abschnitt bietet eine kurze Beschreibung des Kurses, der Zielgruppe, der empfohlenen Voraussetzungen und der Lernziele.

Beschreibung
Dieser fnftgige Kurs vermittelt den Kursteilnehmern die technischen Fhigkeiten, die zum Programmieren einer Datenbank mit Hilfe von Microsoft SQL Server 2000 erforderlich sind. Kurs 2328A ist eine berarbeitete Version von Kurs 1133, Implementieren einer Datenbank in Microsoft SQL Server 7.0. In diesem Kurs werden neue Funktionen von SQL Server 2000 vorgestellt. Ein Teil des Inhalts zum Abfragen wurde im Kurs ausgelassen. Der gelschte Inhalt wird in einem gesonderten Kurs, Kurs 2316, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, angeboten. Dieser Kurs enthlt einen Teil des Inhalts von Kurs 2013, Optimizing Microsoft SQL Server 7.0. Der Kurs enthlt eine neue Unterrichtseinheit zu benutzerdefinierten Funktionen.

Kursteilnehmer
Dieser Kurs richtet sich an Personen, die fr das Implementieren von Datenbankobjekten und das Programmieren von SQL Server-Datenbanken mit Hilfe von Transact-SQL verantwortlich sind.

Voraussetzungen fr die Kursteilnehmer


Fr diesen Kurs mssen die Kursteilnehmer die folgenden Voraussetzungen erfllen: Erfahrung im Verwenden des Microsoft Windows 2000-Betriebssystems fr folgende Aufgaben: Herstellen von Verbindungen zwischen Clients unter Windows 2000 mit Netzwerken und dem Internet. Konfigurieren der Windows 2000-Umgebung. Erstellen und Verwalten von Benutzerkonten. Verwalten des Zugriffs auf Ressourcen mit Hilfe von Gruppen. Konfigurieren und Verwalten von Datentrgern und Partitionen, einschlielich Datentrgerstriping und -spiegelung. Verwalten von Daten mit Hilfe des NTFS-Dateisystems. Implementieren von Windows 2000-Sicherheit. Optimieren der Leistung in Windows 2000. Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten in den folgenden Kursen erwerben: Kurs 2046, Microsoft Windows 2000 - Grundlagen zum Netzwerk und Betriebssystem Kurs 2054, Implementieren von Microsoft Windows 2000 Professional und Server

viii

Programmieren einer Microsoft SQL Server 2000-Datenbank

Kenntnisse der grundlegenden Konzepte relationaler Datenbanken, einschlielich folgender Kenntnisse: Logischer und physischer Datenbankentwurf. Konzepte der Datenintegritt. Beziehungen zwischen Tabellen und Spalten (Primrschlssel und Fremdschlssel, 1:1, 1:n, n:n). Speichern von Daten in Tabellen (Zeilen und Spalten). Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten im folgenden Kurs erwerben: Kurs 1609, Designing Data Services and Data Models Kenntnisse der grundlegenden Transact-SQL-Syntax (SELECT-, UPDATEund INSERT-Anweisungen). Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten im folgenden Kurs erwerben: Kurs 2316A, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL Kenntnis der Rolle des Datenbankadministrators.

Lernziele
Nach Abschluss dieses Kurses werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Elemente von SQL Server. Entwerfen einer SQL Server-Anwendungsarchitektur einer Organisation. Beschreiben der begrifflichen Basis des Programmierens in Transact-SQL. Erstellen und Verwalten von Datenbanken und der verbundenen Komponenten. Implementieren der Datenintegritt mit Hilfe der IDENTITY-Spalteneigenschaft sowie mit Hilfe von Einschrnkungen, Standardwerten, Regeln und eindeutigen Bezeichnern. Planen der Verwendung von Indizes. Erstellen und Verwalten von Indizes. Erstellen, Verwenden und Verwalten von Datensichten. Entwerfen, Erstellen und Verwenden von gespeicherten Prozeduren. Implementieren von benutzerdefinierten Funktionen. Erstellen und Implementieren von Triggern. Programmieren fr mehrere Server mit Hilfe von verteilten Abfragen, verteilten Transaktionen und partitionierten Sichten. Optimieren der Abfrageleistung. Analysieren von Abfragen. Verwalten von Transaktionen und Sperren, um Parallelitt und Wiederherstellbarkeit von Daten sicherzustellen.

Programmieren einer Microsoft SQL Server 2000-Datenbank

ix

Zeitplan fr den Kurs


Der folgende Zeitplan zeigt eine ungefhre Schtzung der fr die einzelnen Unterrichtseinheiten bentigten Zeit. Die Zeitplanung kann sich leicht verschieben.

1. Tag
Beginn 9:00 9:30 10:30 10:45 11:15 12:00 13:00 13:30 14:00 14:30 14:45 15:15 Ende 9:30 10:30 10:45 11:15 12:00 13:00 13:30 14:00 14:30 14:45 15:15 15:45 Unterrichtseinheit Einfhrung Unterrichtseinheit 1: bersicht ber SQL Server Pause bungseinheit A: bersicht ber SQL Server Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung Mittagspause bungseinheit A: bersicht ber Transact-SQL Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken bungseinheit A: Erstellen und Verwalten von Datenbanken Pause Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen bungseinheit A: Erstellen von Datentypen und Tabellen

2. Tag
Beginn 9:00 9:30 10:15 10:30 11:00 12:30 13:30 13:45 14:15 14:45 15:00 15:30 Ende 9:30 10:15 10:30 11:00 12:30 13:30 13:45 14:15 14:45 15:00 15:30 16:00 Unterrichtseinheit Wiederholung des ersten Tages Unterrichtseinheit 5: Implementieren der Datenintegritt Pause bungseinheit A: Implementieren der Datenintegritt Unterrichtseinheit 6: Planen von Indizes Mittagspause bungseinheit A: Bestimmen der Indizes fr eine Tabelle Unterrichtseinheit 7: Erstellen und Verwalten von Indizes bungseinheit A: Erstellen und Verwalten von Indizes Pause Unterrichtseinheit 7: Erstellen und Verwalten von Indizes (Fortsetzung) bungseinheit B: Anzeigen von Indexstatistiken

Programmieren einer Microsoft SQL Server 2000-Datenbank

3. Tag
Beginn 9:00 9:30 10:15 10:45 11:00 11:30 11:45 12:45 13:45 14:30 14:45 15:15 Ende 9:30 10:15 10:45 11:00 11:30 11:45 12:45 13:45 14:30 14:45 15:15 15:45 Unterrichtseinheit Wiederholung des zweiten Tages Unterrichtseinheit 8: Implementieren von Sichten bungseinheit A: Implementieren von Sichten Pause Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren bungseinheit A: Erstellen gespeicherter Prozeduren Mittagspause Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren (Fortsetzung) bungseinheit B: Erstellen gespeicherter Prozeduren mit Parametern Pause Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen bungseinheit A: Erstellen von benutzerdefinierten Funktionen

4. Tag
Beginn 9:00 9:30 10:15 10:30 11:00 12:00 13:00 14:00 14:15 Ende 9:30 10:15 10:30 11:00 12:00 13:00 14:00 14:15 15:45 Unterrichtseinheit Wiederholung des dritten Tages Unterrichtseinheit 11: Implementieren von Triggern Pause bungseinheit A: Erstellen von Triggern Unterrichtseinheit 12: Programmieren fr mehrere Server Mittagspause bungseinheit A: Verwenden von verteilten Daten Pause Unterrichtseinheit 13: Optimieren der Abfrageleistung

Programmieren einer Microsoft SQL Server 2000-Datenbank

xi

5. Tag
Beginn 9:00 9:30 10:15 10:30 11:00 12:00 13:00 13:30 14:00 14:15 15:00 Ende 9:30 10:15 10:30 11:00 12:00 13:00 13:30 14:00 14:15 15:00 16:00 Unterrichtseinheit Wiederholung des vierten Tages bungseinheit A: Optimieren der Abfrageleistung Pause Unterrichtseinheit 14: Analysieren von Abfragen bungseinheit A: Analysieren von Abfragen mit dem ANDOperator und dem OR-Operator Mittagspause Unterrichtseinheit 14: Analysieren von Abfragen (Fortsetzung) bungseinheit B: Analysieren von Abfragen mit unterschiedlichen Verknpfungsstrategien Pause Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren bungseinheit A: Verwalten von Transaktionen und Sperren

xii

Programmieren einer Microsoft SQL Server 2000-Datenbank

Inhalt der Kursleiter-CD


Die Kursleiter-CD enthlt folgende Dateien und Ordner: Default.htm. Diese Datei ffnet die Webseite mit den Unterlagen fr den Kursleiter. Readme.txt. Diese Datei enthlt eine Beschreibung des CD-Inhalts und der Installationsanweisungen im ASCII-Format (kein Word-Dokument). 2328A_ms.doc. Diese Datei ist das Handbuch fr das manuelle Einrichten von Schulungscomputern. Sie enthlt die Schritte zum manuellen Installieren der Schulungsraumcomputer. 2328A_sg.doc. Diese Datei ist das Handbuch fr das Einrichten von Schulungscomputern. Sie enthlt eine Beschreibung der Schulungsraumanforderungen und der Schulungsraumkonfiguration sowie Anweisungen zum Verwenden der automatisierten Skripts fr das Einrichten der Schulungscomputer und die Checkliste fr das Einrichten von Schulungscomputern. Errorlog. Dieser Ordner enthlt eine Vorlage, die zum Aufzeichnen von im Kurs auftretenden Fehlern und Korrekturen verwendet wird. Fonts. Dieser Ordner enthlt Schriftarten, die erforderlich sind, um Prsentationen in Microsoft PowerPoint und webbasierte Materialien anzuzeigen. Mplayer. Dieser Ordner enthlt Dateien, die zum Installieren von Microsoft Windows Media Player erforderlich sind. Powerpnt. Dieser Ordner enthlt PowerPoint-Folien, die in diesem Kurs verwendet werden. Pptview. Dieser Ordner enthlt Microsoft PowerPoint Viewer, der zum Anzeigen der PowerPoint-Folien verwendet wird. Studentcd. Dieser Ordner enthlt die Webseite mit Links zu den diesen Kurs betreffenden Ressourcen, einschlielich weiterer Informationen, der Lernzielkontrolle und der Antworten zu den bungseinheiten, der Dateien mit den bungseinheiten, der Multimediaprsentationen und der Websites mit fr den Kurs relevanten Inhalten. Tprep. Dieser Ordner enthlt die Prsentation zur Vorbereitung des Kursleiters, eine kommentierte Prsentation, in der die Anweisungsstrategie fr den Kurs sowie Prsentationstipps und Warnungen erklrt werden. Um die Prsentation zu ffnen, klicken Sie auf der Webseite mit den Unterlagen fr den Kursleiter auf Prsentation zur Vorbereitung des Kursleiters.

Programmieren einer Microsoft SQL Server 2000-Datenbank

xiii

Inhalt der Kursteilnehmer-CD


Die Kursteilnehmer-CD enthlt folgende Dateien und Ordner: Default.htm. Diese Datei ffnet die Webseite mit den Unterlagen fr die Kursteilnehmer. Sie stellt den Kursteilnehmern die den Kurs betreffenden Ressourcen zur Verfgung, einschlielich weiterer Informationen, der Lernzielkontrolle und der Antworten zu den bungseinheiten, der Dateien mit den bungseinheiten, der Multimediaprsentationen und der Websites mit fr den Kurs relevanten Inhalten. Readme.txt. Diese Datei enthlt eine Beschreibung des CD-Inhalts und der Installationsanweisungen im ASCII-Format (kein Word-Dokument). AddRead. Dieser Ordner enthlt zustzliche Informationen zu diesem Kurs. Answers. Dieser Ordner enthlt Antworten auf alle Fragen in den Unterrichtseinheiten und praktischen bungen. Appendix. Dieser Ordner enthlt Anhangdateien fr diesen Kurs. Fonts. Dieser Ordner enthlt Schriftarten, die erforderlich sind, um Prsentationen in PowerPoint und webbasierte Materialien anzuzeigen. Labfiles. Dieser Ordner enthlt Dateien, die in den praktischen bungen verwendet werden. Diese Dateien knnen zur Vorbereitung der Kursteilnehmercomputer fr die praktischen bungen verwendet werden. Media. Dieser Ordner enthlt Dateien, die in Multimediaprsentationen fr diesen Kurs verwendet werden. Mplayer. Dieser Ordner enthlt Dateien, die zum Installieren von Microsoft Windows Media Player erforderlich sind. Pptview. Dieser Ordner enthlt PowerPoint Viewer, der zum Anzeigen der PowerPoint-Prsentationen verwendet wird, die die zustzlichen Informationen begleiten. Webfiles. Dieser Ordner enthlt Dateien, die zum Anzeigen der Webseite mit den Unterlagen fr die Kursteilnehmer erforderlich sind. Wordview. Dieser Ordner enthlt Word Viewer, der zum Anzeigen beliebiger Dokumentdateien unter Word (DOC-Dateien) verwendet wird, die auf der CD enthalten sind.

xiv

Programmieren einer Microsoft SQL Server 2000-Datenbank

Typografische Vereinbarungen
Die folgenden typografischen Vereinbarungen werden in den Kursunterlagen verwendet, um Textelemente hervorzuheben.
Vereinbarung Verwendung Kennzeichnet eine Einfhrungsseite. Dieses Symbol steht neben dem Titel eines Themas, wenn auf der Seite bzw. den folgenden Seiten weitere Informationen zum entsprechenden Thema behandelt werden. Fett Kennzeichnet Befehle, Befehlsoptionen und Syntax, die exakt in der angegebenen Weise eingegeben werden mssen. Menbefehle, Schaltflchen, Titel von Dialogfeldern und Optionen und Namen von Symbolen und Mens werden ebenfalls fett formatiert. Kennzeichnet in Syntaxanweisungen oder anderen beschreibenden Texten die Argumentnamen und Platzhalter fr variable Informationen. Auf neue Begriffe, auf Buchtitel und auf besonders hervorzuhebende Begriffe wird ebenfalls in Kursivschrift hingewiesen. Kennzeichnet Domnen-, Benutzer-, Computer-, Verzeichnis-, Ordner- und Dateinamen, ausgenommen, wenn auf bestimmte Namen verwiesen wird, bei denen die Gro- und Kleinschreibung beachtet werden muss. Wenn nichts anderes angegeben ist, knnen Sie bei der Eingabe eines Verzeichnis- oder Dateinamens in einem Dialogfeld oder an der Eingabeaufforderung Kleinbuchstaben verwenden. Kennzeichnen Tastennamen, Tastenfolgen und Tastenkombinationen, z. B. ALT+LEERTASTE. Stellt Codebeispiele oder Beispiele fr Bildschirmausgaben dar. Zur Kennzeichnung optionaler Elemente in Syntaxanweisungen. So weist z. B. [Dateiname] in einer Befehlssyntax darauf hin, dass Sie whlen knnen, ob Sie einen Dateinamen mit dem Befehl eingeben mchten. Geben Sie nur die Informationen in den eckigen Klammern, jedoch nicht die Klammern selbst ein. Zur Kennzeichnung erforderlicher Elemente in Syntaxanweisungen. Geben Sie nur die Informationen in den geschweiften Klammern, jedoch nicht die Klammern selbst ein. Trennt in Syntaxanweisungen zwei Alternativen, von denen nur eine gewhlt werden kann. Kennzeichnet (in den bungseinheiten) ein Verfahren mit einer Abfolge von Schritten. ... . . . Gibt in Syntaxanweisungen an, dass das vorausgegangene Element wiederholt werden kann. Stellt einen ausgelassenen Teil eines Codebeispiels dar.

Kursiv

Majuskel und Fett

GROSSBUCHSTABEN Festbreitenschrift

[]

{}

Einfhrung

Inhalt Einfhrung Kursunterlagen Voraussetzungen Kursbeschreibung Installation Microsoft Official Curriculum Microsoft Certified Professional-Programm Einrichtungen 1 2 3 5 9 12 13 15

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Einfhrung

iii

Hinweise fr den Kursleiter


Prsentation: 30 Minuten In der Unterrichtseinheit zur Einfhrung erhalten die Kursteilnehmer eine bersicht ber den Kursinhalt. Auerdem enthlt diese Unterrichtseinheit logistische Hinweise zum Verlauf des Kurses 2328A, Programmieren einer Microsoft SQL Server 2000-Datenbank.

Kursunterlagen und Vorbereitung


Erforderliche Unterlagen
Um diesen Kurs zu unterrichten, bentigen Sie folgende Unterlagen: Arbeitsbuch fr Kursleiter Kursleiter-CD

Vorbereitende Aufgaben
Zur Vorbereitung dieses Kurses gehen Sie folgendermaen vor: Fllen Sie die Checkliste fr die Kursvorbereitung aus, die in den Unterlagen fr den Kursleiter bereitgestellt wird.

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Kurs 2328A: Programmieren einer Microsoft SQL Server 2000-Datenbank Zeigen Sie die Folie mit der Kursnummer und dem Kurstitel. Einfhrung Begren Sie die Kursteilnehmer zu diesem Kurs, und stellen Sie sich vor. Geben Sie eine kurze bersicht ber Ihren beruflichen Werdegang, um Ihre Kompetenz als Kursleiter zu unterstreichen. Bitten Sie die Kursteilnehmer, sich vorzustellen und ihrerseits eine bersicht ber Beruf, Produkterfahrung und Schulungserwartungen zu geben. Halten Sie die Erwartungen der Kursteilnehmer auf einer Tafel oder einem Flipchart fest, und greifen Sie diese Themen im Verlauf der Unterrichtseinheit auf. Kursunterlagen Erlutern Sie den Zweck aller in diesem Kurs verwendeten Unterlagen. Teilen Sie den Kursteilnehmern mit, dass sie am Ende des Kurses Gelegenheit haben, mit Hilfe des Microsoft Online Evaluation Systems Feedback zum Kurs und zu den Einrichtungen zu geben. Voraussetzungen Teilen Sie den Kursteilnehmern mit, welche Voraussetzungen vor der Teilnahme an diesem Kurs erfllt sein mssen. Dies ist eine Gelegenheit, um festzustellen, ob es Kursteilnehmer gibt, die mglicherweise nicht ber den entsprechenden Hintergrund oder die Erfahrungen verfgen, die fr die Teilnahme am Kurs erforderlich sind.

iv

Einfhrung

Kursbeschreibung Geben Sie eine bersicht ber die einzelnen Unterrichtseinheiten und Lernziele. Stellen Sie einen Bezug zwischen den Themen der Unterrichtseinheiten und den Erwartungen der Kursteilnehmer her. Installation Geben Sie den Kursteilnehmern alle notwendigen Installationsinformationen fr den Kurs. Microsoft Official Curriculum Geben Sie eine bersicht ber das Microsoft Official Curriculum-Programm (MOC), und verweisen Sie die Kursteilnehmer auf die Microsoft Official Curriculum-Webseite unter der folgenden Adresse: http://www.microsoft.com/train_cert/moc Microsoft Certified Professional-Programm Informieren Sie die Kursteilnehmer ber das Microsoft Certified Professional-Programm (MCP) und die verschiedenen Zertifizierungsmglichkeiten. Einrichtungen Erlutern Sie die Einrichtungen am Schulungsort.

Einfhrung

Einfhrung
Stellen Sie sich vor, wecken Sie Vertrauen in Ihre Kompetenz als Kursleiter, und fordern Sie die Kursteilnehmer auf, sich vorzustellen und ihre Erwartungen an den Kurs zu definieren.

Thema

Name Firmenzugehrigkeit Titel/Funktion Beruflicher Verantwortungsbereich Programmieren, Netzwerk, Datenbankverwaltung Erfahrungen mit SQL Server Erwartungen an den Kurs

Einstieg

Guten Morgen. Willkommen zum Kurs Programmieren einer Microsoft SQL Server 2000Datenbank. Ich heie...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Stellen Sie sich vor. Geben Sie eine kurze bersicht ber Ihren beruflichen Werdegang, um Ihre Kompetenz als Kursleiter fr SQL Server zu unterstreichen. Bitten Sie die Kursteilnehmer, sich anhand der aufgefhrten Stichpunkte vorzustellen.

Methodischer Hinweis

Notieren Sie whrend der Vorstellung der Kursteilnehmer deren Erwartungen an den Kurs auf einer Tafel oder einem Flipchart.

Einfhrung

Kursunterlagen
Zeigen und beschreiben Sie die Kursunterlagen.

Thema

Einstieg

Namensschild Arbeitsbuch fr Kursteilnehmer Kursteilnehmer-CD Feedbackbogen

Wir haben alle fr den Kurs erforderlichen Unterlagen fr Sie zusammengestellt. Auf Ihren Tischen finden Sie die folgenden Unterlagen...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Beschreiben Sie den Inhalt des Arbeitsbuches und der Kursteilnehmer-CD. Bitten Sie die Kursteilnehmer, ihre Namen auf beide Seiten des Namensschildes zu schreiben. Weisen Sie die Kursteilnehmer darauf hin, dass Sie am Ende des Kurses einen Feedbackbogen ausfllen mssen. Teilen Sie den Kursteilnehmern die Adresse mit, an die sie Kommentare senden knnen.

Das Kit enthlt die folgenden Unterlagen: Namensschild. Schreiben Sie Ihren Namen auf beide Seiten des Namensschildes. Arbeitsbuch fr Kursteilnehmer. Das Arbeitsbuch fr Kursteilnehmer enthlt die in diesem Kurs behandelten Themen sowie die bungen der praktischen bungseinheiten. Kursteilnehmer-CD. Die Kursteilnehmer-CD enthlt die Webseite mit Hyperlinks zu den diesen Kurs betreffenden Ressourcen, einschlielich weiterfhrender Literatur, der Antworten zur Lernzielkontrolle und zu den bungseinheiten, der Dateien mit den bungseinheiten, der Multimediaprsentationen und der Websites mit fr den Kurs relevanten Inhalten. Anmerkung Um die Webseite zu ffnen, legen Sie die Kursteilnehmer-CD in das CD-ROM-Laufwerk ein, und doppelklicken Sie dann im Stammverzeichnis der CD auf Default.htm. Feedbackbogen. Fllen Sie nach Beendigung des Kurses den Feedbackbogen aus, um Feedback zum Kursleiter, zum Kurs und zum Softwareprodukt abzugeben. Mit Hilfe Ihrer Kommentare knnen zuknftige Kurse weiter verbessert werden. Wenn Sie weitere Kommentare zu den Kursunterlagen abgeben mchten, knnen Sie eine entsprechende E-Mail an die folgende Adresse senden: tclocsug@microsoft.com. Die Betreffzeile muss die Angabe Kurs 2328A (2073A) enthalten. Wenn Sie weitere Kommentare zum MCP-Programm abgeben oder sich ber dieses Programm informieren mchten, knnen Sie eine E-Mail an die folgende Adresse senden: mcp@msprograms.com

Methodischer Hinweis

Fhren Sie vor, wie die auf der Kursteilnehmer-CD bereitgestellte Webseite geffnet wird. Doppelklicken Sie auf der Kursleiter-CD im Ordner StudentCD auf Default.htm.

Einfhrung

Voraussetzungen
Thema
Benennen und beschreiben Sie die Voraussetzungen fr diesen Kurs.

Einstieg

Erfahrung im Verwenden des Microsoft Windows 2000Betriebssystems Kenntnisse der grundlegenden Konzepte relationaler Datenbanken Kenntnisse der grundlegenden Transact-SQL-Syntax (SELECT-, UPDATE- und INSERT-Anweisungen) Kenntnis der Rolle des Datenbankadministrators

Fr diesen Kurs mssen Sie ber die folgenden Kenntnisse verfgen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Fr diesen Kurs mssen die folgenden Voraussetzungen erfllt werden: Erfahrung im Verwenden des Microsoft Windows 2000-Betrriebssystems fr folgende Aufgaben: Herstellen von Verbindungen zwischen Clients unter Windows 2000 mit Netzwerken und dem Internet. Konfigurieren der Windows 2000-Umgebung. Erstellen und Verwalten von Benutzerkonten. Verwalten des Zugriffs auf Ressourcen mit Hilfe von Gruppen. Konfigurieren und Verwalten von Datentrgern und Partitionen, einschlielich Datentrgerstriping und -spiegelung. Verwalten von Daten mit Hilfe des NTFS-Dateisystems. Implementieren von Windows 2000-Sicherheit. Optimieren der Leistung in Windows 2000. Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten in den folgenden Kursen erwerben: Kurs 2046, Microsoft Windows 2000 - Grundlagen zum Netzwerk und Betriebssystem Kurs 2054, Implementieren von Microsoft Windows 2000 Professional und Server

Einfhrung

Kenntnisse der grundlegenden Konzepte relationaler Datenbanken, einschlielich folgender Kenntnisse: Logischer und physischer Datenbankentwurf. Konzepte der Datenintegritt. Beziehungen zwischen Tabellen und Spalten (Primrschlssel und Fremdschlssel, 1:1, 1:n, n:n). Speichern von Daten in Tabellen (Zeilen und Spalten). Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten im folgenden Kurs erwerben: Kurs 1609, Designing Data Services and Data Models Kenntnisse der grundlegenden Transact-SQL-Syntax (SELECT-, UPDATEund INSERT-Anweisungen). Kursteilnehmer, die diese Voraussetzungen nicht erfllen, knnen die erforderlichen Kenntnisse und Fhigkeiten im folgenden Kurs erwerben: Kurs 2316A, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL Kenntnis der Rolle des Datenbankadministrators.

Einfhrung

Kursbeschreibung
Geben Sie eine bersicht ber die einzelnen Unterrichtseinheiten und Lernziele.

Thema

Unterrichtseinheit 1: bersicht ber SQL Server Unterrichtseinheit 2: bersicht ber die SQL ServerProgrammierung Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen Unterrichtseinheit 5: Implementieren der Datenintegritt Unterrichtseinheit 6: Planen von Indizes Unterrichtseinheit 7: Erstellen und Verwalten von Indizes Unterrichtseinheit 8: Implementieren von Sichten

Einstieg

In diesem Kurs werden folgende Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Geben Sie eine kurze Beschreibung jeder Unterrichtseinheit. Gehen Sie bei der Beschreibung der einzelnen Unterrichtseinheiten auf alle Bereiche ein, die den zuvor geuerten Erwartungen der Kursteilnehmer entsprechen.

Unterrichtseinheit 1, bersicht ber SQL Server, gibt eine allgemeine bersicht ber die Plattformen, die Architektur, die Komponenten und die Sicherheit von Microsoft SQL Server 2000. Auerdem werden wichtige Begriffe und Konzepte zu SQL Server behandelt und definiert. In dieser Unterrichtseinheit wird erlutert, wie gut SQL Server in Windows 2000 und in andere Serveranwendungen von Microsoft integriert werden kann. Die Unterrichtseinheit endet mit einer bersicht ber die SQL Server-Verwaltung und die SQL Server-Datenbankimplementierung sowie ber Entwurfsoptionen fr Anwendungen. Unterrichtseinheit 2, bersicht ber die SQL Server-Programmierung, gibt den Kursteilnehmern eine bersicht ber die Anwendungsarchitektur auf Organisationsebene und Transact-SQL als Programmiersprache. Transact-SQL ist eine Datendefinitions-, Datenbearbeitungs- und Datensteuerungssprache. Bei den Kursteilnehmern werden Kenntnisse in Bezug auf ANSI-SQL und grundlegende Programmierkonzepte wie Funktionen, Operatoren, Variablen und Ablaufsteuerungsanweisungen vorausgesetzt. Den Kursteilnehmern werden darber hinaus die verschiedenen Methoden zum Ausfhren von Transact-SQL vermittelt. Unterrichtseinheit 3, Erstellen und Verwalten von Datenbanken, beschreibt, wie eine Datenbank erstellt wird, wie Datenbankoptionen festgelegt und Dateigruppen erstellt werden und wie eine Datenbank und das Transaktionsprotokoll verwaltet werden. Auerdem wird behandelt, wie Speicherplatz reserviert wird und wie das Transaktionsprotokoll Datennderungen aufzeichnet. Unterrichtseinheit 4, Erstellen von Datentypen und Tabellen, erlutert, wie Datentypen und Tabellen erstellt und Transact-SQL-Skripts generiert werden, die Anweisungen enthalten, mit denen eine Datenbank und deren Objekte erstellt werden.

Einfhrung

Unterrichtseinheit 5, Implementieren der Datenintegritt, stellt zentral verwaltete Datenintegritt als einen Vorteil relationaler Datenbanken dar. Diese Unterrichtseinheit beginnt mit einer Einfhrung in die Konzepte der Datenintegritt, einschlielich der Methoden, die zum Erzwingen der Datenintegritt verfgbar sind. Dann wird ein Abschnitt zu Einschrnkungen behandelt. Einschrnkungen stellen die zentrale Methode zum Sicherstellen der Datenintegritt dar. Die Erstellung, die Implementierung und das Deaktivieren von Einschrnkungen wird erlutert. Die Unterrichtseinheit behandelt weiterhin Standardwerte und Regeln, die eine alternative Methode zum Erzwingen der Datenintegritt bereitstellen. Die Unterrichtseinheit endet mit einem Vergleich der unterschiedlichen Methoden zum Erzwingen der Datenintegritt. Unterrichtseinheit 6, Planen von Indizes, gibt den Kursteilnehmern eine bersicht ber das Planen von Indizes. Es wird erlutert, wie Indizes die Datenbankleistung verbessern knnen. Auerdem wird beschrieben, wie gruppierte und nicht gruppierte Indizes in SQL Server gespeichert werden und wie SQL Server mit Hilfe von Indizes Zeilen abruft. Weiterhin wird gezeigt, wie SQL Server Indizes verwaltet. Abschlieend werden die Richtlinien beschrieben, mit deren Hilfe entschieden werden kann, welche Spalten indiziert werden sollen. Unterrichtseinheit 7, Erstellen und Verwalten von Indizes, gibt den Kursteilnehmern eine bersicht ber das Erstellen und Verwalten von Indizes mit den CREATE INDEX-Optionen. Es wird erlutert, wie Indizes mit Wartungsverfahren physisch gendert werden. In der Unterrichtseinheit werden Wartungstools behandelt und die Verwendung von Statistiken wird beschrieben. Darber hinaus werden Mglichkeiten aufgezeigt, um zu prfen, ob Indizes verwendet werden, und es wird erklrt, wie festgestellt werden kann, ob die Indizes eine optimale Leistung aufweisen. Die Unterrichtseinheit schliet mit einer Erklrung, wann der Indexoptimierungs-Assistent eingesetzt werden sollte. Unterrichtseinheit 8, Implementieren von Sichten, zeigt, wie Sichten das Speichern einer vordefinierten Abfrage als Objekt in der Datenbank ermglichen, um es zu einem spteren Zeitpunkt zu verwenden. Sie bieten eine einfache Mglichkeit, vertrauliche Daten zu schtzen oder die Komplexitt einer Datenbankstruktur zu verbergen und Informationen bereitzustellen, ohne dass die Benutzer Transact-SQL-Anweisungen schreiben und ausfhren mssen. In der Unterrichtseinheit werden auerdem Sichten und deren Vorteile definiert. Im weiteren Verlauf der Unterrichtseinheit wird beschrieben, wie Sichten erstellt werden, und es werden Beispiele fr Projektionen und Verknpfungen bereitgestellt. Die Beispiele zeigen, wie berechnete Spalten und integrierte Funktionen in die Sichtdefinitionen eingeschlossen werden. Anschlieend behandelt die Unterrichtseinheit Einschrnkungen beim ndern von Daten durch Sichten. Im letzten Abschnitt wird erlutert, wie Sichten die Leistung verbessern knnen.

Einfhrung

Kursbeschreibung (Fortsetzung)
Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen Unterrichtseinheit 11: Implementieren von Triggern Unterrichtseinheit 12: Programmieren fr mehrere Server Unterrichtseinheit 13: Optimieren der Abfrageleistung Unterrichtseinheit 14: Analysieren von Abfragen Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Unterrichtseinheit 9, Implementieren gespeicherter Prozeduren, beschreibt die Verwendung gespeicherter Prozeduren, um den Entwurf und die Leistung von Anwendungen zu verbessern, indem Geschftsregeln gekapselt werden. Es werden Verfahren zum Verarbeiten hufig verwendeter Abfragen und Datennderungen erlutert. In der Unterrichtseinheit werden viele Beispiele und Vorfhrungen zu gespeicherten Prozeduren bereitgestellt. Unterrichtseinheit 10, Implementieren von benutzerdefinierten Funktionen, erlutert die Implementierung benutzerdefinierter Funktionen. Es werden die drei Arten von benutzerdefinierten Funktionen und die allgemeine Syntax zum Erstellen und ndern der Funktionen erlutert. Auerdem wird zu jeder Art ein Beispiel gegeben. Unterrichtseinheit 11, Implementieren von Triggern, zeigt, dass Trigger hilfreiche Tools fr Datenbankimplementierer sind, die vordefinierte Aktionen ausfhren mchten, sobald aus einer bestimmten Tabelle Daten eingefgt, aktualisiert oder gelscht werden. Sie eignen sich besonders fr das Kaskadieren von nderungen ber andere Tabellen in der Datenbank, whrend die komplexe referenzielle Integritt erhalten bleibt. Unterrichtseinheit 12, Programmieren fr mehrere Server, gibt den Kursteilnehmern Informationen, wie Sicherheit fr eine Multiserverumgebung entworfen wird. Es wird auerdem beschrieben, wie verteilte Abfragen, verteilte Transaktionen und partitionierte Sichten erstellt werden. Unterrichtseinheit 13, Optimieren der Abfrageleistung, vermittelt den Kursteilnehmern, wie der Abfrageoptimierer arbeitet, wie Abfrageplaninformationen abgerufen werden und wie Indizierungsstrategien implementiert werden.

Einfhrung

Unterrichtseinheit 14, Analysieren von Abfragen, beschreibt, wie der Abfrageoptimierer Abfragen auswertet und verarbeitet, die den AND-Operator und den OR-Operator sowie Verknpfungsoperationen enthalten. Unterrichtseinheit 15, Verwalten von Transaktionen und Sperren, stellt dar, wie Transaktionen und Sperren die Integritt von Transaktionen bei gleichzeitiger Verwendung sicherstellen. Anschlieend folgt eine Diskussion darber, wie Transaktionen ausgefhrt werden und wie ein Rollback fr die Transaktion ausgefhrt wird. Eine kurze Animation soll verdeutlichen, wie die Transaktionsverarbeitung abluft. Als Nchstes wird beschrieben, wie SQL Server 2000-Sperren die Datenkonsistenz und Parallelitt aufrechterhalten. Es werden dann Ressourcen, die gesperrt werden knnen, verschiedene Typen von Sperren und die Kompatibilitt von Sperren vorgestellt. Dann folgt eine Diskussion zu dynamischen Sperren von SQL Server basierend auf dem Schema und der Abfrage. Im letzten Abschnitt werden einige Sperroptionen erlutert, Deadlocks beschrieben, und es wird erklrt, wie Informationen zu aktiven Sperren angezeigt werden.

Einfhrung

Installation
Thema
Geben Sie die notwendigen Informationen zur Schulungsraumumgebung.

Software Kursdateien Einrichten des Schulungsraumes

Einstieg

Die Schulungsraumumgebung wurde mit Software und einem Pfad zu Kursdateien eingerichtet, die Sie im Verlauf des Kurses verwenden werden. Sie sollten auerdem die Schulungsraumkonfiguration beachten, in der Sie die bungseinheiten durchfhren werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Schulungsraumumgebung wurde mit Software und einem Pfad zu Kursdateien eingerichtet, die Sie im Verlauf des Kurses verwenden werden. Sie sollten auerdem die Schulungsraumkonfiguration beachten, in der Sie die bungseinheiten durchfhren werden.

Software
Die folgenden Software wird im Schulungsraum verwendet: Microsoft Windows 2000 Advanced Server Microsoft SQL Server 2000 Enterprise Edition

Kursdateien
Zu den bungseinheiten des Kurses gehren Dateien. Diese Dateien befinden sich in C:\Moc\2328A\Labfiles auf den Kursteilnehmercomputern.

10

Einfhrung

Einrichten des Schulungsraumes


Der Schulungsraum ist im einfachen Domnen/Arbeitsgruppenmodell konfiguriert, wie in der nachfolgenden Grafik dargestellt.

Auf jedem Kursteilnehmercomputer ist Windows 2000 Advanced Server als eigenstndiger Server einer Arbeitsgruppe installiert. Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London.

Einfhrung

11

Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

12

Einfhrung

Microsoft Official Curriculum


Beschreiben Sie das MOCProgramm, und stellen Sie Informationen zu den Curriculum-Pfaden bereit.

Thema

Einstieg

Sprechen wir kurz ber das Microsoft Official Curriculum-Programm.

Betriebssysteme der Microsoft WindowsFamilie Microsoft Office Microsoft BackOffice Small Business Server Microsoft SQL Server Microsoft Exchange

Microsoft BackOffice Server-Infrastruktur und -Lsungen Microsoft FrontPage Microsoft Systems Management Server Knowledge ManagementLsungen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei MOC handelt es sich um praxisorientierte, in einem Schulungsraum durchgefhrte, webbasierte Schulungen. Microsoft entwickelt auf die Vermittlung von Fhigkeiten ausgerichtete Schulungen fr Computerexperten, die mit Hilfe von Microsoft-Produkten, -Lsungen und -Technologien Lsungen entwickeln, untersttzen und implementieren. MOC-Kurse stehen fr die folgenden Produkte und Lsungen zur Verfgung: Betriebssysteme der Microsoft Windows-Familie Microsoft Office Microsoft BackOffice Small Business Server Microsoft SQL Server Microsoft Exchange Microsoft BackOffice Server-Infrastruktur und -Lsungen Microsoft FrontPage Microsoft Systems Management Server Knowledge Management-Lsungen MOC stellt einen Curriculum-Pfad fr jedes Produkt und jede Lsung zur Verfgung. Weitere Informationen zu den Curriculum-Pfaden finden Sie auf der MOC-Webseite unter der folgenden Adresse: http://www.microsoft.com/train_cert/moc/ Auf der MOC-Webseite werden Informationen zu den MOC-Kursen bereitgestellt. Darber hinaus finden Sie auf dieser Seite empfohlene Curriculum-Pfade fr Benutzer, die in die IT-Industrie (Information Technology) einsteigen, die die Schulung zu Microsoft-Produkten und -Lsungen fortsetzen mchten oder die zurzeit Produkte untersttzen, die nicht von Microsoft stammen.

Einfhrung

13

Microsoft Certified Professional-Programm


Informieren Sie die Kursteilnehmer ber das Microsoft Certified Professional-Programm.

Thema

Microsoft Certified Systems Engineer (MCSE) Microsoft Certified Database Administrator (MCDBA) Microsoft Certified Solution Developer (MCSD) Microsoft Certified Professional + Site Building (MCP + Site Building) Microsoft Certified Professional (MCP) Microsoft Certified Trainer (MCT)

Einstieg

Das Microsoft Certified Professional-Programm verfgt ber die folgenden Zertifizierungen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Microsoft Certified Professional-Programm (MCP) ist die beste Mglichkeit, um Ihre Kompetenz als Experte von Microsoft-Produkten und -Technologien zu belegen. In der folgenden Tabelle werden die Zertifizierungen ausfhrlich erlutert.
Zertifizierung Microsoft Certified Systems Engineer (MCSE) Microsoft Certified Database Administrator (MCDBA) Beschreibung MCSEs verfgen ber die Qualifikation, Informationssysteme in einer Vielzahl von Computerumgebungen unter Windows 2000 und BackOffice effizient zu planen, zu implementieren, zu verwalten und zu untersttzen. MCDBAs verfgen ber die Qualifikation zum Erstellen physischer Datenbankentwrfe, Entwickeln logischer Datenmodelle, Erstellen physischer Datenbanken, Erstellen von Datendiensten mit Hilfe von Transact-SQL, Verwalten und Pflegen von Datenbanken, Konfigurieren und Verwalten der Sicherheit, berwachen und Optimieren von Datenbanken sowie zum Installieren und Konfigurieren von SQL Server. MCSDs verfgen ber die Qualifikation, mit Hilfe von Microsoft-Produkten, wie z. B. SQL Server, Microsoft Visual Studio und Komponentendienste, webbasierte, verteilte und fr den Handel einsetzbare Anwendungen zu erstellen. MCPs mit einer Spezialisierung im Bereich Sitebuilding sind qualifiziert, Websites mit Microsoft-Technologien und -Produkten zu planen, zu erstellen, zu warten und zu verwalten. MCPs verfgen ber detaillierte Kenntnisse zu mindestens einem Produkt. Diese Kenntnisse mssen in einer beliebigen Prfung (ausgenommen Netzwerkgrundlagen) nachgewiesen werden. MCTs verfgen ber spezielle didaktische und technische Fhigkeiten, die sie dazu qualifizieren, das Microsoft Official Curriculum (MOC) in Microsoft Certified Technical Education Centers (Microsoft CTECs) zu unterrichten.

Microsoft Certified Solution Developer (MCSD) Microsoft Certified Professional + Site Building (MCP + Site Building) Microsoft Certified Professional (MCP) Microsoft Certified Trainer (MCT)

14

Einfhrung

Zertifizierungsanforderungen
Die Zertifizierungsanforderungen unterscheiden sich je nach Zertifizierungsart und orientieren sich an den Produkten und Ttigkeiten, fr die die jeweilige Zertifizierung gilt. Um den Status eines Microsoft Certified Professionals zu erlangen, mssen Sie strenge Zertifizierungsprfungen absolvieren, die eine gltige und zuverlssige Messung der technischen Fertigkeiten und Sachkenntnisse zulassen. Weitere Informationen Weitere Informationen finden Sie im Abschnitt Microsoft Training und Zertifizierung der auf der CD bereitgestellten Webseite oder in der Website zu Microsoft Training und Zertifizierung unter der folgenden Adresse: http://www.microsoft.com/germany/training/ Falls Sie besondere Fragen zur Zertifizierung haben, knnen Sie auch eine E-Mail an die folgende Adresse senden: mcp@msprograms.com

Vorbereiten auf eine MCP-Prfung


Mit MOC knnen Sie sich auf MCP-Prfungen vorbereiten. Es besteht jedoch keine 1:1-Entsprechung zwischen den Inhalten der MOC-Kurse und den Inhalten der MCP-Prfungen. Microsoft sieht das MOC nicht als einziges Vorbereitungstool fr das Bestehen einer MCP-Prfung an. Praktische Produktkenntnisse und -erfahrungen sind fr das Bestehen einer MCP-Prfung ebenfalls erforderlich. Als Untersttzung bei den Vorbereitungen auf die MCP-Prfungen knnen Sie die Leitfden zur Vorbereitung verwenden, die fr jede Prfung zur Verfgung stehen. Alle Leitfden zur Prfungsvorbereitung enthalten prfungsspezifische Informationen, wie beispielsweise eine Liste der Themen, zu denen Sie geprft werden. Diese Leitfden sind in der Microsoft Certified Professional-Website unter der folgenden Adresse verfgbar: http://www.microsoft.com/train_cert/moc/

Einfhrung

15

Einrichtungen
Thema
Informieren Sie die Kursteilnehmer ber die rtlichen Einrichtungen und die zu beachtenden Regeln auf dem Schulungsgelnde.
Kurszeiten

ffnungszeiten

Telefone

Einstieg

Bevor wir mit der Schulung beginnen, mchte ich Sie ber die Einrichtungen im Schulungsgebude informieren.

Parkpltze

Nachrichten

Toiletten

Raucherzonen

Kantine

Recycling

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Informieren Sie die Kursteilnehmer ber die Kurszeiten, Mahlzeiten, ffnungszeiten des Gebudes fr die Bearbeitung der bungseinheiten, Parkmglichkeiten, Toiletten, Raucherzonen, Telefone und Mglichkeiten zur bermittlung von Nachrichten. Informieren Sie die Kursteilnehmer gegebenenfalls auch ber das Recyclingprogramm.

Einfhrung

This page is intentionally left blank.

Unterrichtseinheit 1: bersicht ber SQL Server


Inhalt bersicht Informationen zu SQL Server SQL Server-Integration SQL Server-Datenbanken SQL Server-Sicherheit Arbeiten mit SQL Server bungseinheit A: bersicht ber SQL Server Lernzielkontrolle 1 2 12 18 28 35 44 50

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 1: bersicht ber SQL Server

iii

Hinweise fr den Kursleiter


Prsentation: 60 Minuten bungseinheit: 30 Minuten Diese Unterrichtseinheit gibt eine allgemeine bersicht ber die Plattformen, die Architektur, die Komponenten und die Sicherheit von Microsoft SQL Server 2000. Auerdem werden wichtige Begriffe und Konzepte zu SQL Server behandelt und definiert. In dieser Unterrichtseinheit wird erlutert, wie gut SQL Server in Microsoft Windows 2000 und in andere Serveranwendungen von Microsoft integriert werden kann. Die Unterrichtseinheit endet mit einer bersicht ber Verwaltungs- und Implementierungsaktivitten fr die SQL Server-Datenbank sowie mit Entwurfsoptionen fr SQL Server-Anwendungen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben von SQL Server 2000 und den untersttzten Betriebssystemplattformen. Beschreiben der SQL Server-Integration in Windows 2000 und in andere Serveranwendungen. Beschreiben von SQL Server-Datenbanken. Beschreiben der SQL Server-Sicherheit. Beschreiben der Verwaltungs- und Implementierungsaktivitten fr die SQL Server-Datenbank sowie der Entwurfsoptionen fr SQL ServerAnwendungen.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_01.ppt Die Beispieldatei C:\Moc\2328A\Demo\D01_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 1: bersicht ber SQL Server

Sonstige Aktivitten
In diesem Abschnitt werden Verfahren bereitgestellt, mit denen interaktive Aktivitten zum Anzeigen und berprfen von Informationen implementiert werden, wie Spiele oder bungen mit Rollenspielen.

Anzeigen der PowerPoint-Animationen


Alle Animationen sind durch ein Hyperlinksymbol in der unteren linken Ecke der Folie gekennzeichnet. So zeigen Sie die Folie Client/Server-Kommunikationsprozess an Auf dieser Folie wird gezeigt, wie SQL Server eine Abfrage verarbeitet. 1. Zeigen Sie die Folie mit dem Thema an, auf der die Clientanwendung eine Abfrage sendet. Der Client ruft die Datenbank-API (Application Programming Interface, Schnittstelle fr Anwendungsprogrammierung) auf und bergibt die Abfrage. Die Datenbank-API verwendet einen Provider, Treiber oder eine DLL (Dynamic Link Library), um die Abfrage in ein oder mehrere TDS-Pakete (Tabular Data Stream) einzuschlieen und an die Client-Netzwerkbibliothek zu bergeben. 2. Fahren Sie mit der ersten Animation fort, bei der die Client-Netzwerkbibliothek die TDS-Pakete in Netzwerkprotokoll-Pakete verpackt. Die Client-Netzwerkbibliothek ruft eine prozessbergreifende KommunikationsAPI (Interprocess Communication, IPC) von Windows auf, um die Netzwerkprotokoll-Pakete mit Hilfe des Netzwerkprotokoll-Stacks des Betriebssystems an eine Server-Netzwerkbibliothek zu senden. Die entsprechende Server-Netzwerkbibliothek extrahiert die TDS-Pakete aus den Netzwerkprotokoll-Paketen und bergibt die TDS-Pakete an Open Data Services. 3. Fahren Sie mit der nchsten Animation fort, bei der Open Data Services die Abfrage aus den TDS-Paketen extrahiert und die Abfragen an das relationale Modul bergibt. Das relationale Modul kompiliert dann die Abfrage in einen optimierten Ausfhrungsplan. Der Ausfhrungsplan wird ausgefhrt. Das relationale Modul kommuniziert mit dem Speichermodul mit Hilfe der OLE DB-Schnittstelle. 4. Fahren Sie mit der nchsten Animation fort, bei der das Speichermodul Daten aus einer Datenbank an Datenpuffer bertrgt und dann Rowsets mit Daten an das relationale Modul bergibt. Das relationale Modul kombiniert die Rowsets zum endgltigen Resultset und bergibt das Resultset an Open Data Services. 5. Fahren Sie mit der letzten Animation fort, bei der Open Data Services die Resultsets verpackt und sie mit Hilfe einer Server-Netzwerkbibliothek, des Netzwerkprotokoll-Stacks, der Client-Netzwerkbibliothek und der Datenbank-API an die Clientanwendung zurckgibt.

Unterrichtseinheit 1: bersicht ber SQL Server

So zeigen Sie die Folie Datenbankobjekte an Diese Folie veranschaulicht die SQL Server-Datenbankobjekte und stellt detaillierte Definitionen zu allen Objekten bereit. Beachten Sie, dass diese Informationen auf einer fiktiven Datenbank basieren. 1. Zeigen Sie die Folie an, zuerst wird eine Abbildung der Employee-Tabelle angezeigt. 2. Zeigen Sie das nchste Bild an, in dem die vom System angegebenen und benutzerdefinierten Datentypen angezeigt werden, die den Spalten zugewiesen sind. 3. Zeigen Sie das nchste Bild mit den drei Einschrnkungstypen an. Definieren Sie kurz PRIMARY KEY-, FOREIGN KEY- und CHECKEinschrnkungen. Stellen Sie auerdem die DEFAULT-Einschrnkung vor (obwohl sie nicht angezeigt wird), und nennen Sie Regeln und Standardwerte. 4. Zeigen Sie das nchste Bild an, auf dem der gruppierte Index fr die LastName-Spalte angezeigt wird. Definieren Sie kurz den Unterschied zwischen gruppierten und nicht gruppierten Indizes. Andere Indizes, die Sie wahrscheinlich fr diese Tabelle erstellen werden, schlieen einen nicht gruppierten Index fr die CtryCode-Spalte mit der FOREIGN KEYEinschrnkung und einen eindeutigen, nicht gruppierten Index fr die EmpNum-Spalte ein (als PRIMARY KEY definiert wurde). 5. Zeigen Sie das nchste Bild an, auf dem die Definition der EmployeePhoneView-Sicht angezeigt wird. 6. Zeigen Sie das nchste Bild an, auf dem ein Quadrat ber der ExtensionSpalte angezeigt wird. Dieses Quadrat zeigt an, dass eine gespeicherte Prozedur zum Aktualisieren der Durchwahl eines Angestellten geschrieben werden kann. 7. Zeigen Sie das letzte Bild an. Auf diesem Bild zeigt ein Quadrat ber der LastMod-Spalte an, dass ein berwachungstrigger definiert wurde. Der Trigger aktualisiert den Wert automatisch mit dem Namen des Benutzers, der die Tabellenzeile zuletzt gendert hat.

vi

Unterrichtseinheit 1: bersicht ber SQL Server

Strategie fr die Unterrichtseinheit


Diese Unterrichtseinheit ist in zwei Kursen enthalten: Kurs 2322A, Verwalten einer Microsoft SQL Server 2000-Datenbank, und Kurs 2328A, Programmieren einer Microsoft SQL Server 2000-Datenbank. Bestimmen Sie den Kenntnisstand der Kursteilnehmer, und verwenden Sie dann diese Informationen, um die Prsentation dieser Unterrichtseinheit entsprechend anzupassen. Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Informationen zu SQL Server Stellen Sie SQL Server vor. Erlutern Sie die Skalierbarkeit von SQL Server und die Funktion eines relationalen Datenbank-Managementsystems (RDBMS). Weisen Sie darauf hin, dass Benutzer zwei Datenbanktypen verwalten: OLTP-Datenbanken (Online Transaction Processing, Onlinetransaktionsverarbeitung) und OLAP-Datenbanken (Online Analytical Processing, Analytische Onlineverarbeitung). Betonen Sie, dass der Schwerpunkt dieses Kurses auf Aktivitten mit OLTP-Datenbanken und Transact-SQL liegt. Weisen Sie darauf hin, dass Benutzer auf SQL Server und SQL Server 2000 Analysis Services nicht direkt zugreifen, sondern gesonderte Clientanwendungen verwenden, die fr das Zugreifen auf Daten geschrieben wurden. Beschreiben Sie kurz die Clientanwendungen, die auf SQL Server zugreifen. Beschreiben Sie die Komponenten des Client/Server-Kommunikationsprozesses und die Funktion der Komponenten. Weisen Sie darauf hin, dass die Client-Netzwerkbibliothek mit einer der Server-Netzwerkbibliotheken bereinstimmen muss. Zeigen Sie die Folie Client/Server-Kommunikationsprozess an. Beschreiben Sie die SQL Server-Dienste. SQL Server-Integration Beschreiben Sie SQL Server und die untersttzten Betriebssysteme. Weisen Sie darauf hin, dass Internetbrowser und Anwendungen von Drittanbietern, die unter verschiedenen Betriebssystemen ausgefhrt werden, auch auf SQL Server zugreifen knnen. Beschreiben Sie die SQL Server-Integration in Windows 2000 und in andere Serveranwendungen von Microsoft. Erlutern Sie die Integration von SQL Server in bestimmte Features von Windows 2000.

Unterrichtseinheit 1: bersicht ber SQL Server

vii

SQL Server-Datenbanken Weisen Sie darauf hin, dass Kenntnisse in Bezug auf die SQL Server-Datenbankstruktur dem Benutzer beim effizienten Entwickeln und Implementieren einer Datenbank helfen. Stellen Sie die beiden SQL Server-Datenbanktypen vor. Erlutern Sie, dass in Systemtabellen Informationen zum System oder zu Objekten in einer Datenbank gespeichert sind. Beschreiben Sie kurz die Funktion der einzelnen Datenbanken, und stellen Sie dann mehrere typische Entwrfe fr Benutzerdatenbanken dar. Weisen Sie darauf hin, dass SQL Server mehrere Instanzen untersttzt. Betonen Sie, dass das Lschen der msdb-Datenbank die meisten Funktionen des SQL Server-Agents entfernt. Erlutern und kommentieren Sie die Animation, die eine detaillierte Definition der SQL Server-Datenbankobjekte bereitstellt. Beachten Sie, dass die Informationen der Abbildung fiktiv sind und nur als Unterrichtsbeispiel dienen. Fassen Sie die einzelnen Datenbankobjekte zusammen und beschreiben Sie sie. Unterscheiden Sie dabei zwischen vom System angegebenen und benutzerdefinierten Datentypen und zwischen gruppierten und nicht gruppierten Indizes. Eine ausfhrliche Erluterung der Metadaten finden die Kursteilnehmer in der SQL Server-Onlinedokumentation. Weisen Sie darauf hin, dass das Schreiben von Skripts, die Systemtabellen direkt abfragen, nicht empfehlenswert ist. Die Kursteilnehmer sollten Informationsschemasichten anstelle von Systemtabellen verwenden. Weisen Sie darauf hin, dass Systemfunktionen bestimmte Einzelwerte zurckgeben. Erklren Sie auerdem, dass Informationsschemasichten in SQL Server dem ANSI SQL-Standard (American National Standards Institute) entsprechen und mehrere Werte erzeugen. SQL Server-Sicherheit Weisen Sie darauf hin, dass Benutzer in SQL Server auf zwei Sicherheitsstufen berprft werden: Anmeldeauthentifizierung und Berechtigungsberprfung fr Datenbank-Benutzerkonten und Datenbankrollen. Beschreiben Sie, wie SQL Server Anmeldekonten authentifiziert. Weisen Sie darauf hin, dass ein Benutzer fr die Verbindung mit SQL Server ein Anmeldekonto bentigt. Erlutern Sie den Unterschied zwischen Windows 2000-Authentifizierung und SQL Server-Authentifizierung sowie zwischen Windows-Authentifizierungsmodus und gemischtem Modus. Mglicherweise finden die Kursteilnehmer die Authentifizierungsmodi und -mechanismen verwirrend. Erlutern Sie deshalb, dass der Server in einem bestimmten Authentifizierungsmodus ausgefhrt wird und dass ein Client, der eine Verbindung mit einem im gemischten Modus ausgefhrten Server herstellt, einen Authentifizierungsmechanismus auswhlen muss. Beschreiben Sie, wie SQL Server Anmeldeauthentifizierung zu Benutzerkonten und Rollen zuordnet. Weisen Sie auf den Unterschied zwischen Rollen auf Serverebene und Datenbankebene und auf die entsprechenden Berechtigungen hin. Besprechen Sie, wie SQL Server Berechtigungen berprft.

viii

Unterrichtseinheit 1: bersicht ber SQL Server

Arbeiten mit SQL Server Erlutern Sie, wann Skripts oder grafische Tools zum Arbeiten mit SQL Server verwendet werden. Nennen Sie Beispiele. Identifizieren Sie kurz allgemeine Verwaltungsaufgaben beim Verwalten von SQL Server. Fhren Sie kurz SQL Server Enterprise Manager, SQL Query Analyzer und osql vor. Beschreiben Sie die verschiedenen Mglichkeiten der Hilfe von SQL Server. Identifizieren Sie kurz typische Aktivitten beim Implementieren einer Datenbank. Vergleichen Sie mehrere physische Architekturen und logische Softwareanwendungsentwrfe, die beim Planen einer Datenbank verfgbar sind. Weisen Sie darauf hin, dass auf der Folie nur die hufigsten Architekturentwrfe und Bereitstellungsoptionen dargestellt werden. Weisen Sie darauf hin, dass sich die Softwareanwendung bei jedem Entwurf physisch auf einem oder auf mehreren Servern befinden kann. Beschreiben Sie kurz die einzelnen Optionen zur Anwendungsbereitstellung, und erlutern Sie die Beispiele. Beschreiben Sie die APIs, die beim Entwickeln einer relationalen Datenbankanwendung zur Verwendung mit SQL Server verwendet werden. Eine ausfhrliche Erluterung der Programmierschnittstellen finden die Kursteilnehmer in der SQL Server-Onlinedokumentation.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Es gibt keine Anforderungen zum Einrichten der bungseinheit, die die Replikation oder die Anpassung betreffen.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

Unterrichtseinheit 1: bersicht ber SQL Server

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Informationen zu SQL Server SQL Server-Integration SQL Server-Datenbanken SQL Server-Sicherheit Arbeiten mit SQL Server

Einstieg

In dieser Unterrichtseinheit werden die Architektur, die Komponenten, die Begriffe und die Konzepte von SQL Server besprochen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit gibt eine allgemeine bersicht ber die Plattformen, die Architektur, die Komponenten und die Sicherheit von Microsoft SQL Server 2000. Auerdem werden wichtige Begriffe und Konzepte zu SQL Server behandelt und definiert. In dieser Unterrichtseinheit wird erlutert, wie SQL Server in Microsoft Windows 2000 und in andere Serveranwendungen von Microsoft integriert werden kann. Die Unterrichtseinheit endet mit einer bersicht ber Verwaltungs- und Implementierungsaktivitten fr die SQL Server-Datenbank sowie mit Entwurfsoptionen fr SQL Server-Anwendungen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben von SQL Server 2000 und den untersttzten Betriebssystemplattformen. Beschreiben der SQL Server-Integration in Windows 2000 und in andere Serveranwendungen. Beschreiben von SQL Server-Datenbanken. Beschreiben der SQL Server-Sicherheit. Beschreiben der Verwaltungs- und Implementierungsaktivitten fr die SQL Server-Datenbank sowie der Entwurfsoptionen fr SQL ServerAnwendungen.

Unterrichtseinheit 1: bersicht ber SQL Server

Informationen zu SQL Server


Thema
Stellen Sie das Thema dar.

Einstieg

Sie verwenden SQL Server zum Verwalten von zwei Datenbanktypen.

Einfhrung in SQL Server Client/Server-Komponenten Client/Server-Kommunikationsprozess SQL Server-Dienste

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie verwenden SQL Server zum Verwalten von zwei Datenbanktypen: OLTPDatenbanken (Online Transaction Processing, Onlinetransaktionsverarbeitung) und OLAP-Datenbanken (Online Analytical Processing, Analytische Onlineverarbeitung). Normalerweise greifen voneinander getrennte Clients auf die Datenbanken zu, indem sie ber ein Netzwerk kommunizieren. Durch die Skalierbarkeit kann SQL Server fr Datenbanken mit bis zu mehreren Terabyte und auch fr kleine Unternehmensserver und tragbare Computer verwendet werden. Mit Hilfe von Windows Clustering in Windows 2000 knnen Sie SQL Server auf mehreren Servern dezentral skalieren.

Unterrichtseinheit 1: bersicht ber SQL Server

Einfhrung in SQL Server


Geben Sie eine Einfhrung in SQL Server.

Thema

Einstieg

Sie knnen SQL Server verwenden, um Transaktionsverarbeitung durchzufhren, um Daten zu speichern und zu analysieren und um neue Anwendungen zu erstellen.

Client

SQL Server
Ergebnisse Ergebnisse Anfrage Anfrage

OLTP OLAP

Clientanwendungen

Relationales DatenbankManagementsystem

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen SQL Server verwenden, um Transaktionsverarbeitung durchzufhren, um Daten zu speichern und zu analysieren und um neue Anwendungen zu erstellen. SQL Server ist eine Familie von Produkten und Technologien, mit denen die Anforderungen an die Datenspeicherung von OLTP- und OLAP-Umgebungen erfllt werden. SQL Server ist ein relationales Datenbank-Managementsystem (RDBMS), das Folgendes durchfhrt: Verwalten der Datenspeicherung fr Transaktionen und Analysen. Antworten auf Anforderungen von Clientanwendungen. Verwenden von Transact-SQL, XML (Extensible Markup Language), multidimensionalen Ausdrcken (Multidimensional Expressions, MDX) oder SQL Distributed Management Objects (SQL-DMO), um Anforderungen zwischen einem Client und SQL Server zu senden. Anmerkung Der Schwerpunkt dieses Kurses liegt auf Aktivitten mit OLTPDatenbanken und Transact-SQL. Methodischer Hinweis

Betonen Sie, dass der Schwerpunkt dieses Kurses auf Aktivitten mit OLTPDatenbanken und TransactSQL liegt.

Relationales Datenbank-Managementsystem
Das RDBMS von SQL Server ist fr Folgendes verantwortlich: Verwalten der Beziehungen zwischen Daten in einer Datenbank. Sicherstellen, dass die Daten ordnungsgem gespeichert und dass die Regeln nicht verletzt werden, die die Beziehungen zwischen den Daten definieren. Wiederherstellen aller Daten in einem konsistenten Zustand im Fall von Systemfehlern.

Unterrichtseinheit 1: bersicht ber SQL Server

Datenspeicherungsmodelle
SQL Server verwaltet OLTP- und OLAP-Datenbanken. OLTP-Datenbanken In einer OLTP-Datenbank werden Daten im Allgemeinen in relationalen Tabellen organisiert, um redundante Informationen zu reduzieren und die Geschwindigkeit von Aktualisierungen zu erhhen. Mit Hilfe von SQL Server knnen viele Benutzer Transaktionen durchfhren und gleichzeitig Echtzeitdaten in OLTP-Datenbanken ndern. Beispiele fr OLTP-Datenbanktypen sind Buchungssysteme von Fluggesellschaften und Banktransaktionssysteme. OLAP-Datenbanken Mit der OLAP-Technologie werden groe Datenmengen so organisiert und zusammengefasst, dass ein Analytiker Daten schnell und in Echtzeit auswerten kann. Mit Hilfe von SQL Server 2000 Analysis Services werden diese Daten so organisiert, dass eine Vielzahl von Unternehmenslsungen untersttzt wird, angefangen bei der Berichterstellung und Analyse bis hin zu Datenmodellierung und Entscheidungsfindung in Unternehmen.

Clientanwendungen
Benutzer greifen auf SQL Server und Analysis Services nicht direkt zu. Stattdessen verwenden Sie gesonderte Clientanwendungen, die fr das Zugreifen auf Daten geschrieben wurden. Diese Anwendungen verwenden fr das Zugreifen auf SQL Server Folgendes: Transact-SQL Diese Abfragesprache, eine Version von SQL (Structured Query Language), ist die wichtigste Abfrage- und Programmiersprache fr Datenbanken, die von SQL Server verwendet wird. XML Dieses Format gibt Daten von Abfragen und gespeicherten Prozeduren zurck, indem URLs (Uniform Resource Locators) oder Vorlagen ber HTTP (Hypertext Transfer Protocol) verwendet werden. Sie knnen XML auch zum Einfgen, Lschen und Aktualisieren von Werten in einer Datenbank verwenden. MDX Die MDX-Syntax definiert multidimensionale Objekte und Abfragen und ndert multidimensionale Daten in OLAP-Datenbanken. OLE DB- und ODBC-APIs Clientanwendungen verwenden OLE DB-APIs (Application Programming Interfaces, Schnittstellen fr Anwendungsprogrammierung) und ODBC-APIs (Open Database Connectivity), um Befehle an eine Datenbank zu senden. Befehle, die Sie ber diese APIs senden, verwenden die Sprache Transact-SQL.

Unterrichtseinheit 1: bersicht ber SQL Server

ActiveX Data Objects und ActiveX Data Objects (Multidimensional) Microsoft ActiveX Data Objects (ADO) und ActiveX Data Objects (Multidimensional) (ADO MD) umschlieen OLE DB fr die Verwendung in Sprachen wie z. B. Microsoft Visual Basic, Visual Basic fr Applikationen, Active Server Pages und Visual Basic Scripting fr Microsoft Internet Explorer. Sie verwenden ADO, um auf Daten in OLTP-Datenbanken zuzugreifen. Sie verwenden ADO MD, um auf Daten in Analysis Services-Datencubes zuzugreifen. English Query Diese Anwendung stellt eine Automatisierungs-API bereit, die es Benutzern ermglicht, Fragen zu Informationen in einer Datenbank in natrlicher Sprache (Englisch) zu formulieren, statt komplexe Transact-SQL- oder MDX-Anweisungen zu schreiben. Beispielsweise knnen Benutzer die Frage stellen: What are the total sales for Region 5? (Wie hoch ist der Gesamtumsatz in Region 5?)

Unterrichtseinheit 1: bersicht ber SQL Server

Client/Server-Komponenten
Thema
Beschreiben Sie die Komponenten des Client/ServerKommunikationsprozesses.
Clientanwendung Clientanwendung Datenbank-API Datenbank-API (OLE DB, ODBC, (OLE DB, ODBC, DB-Library) DB-Library) Client-Netzwerkbibliothek Client-Netzwerkbibliothek Client SQL Server SQL Server ServerServerNetzwerkbibliotheken Netzwerkbibliotheken Open Data Services Open Data Services Relationales Relationales Modul Modul Speichermodul Speichermodul Server

Einstieg

Diese Komponenten verwalten die Kommunikation zwischen Clients und SQL Server.

Prozessor Prozessor ArbeitsArbeitsspeicher speicher Lokale Datenbank

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server besteht aus Client- und Serverkomponenten, die Daten speichern und abrufen. In SQL Server wird eine Kommunikationsarchitektur mit mehreren Schichten verwendet, um Anwendungen vom zugrunde liegenden Netzwerk und den Protokollen zu isolieren. Dank dieser Architektur kann eine Anwendung in verschiedenen Netzwerkumgebungen bereitgestellt werden.

Client/Server-Architektur
SQL Server verwendet die Client/Server-Architektur, um die Arbeitslast in Tasks aufzuteilen, die auf Servercomputern bzw. auf Clientcomputern ausgefhrt werden. Der Client ist verantwortlich fr die Geschftslogik und das Prsentieren der Daten fr den Benutzer. Der Client wird normalerweise auf einem oder mehreren Computern ausgefhrt. Er kann aber auch zusammen mit SQL Server auf dem Servercomputer ausgefhrt werden. SQL Server verwaltet Datenbanken und ordnet die verfgbaren Serverressourcen, wie beispielsweise Arbeitsspeicher, Netzwerk-Bandbreite und Datentrgeroperationen, mehreren Anforderungen zu. Mit der Client/Server-Architektur knnen Sie Anwendungen entwerfen und bereitstellen, um eine Vielzahl von Umgebungen zu erweitern. ber Schnittstellen fr Clientprogrammierung knnen Anwendungen auf getrennten Clientcomputern ausgefhrt werden und ber ein Netzwerk mit dem Server kommunizieren. Anmerkung In diesem Kurs bezeichnet der Begriff Client eine Clientanwendung.

Unterrichtseinheit 1: bersicht ber SQL Server

Clientkomponenten
Zu den Clientkomponenten in der Kommunikationsarchitektur gehren die folgenden: Clientanwendung Eine Clientanwendung beendet Transact-SQL-Anweisungen und empfngt Resultsets. Sie entwickeln eine Anwendung mit Hilfe einer Datenbank-API. Die Anwendung hat keine Kenntnis von den zugrunde liegenden Netzwerkprotokollen fr die Kommunikation mit SQL Server. Methodischer Hinweis Datenbank-API Die Datenbank-API (OLE DB, ODBC) verwendet einen Provider, Treiber oder eine DLL (Dynamic Link Library), um Transact-SQLAnweisungen zu bergeben und Resultsets zu empfangen. Dies ist eine Schnittstelle, ber die eine Anwendung Anforderungen an SQL Server sendet und die Ergebnisse verarbeitet, die SQL Server zurckgibt. Anmerkung Einige Internetanwendungen werden in HTTP statt in eine Datenbank-API geschrieben. Client-Netzwerkbibliothek Eine Client-Netzwerkbibliothek verwaltet Netzwerkverbindungen und Routing auf einem Client. Dies ist eine Kommunikationssoftwarekomponente, die die Datenbankanforderungen und -ergebnisse fr die bertragung durch das entsprechende Netzwerkprotokoll zusammenstellt.

Weisen Sie darauf hin, dass die Client-Netzwerkbibliothek mit einer der ServerNetzwerkbibliotheken bereinstimmen muss.

Serverkomponenten
Zu den Serverkomponenten in der Kommunikationsarchitektur gehren die folgenden: Server-Netzwerkbibliotheken SQL Server kann gleichzeitig mehrere Netzwerkbibliotheken berwachen. Die Client-Netzwerkbibliothek muss mit einer der Server-Netzwerkbibliotheken bereinstimmen, um erfolgreich zu kommunizieren. SQL Server untersttzt u. a. die folgenden Netzwerkprotokolle: TCP/IP (Transmission Control Protocol/Internet Protocol), Named Pipes, NWLink, IPX/SPX (Internetwork Packet Exchange/Sequenced Packet Exchange), VIA ServerNet II SAN, VIA GigaNet SAN, Banyan VINES und AppleTalk. Open Data Services Durch Open Data Services sehen Datendienste fr einen Client wie SQL Server aus, indem eine Netzwerk-Schnittstelle fr das Verwalten von Netzwerkprotokoll-Prozessen und Serverroutinen bereitgestellt wird. Diese SQL Server-Komponente verwaltet Netzwerkverbindungen, bergibt Clientanforderungen an SQL Server zum Verarbeiten und gibt die Ergebnisse und Antworten an SQL Server-Clients zurck. Open Data Services fragt automatisch alle auf dem Server installierten Server-Netzwerkbibliotheken ab.

Unterrichtseinheit 1: bersicht ber SQL Server

Relationales Modul Das relationale Modul analysiert Transact-SQL-Anweisungen, optimiert Ausfhrungsplne und fhrt sie aus, verarbeitet DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) und andere Anweisungen und erzwingt Sicherheit. Speichermodul Das Speichermodul verwaltet Datenbankdateien und die Verwendung des Speicherplatzes in den Dateien, erstellt und liest Daten von physischen Seiten, verwaltet Datenpuffer und physische Eingaben und Ausgaben, steuert Parallelitt, fhrt Protokollier- und Wiederherstellungsvorgnge aus und implementiert Dienstprogrammfunktionen wie das Datenbankprfprogramm (Database Consistency Checker, DBCC) sowie Sicherung und Wiederherstellung.

Unterrichtseinheit 1: bersicht ber SQL Server

Client/Server-Kommunikationsprozess
Beschreiben Sie den Client/Server-Kommunikationsprozess.

Thema

Clientanwendung Clientanwendung
Abfrage Abfrage Resultset Resultset

Einstieg

Clients und Server kommunizieren normalerweise ber ein Netzwerk.


Client

Datenbank-API Datenbank-API (OLE DB, ODBC, (OLE DB, ODBC, DB-Library) DB-Library) 2 Client-Netzwerkbibliothek Client-Netzwerkbibliothek

SQL Server SQL Server ServerServerNetzwerkbibliotheken Netzwerkbibliotheken 5


Abfrage Abfrage

Open Data Services Open Data Services Relationales Relationales Modul Modul Speichermodul Speichermodul

Resultset Resultset

Server 4

Prozessor Prozessor ArbeitsArbeitsspeicher speicher Lokale Datenbank

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Clients und Server kommunizieren normalerweise ber ein Netzwerk. In der folgenden Sequenz wird eine Abfrage verwendet, um einen typischen Client/Server-Kommunikationsprozess mit Hilfe einer Datenbank-API darzustellen. 1. Eine Clientanwendung sendet eine Abfrage ab. Der Client ruft die Datenbank-API auf und bergibt die Abfrage. Die Datenbank-API verwendet einen Provider, Treiber oder eine DLL, um die Abfrage in ein oder mehrere TDS-Pakete (Tabular Data Stream) einzuschlieen und an die Client-Netzwerkbibliothek zu bergeben. 2. Die Client-Netzwerkbibliothek verpackt die TDS-Pakete in Netzwerkprotokoll-Pakete. Die Client-Netzwerkbibliothek ruft eine prozessbergreifende Kommunikations-API (Interprocess Communication, IPC) von Windows auf, um die Netzwerkprotokoll-Pakete mit Hilfe des Netzwerkprotokoll-Stacks des Betriebssystems an eine Server-Netzwerkbibliothek zu senden. Die entsprechende Server-Netzwerkbibliothek extrahiert die TDSPakete aus den Netzwerkprotokoll-Paketen und bergibt die TDS-Pakete an Open Data Services. 3. Open Data Services extrahiert die Abfrage aus den TDS-Paketen und bergibt die Abfrage an das relationale Modul. Das relationale Modul kompiliert dann die Abfrage in einen optimierten Ausfhrungsplan. Der Ausfhrungsplan wird ausgefhrt. Das relationale Modul kommuniziert mit dem Speichermodul mit Hilfe der OLE DB-Schnittstelle. 4. Das Speichermodul bertrgt Daten aus einer Datenbank an Datenpuffer und bergibt dann Rowsets mit Daten an das relationale Modul. Das relationale Modul kombiniert die Rowsets zum endgltigen Resultset und bergibt das Resultset an Open Data Services. 5. Open Data Services packt die Resultsets und gibt sie mit Hilfe einer ServerNetzwerkbibliothek, des Netzwerkprotokoll-Stacks, der Client-Netzwerkbibliothek und der Datenbank-API an die Clientanwendung zurck. Das Resultset kann auch im XML-Format zurckgegeben werden.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie. Weisen Sie darauf hin, dass fr die gesamte Kommunikation zwischen der ClientNetzwerkbibliothek und einer SQL Server-Netzwerkbibliothek der Netzwerkprotokoll-Stack des Betriebssystems verwendet wird.

10

Unterrichtseinheit 1: bersicht ber SQL Server

SQL Server-Dienste
Stellen Sie die Serversoftware fr SQL Server vor.

Thema

Einstieg

MSSQLServerDienst SQLServerAgentDienst Microsoft Distributed Transaction Coordinator Server Microsoft Search

Die SQL Server-Dienste schlieen MSSQLServerDienst, SQLServerAgentDienst, Microsoft Distributed Transaction Coordinator und Microsoft Search ein.

Daten verwalten Transaktionen und Abfragen verarbeiten Datenintegritt Auftrge Warnungen Operatoren Verteilte Transaktionen verwalten

Volltextkataloge Volltextindizes

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die SQL Server-Dienste schlieen MSSQLServer-Dienst, SQLServerAgentDienst, Microsoft Distributed Transaction Coordinator (MS DTC) und Microsoft Search ein. Obwohl diese SQL Server-Dienste unter Windows 2000 normalerweise als Dienste ausgefhrt werden, knnen sie auch als Anwendungen ausgefhrt werden.

Vier SQL Server-Dienste


SQL Server schliet vier Dienste ein, die standardmig bei einer neuen Installation installiert werden. MSSQLServer-Dienst, SQLServerAgent-Dienst, Microsoft Distributed Transaction Coordinator und Microsoft Search.

MSSQLServer-Dienst
MSSQLServer-Dienst ist das Datenbankmodul. Diese Komponente verarbeitet alle Transact-SQL-Anweisungen und verwaltet alle Dateien, aus denen sich die Datenbanken auf dem Server zusammensetzen. Der MSSQLServer-Dienst fhrt Folgendes aus: Zuordnen von Computerressourcen zu mehreren gleichzeitigen Benutzern. Verhindern von Problemen mit der Logik, wie z. B. das Planen der Anforderungen von Benutzern, die die gleichen Daten zur gleichen Zeit aktualisieren mchten. Sicherstellen der Datenkonsistenz und Datenintegritt.

Unterrichtseinheit 1: bersicht ber SQL Server

11

SQLServerAgent-Dienst
Der SQLServerAgent-Dienst arbeitet in Verbindung mit SQL Server, um Warnungen, lokale oder Multiserverauftrge und Operatoren zu erstellen und zu verwalten. Beachten Sie die folgenden Informationen zum SQLServerAgentDienst: Warnungen stellen Informationen zum Status eines Vorgangs bereit, z. B. wenn ein Auftrag abgeschlossen ist oder wenn ein Fehler auftritt. Der SQLServerAgent-Dienst schliet ein Auftragserstellungs- und Zeitplanungsmodul ein, mit dem Aufgaben automatisiert werden. Mit dem SQLServerAgent-Dienst knnen E-Mail-Nachrichten gesendet werden, ein Operator kann per Pager benachrichtigt werden oder eine andere Anwendung kann gestartet werden, wenn eine Warnung auftritt. Sie knnen beispielsweise festlegen, dass eine Warnung auftritt, wenn eine Datenbank oder ein Transaktionsprotokoll beinahe voll ist oder wenn eine Datenbanksicherung erfolgreich ist.

Microsoft Distributed Transaction Coordinator


Mit MS DTC knnen Clients mehrere verschiedene Datenquellen in eine Transaktion einschlieen. MS DTC koordiniert die ordnungsgeme Ausfhrung verteilter Transaktionen, um sicherzustellen, dass alle Aktualisierungen auf allen Servern dauerhaft sind bzw. dass bei Fehlern alle nderungen rckgngig gemacht werden.

Microsoft Search
Microsoft Search ist ein Volltextmodul, das als Dienst unter Windows 2000 ausgefhrt wird. Die Volltextuntersttzung umfasst die Funktion, Abfragen auf Zeichendaten auszufhren, und die Erstellung und Verwaltung von Indizes, die diese Abfragen ermglichen.

Mehrere Instanzen von SQL Server


Mehrere Instanzen von SQL Server knnen gleichzeitig auf demselben Computer ausgefhrt werden. Jede Instanz von SQL Server verfgt ber eigene System- und Benutzerdatenbanken, die nicht von den Instanzen gemeinsam genutzt werden. Jede Instanz arbeitet so, als wenn sie sich auf einem gesonderten Server befinden wrde. Anwendungen knnen mit jeder Instanz des SQL Server-Datenbankmoduls auf einem Computer eine Verbindung herstellen, hnlich wie sie mit SQL Server-Datenbankmodulen eine Verbindung herstellen, die auf verschiedenen Computern ausgefhrt werden. Wenn Sie nur den Computernamen angeben, arbeiten Sie mit der Standardinstanz. Sie mssen Computername\Instanzname angeben, um eine Verbindung mit einer benannten Instanz herzustellen.

12

Unterrichtseinheit 1: bersicht ber SQL Server

SQL Server-Integration
Thema
Stellen Sie das Thema dar.

Einstieg

SQL Server schliet Clientund Serverkomponenten ein.

Integrieren von SQL Server in Betriebssysteme Integrieren von SQL Server in Windows 2000 Integrieren von SQL Server in andere Serveranwendungen von Microsoft

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server schliet Client- und Serverkomponenten ein, die in viele Betriebssysteme von Microsoft, einschlielich Windows 2000, und in andere Serveranwendungen von Microsoft integriert werden knnen. Internetbrowser und Anwendungen von Drittanbietern, die unter verschiedenen Betriebssystemen ausgefhrt werden, knnen auch auf SQL Server zugreifen.

Unterrichtseinheit 1: bersicht ber SQL Server

13

Integrieren von SQL Server in Betriebssysteme


Thema
Beschreiben Sie SQL Server-Plattformen fr Client- und Serverkomponenten.
Windows 2000 Windows NT Windows Me, 98 und 95 Drittanbieter Browsers

Einstieg

Internet Internet

SQL Server schliet Clientund Serverkomponenten ein, die unter verschiedenen Betriebssystemen ausgefhrt werden.

Client Server

Windows 2000 Windows NT Windows Me Windows 98

Windows CE

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server schliet Client- und Serverkomponenten ein, die unter verschiedenen Betriebssystemen ausgefhrt werden.

Clientkomponenten
Die Clientkomponenten aller Editionen von SQL Server 2000, mit Ausnahme von SQL Server Windows CE Edition, knnen unter allen Editionen von Windows 2000, Versionen von Microsoft Windows NT, Microsoft Windows Millennium Edition (Me), Microsoft Windows 98 und Microsoft Windows 95 ausgefhrt werden. Alle Clientkomponenten von SQL Server 2000 CE Edition knnen ausschlielich unter dem Betriebssystem Microsoft Windows CE ausgefhrt werden.

Serverkomponenten
Die verschiedenen Editionen von SQL Server knnen unter allen Editionen von Windows 2000, Versionen von Windows NT, Windows Me, Windows 98 und Windows CE ausgefhrt werden. Bestimmte Versionen der Betriebssysteme und Editionen von SQL Server beschrnken Serverkomponenten. Microsoft Windows NT Server 4.0 Service Pack 5 (SP5) oder hher, muss als Mindestanforderung fr alle Editionen von SQL Server 2000 installiert werden. Nur die Serverkomponenten, wie z. B. das Datenbankmodul und Analysis-Server, sind auf bestimmte Versionen der Betriebssysteme beschrnkt. Obwohl z. B. das Datenbankmodul fr Microsoft SQL Server 2000 Enterprise Edition nicht unter Microsoft Windows 2000 Professional, Microsoft Windows NT Workstation, Windows Me oder Windows 98 ausgefhrt werden kann, knnen Sie die SQL Server 2000 Enterprise Edition-CD verwenden, um die Clientsoftware unter diesen Betriebssystemen zu installieren. Windows NT 4.0 Terminal Server untersttzt SQL Server 2000 nicht.

14

Unterrichtseinheit 1: bersicht ber SQL Server

Internetbrowser und Anwendungen von Drittanbietern


Internetbrowser und Anwendungen von Drittanbietern, die unter verschiedenen Betriebssystemen ausgefhrt werden, knnen auch auf SQL Server zugreifen.

Unterrichtseinheit 1: bersicht ber SQL Server

15

Integrieren von SQL Server in Windows 2000


Thema
Erlutern Sie die Integration von SQL Server in Windows 2000.

Active Directory Sicherheit Multiprozessoruntersttzung Microsoft-Ereignisanzeige Windows 2000-Komponentendienste Windows 2000-Systemmonitor Microsoft Internet-Informationsdienste Windows-Clustering

Einstieg

SQL Server ist vollstndig in Windows 2000 integriert.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server ist vollstndig in Windows 2000 integriert und nutzt viele Features von Windows 2000. Active Directory Beim Starten von Servern werden Server und deren Attribute automatisch im Verzeichnisdienst Active Directory registriert. Benutzer knnen bestimmte Server ber Active Directory-Suche suchen und finden. Beispielsweise kann ein Benutzer das Verzeichnis verwenden, um alle Server zu finden, auf denen eine oder mehrere Instanzen von SQL Server mit einem bestimmten Datenbanknamen installiert sind. Sicherheit SQL Server ist in das Sicherheitssystem von Windows 2000 integriert. Durch diese Integration kann mit einem einzelnen Benutzernamen und Kennwort auf SQL Server und Windows 2000 zugegriffen werden. SQL Server verwendet auerdem Verschlsselungsfeatures von Windows 2000 fr die Netzwerksicherheit, einschlielich Kerberos-Untersttzung. SQL Server stellt Clients, die ohne Authentifizierung durch Windows 2000 auf SQL Server zugreifen mssen, eigene Sicherheit bereit. Multiprozessoruntersttzung SQL Server untersttzt die SMP-Funktionen (Symmetric Multiprocessing) von Windows 2000. SQL Server nutzt automatisch die Vorteile aller zustzlichen Prozessoren, die zum Servercomputer hinzugefgt werden. Microsoft-Ereignisanzeige SQL Server schreibt Meldungen an die Windows 2000-Anwendung, an die Windows 2000-Sicherheit und an die Windows 2000-Systemereignisprotokolle, und stellt so einen konsistenten Mechanismus zum Anzeigen und Nachverfolgen von Problemen bereit.

16

Unterrichtseinheit 1: bersicht ber SQL Server

Windows 2000-Komponentendienste Komponentendienste basieren auf Erweiterungen von COM (Component Object Model) und Microsoft Transaction Server. Komponentendienste stellen verbessertes Threading, verbesserte Sicherheit, Transaktionsverwaltung, Objektpooling, Queued Components, Anwendungsverwaltung und Anwendungspakete bereit. Beispielsweise knnen Softwareentwickler die Komponentendienste verwenden, um Routinekomponenten und Anwendungsverhalten visuell zu konfigurieren, wie beispielsweise die Sicherheit und die Teilnahme an Transaktionen, und um Komponenten in COM+-Anwendungen zu integrieren. Windows 2000-Systemmonitor SQL Server sendet Leistungsdaten an Windows 2000-Systemmonitor, sodass Sie die Systemleistung von SQL Server berwachen knnen. Microsoft Internet-Informationsdienste SQL Server verwendet Microsoft Internet-Informationsdienste (Internet Information Services, IIS), sodass Internetbrowser mit Hilfe des HTTP-Protokolls auf eine SQL Server-Datenbank zugreifen knnen. Windows Clustering Windows Clustering, eine Komponente von Windows 2000 Advanced Server, untersttzt die Verbindung von zwei Servern oder Knoten zu einem Cluster, um die Verfgbarkeit von Daten und Anwendungen zu erhhen und deren Verwaltung zu erleichtern. SQL Server arbeitet mit Windows Clustering zusammen, um automatisch zum zweiten Knoten zu wechseln, falls der erste Knoten ausfllt.

Unterrichtseinheit 1: bersicht ber SQL Server

17

Integrieren von SQL Server in andere Serveranwendungen von Microsoft


Zeigen Sie, wie SQL Server mit anderen Serveranwendungen von Microsoft zusammenarbeitet.

Thema

Internet Internet

Microsoft Windows 2000 Server mit Solution Accelerator (SA) fr die Internetladenzeile

Einstieg

SQL Server kann gut in andere Serveranwendungen von Microsoft integriert werden.
Microsoft Systems Management Server

SQL Server

Microsoft Exchange Server

IBM Host
Microsoft Host Integration Server 2000

Daten und Anwendungen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server kann gut in andere Serveranwendungen von Microsoft integriert werden. Microsoft stellt eine Gruppe von Serveranwendungen bereit, die zusammenarbeiten, um Ihnen beim Erstellen von Unternehmenslsungen zu helfen. In der folgenden Tabelle werden einige hufig verwendete Serveranwendungen beschrieben, die mit SQL Server zusammenarbeiten oder die SQL Server verwenden.
Serveranwendung Microsoft Windows 2000 Server mit Solution Accelerator (SA) fr die Internetladenzeile Microsoft Exchange Server Beschreibung Stellt Internetverbindungen bereit, die sicher, schnell und leicht zu verwalten sind. Schliet einen erweiterbaren Unternehmensfirewall mit mehreren Ebenen und einen skalierbaren, leistungsfhigen Webcache ein. Ermglicht SQL Server das Senden von E-Mail-Nachrichten mit Hilfe von Exchange Server oder anderen MAPI-kompatiblen (Messaging Application Programming Interface) Providern. SQL Server kann Nachrichten senden, wenn ein Fehler auftritt oder ein geplanter Task (z. B. eine Datenbanksicherung) erfolgreich ausgefhrt wurde oder fehlgeschlagen ist. Auch die Antwort auf in Nachrichten eingebettete Anfragen ist mglich. Microsoft Host Integration Server 2000 Verbindet IBM-Umgebungen, in denen das SNAProtokoll (Systems Network Architecture) ausgefhrt wird, mit PC-basierten Netzwerken. Sie knnen SQL Server auerdem mit Hilfe von Microsoft Host Integration Server 2000 in IBM-Mainframes oder AS/400-Anwendungen und -Daten integrieren. Microsoft Systems Management Server Verwaltet Computersoftware, -hardware und -inventar und verwendet SQL Server zum Speichern der Datenbanken.

18

Unterrichtseinheit 1: bersicht ber SQL Server

SQL Server-Datenbanken
Thema
Stellen Sie die Themen zu den SQL Server-Datenbanken vor.

Datenbanktypen Datenbankobjekte Verweisen auf SQL Server-Objekte Systemtabellen Metadatenabruf

Einstieg

Das Vorhandensein von Kenntnissen in Bezug auf die SQL Server-Datenbankstruktur trgt dazu bei, dass Sie Ihre Datenbank auf effiziente Weise entwickeln und implementieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Vorhandensein von Kenntnissen in Bezug auf die SQL Server-Datenbankstruktur trgt dazu bei, dass Sie Ihre Datenbank auf effiziente Weise entwickeln und implementieren.

Unterrichtseinheit 1: bersicht ber SQL Server

19

Datenbanktypen
Beschreiben Sie die beiden SQL Server-Datenbanktypen.

Thema

Systemdatenbanken
master model tempdb msdb distribution

Einstieg

Jeder Computer mit SQL Server weist zwei Datenbanktypen auf: Systemdatenbanken und Benutzerdatenbanken.

pubs

Northwind

User1

Benutzerdatenbanken

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Jeder Computer mit SQL Server weist zwei Datenbanktypen auf: Systemdatenbanken und Benutzerdatenbanken. In Systemdatenbanken werden Informationen zu SQL Server als Ganzes gespeichert. SQL Server verwendet Systemdatenbanken, um das System zu betreiben und zu verwalten. Benutzerdatenbanken werden von Benutzern erstellt. Methodischer Hinweis Wenn SQL Server installiert ist, erstellt SQL Server Setup Systemdatenbanken und Beispiel-Benutzerdatenbanken. Die Verteilungsdatenbank ist installiert, wenn Sie SQL Server fr Replikationsaktivitten konfigurieren. In der folgenden Tabelle werden die einzelnen Datenbanken beschrieben.
Datenbank master Beschreibung Steuert die Benutzerdatenbanken und den Betrieb von SQL Server als Ganzes, indem Informationen wie Benutzerkonten, konfigurierbare Umgebungsvariablen und Systemfehlermeldungen nachverfolgt werden Stellt eine Vorlage oder einen Prototyp fr neue Benutzerdatenbanken bereit Stellt einen Speicherbereich fr temporre Tabellen und sonstigen Bedarf an temporrem Speicherplatz bereit Stellt einen Speicherbereich fr Zeitplanungsinformationen und den Auftragsverlauf bereit Speichert fr die Replikation verwendete Verlaufs- und Transaktionsdaten Stellt eine Beispieldatenbank zum Lernen bereit Stellt eine Beispieldatenbank zum Lernen bereit Identifiziert eine benutzerdefinierte Datenbank

Beschreiben Sie kurz die Funktion der Datenbanktypen. Weisen Sie darauf hin, dass SQL Server mehrere Instanzen untersttzt.

model tempdb msdb distribution pubs Northwind User1

20

Unterrichtseinheit 1: bersicht ber SQL Server

Datenbankobjekte
Thema
Gruppierter Index

Beschreiben Sie die Datenbankobjekte von SQL Server.

PK
EmpNum
integer

Anderson Anderson Barr ...

FK
FirstName
varchar(20)

Gespeicherte Gespeicherte Prozedur Prozedur UpdatePhone UpdatePhone

Trigger Trigger LastMod


longstring

Einstieg

Eine Datenbank ist eine Auflistung von Daten, Tabellen und anderen Objekten.

LastName
longstring

CtryCode Extension
char(2) char(6)

10191 10192 10202

Labrie Labrie Martin

Angela Eva Jose

FR FR SP

x19891 x19433 x21467

\HR\KarlD \HR\KarlD \HR\AmyL

EmployeePhoneView EmployeePhoneView

SELECT lastname, firstname, extension SELECT lastname, firstname, extension FROM employee FROM employee

Check
x##### x#####

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Eine Datenbank ist eine Auflistung von Daten, Tabellen und anderen Objekten. Datenbankobjekte helfen Ihnen beim Strukturieren von Daten und Definieren von Mechanismen fr Datenintegritt. In der folgenden Tabelle werden die SQL Server-Datenbankobjekte beschrieben.
Datenbankobjekt Tabelle Datentyp Beschreibung Definiert eine Auflistung von Zeilen, denen Spalten zugeordnet sind. Definiert die fr eine Spalte oder Variable zulssigen Datenwerte. SQL Server stellt vom System angegebene Datentypen bereit. Benutzer erstellen benutzerdefinierte Datentypen. Einschrnkung Standard Regel Index Definiert Regeln fr die in Spalten zulssigen Werte und stellt den Standardmechanismus zum Erzwingen von Datenintegritt dar. Definiert einen Wert, der in einer Spalte gespeichert ist, falls kein anderer Wert geliefert wird. Enthlt Informationen, die gltige Werte definieren, die in einer Spalte oder einem Datentyp gespeichert sind. Eine Speicherstruktur, die einen schnellen Zugriff zum Abrufen von Daten bereitstellt und Datenintegritt erzwingen kann. Bei einem gruppierten Index ist die logische oder indizierte Reihenfolge der Schlsselwerte mit der physischen, gespeicherten Reihenfolge der entsprechenden Zeilen in der Tabelle identisch. Bei einem nicht gruppierten Index stimmt die logische Reihenfolge des Indexes nicht mit der physischen, gespeicherten Reihenfolge der Zeilen in der Tabelle berein.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie. Beachten Sie, dass die Informationen in der Abbildung fiktiv sind und als Unterrichtsbeispiel bereitgestellt werden. Erlutern Sie, dass die Liste der Datenbankobjekte in der Tabelle generisch ist und keine Objekthierarchie darstellt. Beschreiben Sie kurz die einzelnen Datenbankobjekte.

Unterrichtseinheit 1: bersicht ber SQL Server (Fortsetzung) Datenbankobjekt Sicht Benutzerdefinierte Funktion Beschreibung Ermglicht das Anzeigen von Daten aus einer oder mehreren Tabellen oder Sichten einer Datenbank.

21

Kann entweder einen skalaren Wert oder eine Tabelle zurckgeben. Funktionen werden verwendet, um hufig ausgefhrte Logik zu kapseln. Code, der die in einer Funktion enthaltene Logik ausfhren muss, kann die Funktion aufrufen und muss nicht die gesamte Logik der Funktion wiederholen. Eine benannte Auflistung vorkompilierter Transact-SQLAnweisungen, die zusammen ausgefhrt werden. Eine besondere Form einer gespeicherten Prozedur, die automatisch ausgefhrt wird, wenn ein Benutzer Daten in einer Tabelle oder Sicht ndert.

Gespeicherte Prozedur Trigger

22

Unterrichtseinheit 1: bersicht ber SQL Server

Verweisen auf SQL Server-Objekte


Stellen Sie den Objektbenennungsstandard von SQL Server vor.

Thema

Vollgekennzeichnete Namen Server.Datenbank.Besitzer.Objekt Teilweise angegebene Namen Server wird standardmig auf die aktuelle Instanz auf dem lokalen Server eingestellt Datenbank wird standardmig auf die aktuelle Datenbank eingestellt Besitzer wird standardmig auf den Benutzernamen in der angegebenen Datenbank eingestellt
CREATE TABLE Northwind.dbo.OrderHistory CREATE TABLE Northwind.dbo.OrderHistory . . . . . .

Einstieg

Es gibt mehrere Mglichkeiten, um auf SQL ServerObjekte zu verweisen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Es gibt mehrere Mglichkeiten, um auf SQL Server-Objekte zu verweisen. Sie knnen den vollstndigen Namen des Objekts angeben (dessen vollgekennzeichneten Namen), oder sie knnen nur einen Teil des Objektnamens angeben, damit SQL Server den Rest des Namen aus dem Kontext bestimmen kann, in dem Sie arbeiten.

Vollgekennzeichnete Namen
In den vollstndigen Namen eines SQL Server-Objektes sind im folgenden Format vier Bezeichner (der Servername, der Datenbankname, der Besitzername und der Objektname) eingeschlossen: Server.Datenbank.Besitzer.Objekt Ein Objektname, der alle vier Teile angibt, wird als vollgekennzeichneter Name bezeichnet. Jedes Objekt, das Sie in SQL Server erstellen, muss einen eindeutigen, vollgekennzeichneten Namen aufweisen. In einer Datenbank kann es z. B. zwei Tabellen mit dem Namen Orders geben, wenn diese unterschiedlichen Besitzern gehren. Auerdem mssen Spaltennamen innerhalb einer Tabelle oder Sicht eindeutig sein.

Teilweise angegebene Namen


Wenn Sie auf ein Objekt verweisen, mssen Sie nicht immer den Server, die Datenbank und den Besitzer angeben. Vorlufige Bezeichner knnen ausgelassen werden, wenn deren Positionen durch Punkte gekennzeichnet werden.

Unterrichtseinheit 1: bersicht ber SQL Server

23

Die folgende Liste enthlt gltige Formate fr Objektnamen: Server.Datenbank.Besitzer.Objekt Datenbank.Besitzer.Objekt Datenbank.Objekt Besitzer.Objekt Objekt Wenn Sie ein Objekt erstellen und die verschiedenen Teile des Namens nicht angeben, verwendet SQL Server die folgenden Standardwerte: Server wird standardmig auf die aktuelle Instanz auf dem lokalen Server eingestellt. Datenbank wird standardmig auf die aktuelle Datenbank eingestellt. Besitzer wird standardmig auf den Benutzernamen in der angegebenen Datenbank eingestellt, der dem Benutzernamen der aktuellen Verbindung zugeordnet ist. Ein Benutzer, der Mitglied einer Rolle ist, kann explizit die Rolle als Objektbesitzer angeben. Ein Benutzer, der ein Mitglied der db_owner- oder db_ddladmin-Rolle in einer Datenbank ist, sollte das Benutzerkonto dbo als Besitzer eines Objekts angeben. Dies wird empfohlen. Beispiel Im folgenden Beispiel wird eine OrderHistory-Tabelle in der NorthwindDatenbank erstellt.
CREATE TABLE Northwind.dbo.OrderHistory (OrderID int, ProductID int, UnitPrice money, Quantity int, Discount decimal)

Die meisten Objektverweise verwenden aus drei Teilen bestehende Namen und werden standardmig auf den lokalen Server eingestellt. Aus vier Teilen bestehende Namen werden in der Regel fr verteilte Abfragen oder Aufrufe remote gespeicherter Prozeduren verwendet. SQL Server untersttzt eine dreiteilige Benennungskonvention beim Verweisen auf den aktuellen Server. Der SQL-92-Standard untersttzt ebenfalls eine dreiteilige Benennungskonvention. In beiden Benennungskonventionen werden unterschiedliche Begriffe verwendet. In der folgenden Tabelle werden die Unterschiede zwischen SQL Server-Namen und SQL-92-Standard-Namen aufgefhrt.
SQL Server-Name Datenbank Besitzer Objekt SQL-92-Name catalog schema object

24

Unterrichtseinheit 1: bersicht ber SQL Server

Systemtabellen
Beschreiben Sie die Systemtabellen.

Thema

Einstieg

Systemtabellen speichern Informationen, so genannte Metadaten, zum System und zu Objekten in Datenbanken.

Systemtabellen speichern Informationen (Metadaten) zum System und zu den Datenbankobjekten Datenbankkataloge speichern Metadaten zu einer bestimmten Datenbank Systemkataloge speichern Metadaten zum gesamten System und zu allen anderen Datenbanken

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis SQL Server speichert Informationen, so genannte Metadaten, zum System und zu Objekten in Datenbanken fr eine Instanz von SQL Server. Metadaten sind Informationen zu Daten. Metadaten schlieen Informationen zu Eigenschaften von Daten ein, wie den Datentyp in einer Spalte (numerisch, Text usw.) oder die Lnge einer Spalte. Es knnen auerdem Informationen zur Struktur von Daten sein oder Informationen, die den Entwurf von Objekten angeben. Systemtabellen Die Informationen zu Daten in Systemtabellen schlieen Konfigurationsinformationen und Definitionen aller Datenbanken und Datenbankobjekte in der Instanz von SQL Server ein. Benutzer sollten Systemtabellen nicht direkt ndern. Datenbankkatalog Jede Datenbank (einschlielich master) enthlt eine Auflistung von Systemtabellen, in denen Metadaten zu dieser speziellen Datenbank gespeichert sind. Diese Auflistung von Systemtabellen wird als Datenbankkatalog bezeichnet. Er enthlt die Definition aller Objekte in der Datenbank sowie Berechtigungen. Systemkatalog Der Systemkatalog, der nur in der master-Datenbank vorhanden ist, ist eine Auflistung von Systemtabellen, in denen Metadaten zum gesamten System und zu allen anderen Datenbanken gespeichert sind.

Eine ausfhrliche Erluterung der Metadaten finden die Kursteilnehmer in der SQL Server-Onlinedokumentation.

Unterrichtseinheit 1: bersicht ber SQL Server

25

Die Namen der meisten Systemtabellen beginnen mit dem Prfix sys. In der folgenden Tabelle werden mehrere hufig verwendete Systemtabellen und Sichten identifiziert.
Systemtabelle syslogins Datenbank master Funktion Diese Tabelle enthlt eine Zeile fr jedes Anmeldekonto, das eine Verbindung mit SQL Server herstellen kann Diese Tabelle enthlt eine Zeile fr alle Systemfehler oder Warnungen, die SQL Server zurckgeben kann Diese Tabelle enthlt eine Zeile fr jede Datenbank von SQL Server Diese Tabelle enthlt eine Zeile fr alle Windows 2000-Benutzer, Windows 2000-Gruppen, SQL Server-Benutzer oder SQL Server-Rollen in einer Datenbank Diese Tabelle enthlt eine Zeile fr jedes Objekt in einer Datenbank

sysmessages sysdatabases sysusers

master master Alle

sysobjects

Alle

26

Unterrichtseinheit 1: bersicht ber SQL Server

Metadatenabruf
Thema
Erlutern Sie die unterschiedlichen Mglichkeiten, um Informationen aus Systemtabellen abzurufen.

Gespeicherte Systemprozeduren
EXEC sp_help Employees EXEC sp_help Employees

Einstieg

Wenn Sie Anwendungen schreiben, die Informationen aus Systemtabellen abrufen, sollten Sie Folgendes verwenden

System- und Metadatenfunktionen


SELECT USER_NAME(10) SELECT USER_NAME(10)

Informationsschemasichten
SELECT * FROM INFORMATION_SCHEMA.TABLES SELECT * FROM INFORMATION_SCHEMA.TABLES

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie Anwendungen schreiben, die Metadaten aus Systemtabellen abrufen, sollten Sie gespeicherte Systemprozeduren, Systemfunktionen oder vom System angegebene Informationsschemasichten verwenden. Methodischer Hinweis Sie knnen eine Systemtabelle auf die gleiche Weise abfragen wie alle anderen Datenbanktabellen, um Informationen zum System abzurufen. Sie sollten jedoch keine Skripts schreiben, mit denen die Systemtabellen direkt abgefragt werden. Wenn nmlich Systemtabellen in knftigen Produktversionen gendert werden, knnen die Skripts fehlschlagen oder nicht die richtigen Informationen bereitstellen. Achtung Sie sollten die Systemtabellen nicht direkt bearbeiten. Das ndern einer Systemtabelle kann dazu fhren, dass SQL Server bei einem Systemausfall nicht ordnungsgem wiederhergestellt wird.

Weisen Sie darauf hin, dass das Schreiben von Skripts, die Systemtabellen direkt abfragen, nicht empfehlenswert ist. Wenn Systemtabellen in knftigen Produktversionen gendert werden, knnen von einer bestimmten Systemtabellenstruktur abhngende Skripts, fehlschlagen oder nicht die richtigen Informationen bereitstellen. Verwenden Sie anstelle von Systemtabellen Informationsschemasichten.

Gespeicherte Systemprozeduren
SQL Server stellt vorgefertigte Abfragen bereit, so genannte gespeicherte Systemprozeduren, die Ihnen das Sammeln von Informationen zum Status des Servers und der Datenbankobjekte erleichtern. Die Namen der meisten gespeicherten Systemprozeduren beginnen mit dem Prfix sp_. In der folgenden Tabelle werden drei hufig verwendete gespeicherte Systemprozeduren beschrieben.
Gespeicherte Systemprozedur sp_help [object_name] sp_helpdb [database_name] sp_helpindex [table_name] Beschreibung Stellt Informationen zum angegebenen Datenbankobjekt bereit Stellt Informationen zur angegebenen Datenbank bereit Stellt Informationen zum Index fr die angegebene Tabelle bereit

Unterrichtseinheit 1: bersicht ber SQL Server

27

Beispiel

Im folgenden Beispiel wird eine gespeicherte Systemtabelle ausgefhrt, um Informationen zur Employees-Tabelle zu erhalten.
EXEC sp_help Employees

Methodischer Hinweis

Weisen Sie darauf hin, dass System- und Metadatenfunktionen bestimmte einzelne Werte zurckgeben.

System- und Metadatenfunktionen


System- und Metadatenfunktionen stellen eine Methode bereit, Systemtabellen aus Transact-SQL-Anweisungen abzufragen. In der folgenden Tabelle werden hufig verwendete Systemfunktionen und die entsprechenden zurckgegebenen Informationen beschrieben.
Systemfunktion DB_ID USER_NAME COL_LENGTH STATS_DATE bergebener Parameter Name ID Spalte Index Ergebnis Gibt die Datenbank-ID zurck Gibt den Namen des Benutzers zurck Gibt die Spaltenbreite zurck Gibt das Datum zurck, an dem die Statistiken des angegebenen Indexes zuletzt aktualisiert wurden Gibt die tatschliche Lnge eines Ausdrucks eines beliebigen Datentyps zurck

DATALENGTH

Datentyp

Beispiel 1

Im folgenden Beispiel wird eine Systemfunktion in einer Abfrage verwendet, um den Benutzernamen der Benutzer-ID 10 abzurufen.
SELECT USER_NAME(10)

Informationsschemasichten
Informationsschemasichten stellen eine interne, von den Systemtabellen unabhngige Sicht der SQL Server-Metadaten bereit. Diese Sichten entsprechen der ANSI SQL-Standarddefinition fr das Informationsschema. Jede Informationsschemasicht enthlt Metadaten fr alle in der bestimmten Datenbank gespeicherten Datenobjekte. In der folgenden Tabelle werden hufig verwendete Informationsschemasichten beschrieben.
Informationsschemasicht INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA.COLUMNS INFORMATION_SCHEMA.TABLES_PRIVILEGES Beschreibung Eine Liste der Tabellen in der Datenbank Informationen zu den in der Datenbank definierten Spalten Sicherheitsinformationen fr Tabellen in der Datenbank

Beispiel 2

Im folgenden Beispiel wird eine Informationsschemasicht abgefragt, um eine Liste der Tabellen in einer Datenbank abzurufen.
SELECT * FROM INFORMATION_SCHEMA.TABLES

28

Unterrichtseinheit 1: bersicht ber SQL Server

SQL Server-Sicherheit
Thema
Beschreiben Sie die SQL Server-Sicherheit.

Einstieg

Anmeldeauthentifizierung Datenbank-Benutzerkonten und Datenbankrollen Arten von Rollen Berechtigungsberprfung

SQL Server berprft Benutzer auf zwei Sicherheitsstufen: Anmeldeauthentifizierung und Berechtigungsberprfung fr Datenbank-Benutzerkonten und Datenbankrollen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server berprft Benutzer auf zwei Sicherheitsstufen: Anmeldeauthentifizierung und Berechtigungsberprfung fr Datenbank-Benutzerkonten und Datenbankrollen. Durch Authentifizierung wird der Benutzer identifiziert, der das Anmeldekonto verwendet, und es wird berprft, ob der Benutzer eine Verbindung mit SQL Server herstellen kann. Wenn die Authentifizierung erfolgreich ist, stellt der Benutzer eine Verbindung mit SQL Server her. Der Benutzer muss dann ber die Berechtigung verfgen, auf Datenbanken auf dem Server zuzugreifen. Fr den Zugriff auf Datenbanken des Servers weist der Datenbankadministrator Benutzerkonten und Rollen Berechtigungen fr die Datenbank zu. Berechtigungen steuern die Aktivitten, die der Benutzer in der SQL Server-Datenbank durchfhren darf.

Unterrichtseinheit 1: bersicht ber SQL Server

29

Anmeldeauthentifizierung
Stellen Sie vor, wie SQL Server Anmeldekonten authentifiziert.

Thema

AUTHENTIFIZIERUNG
SQL Server berprft vertraute Verbindung

Einstieg

Ein Benutzer bentigt fr die Verbindung mit SQL Server ein Anmeldekonto.

Windows 2000 Windows 2000 Gruppen oder Benutzer Gruppen oder Benutzer

Windows 2000

ODER

SQL Server

SQL Server SQL Server Anmeldekonto Anmeldekonto

SQL Server berprft Name und Kennwort

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein Benutzer bentigt fr die Verbindung mit SQL Server ein Anmeldekonto. SQL Server erkennt zwei Mechanismen zur Anmeldeauthentifizierung, Windows-Authentifizierung und SQL Server-Authentifizierung, von denen jeder einen anderen Anmeldekontotyp verwendet.

Windows-Authentifizierung
Beim Verwenden von Windows-Authentifizierung steuert ein Windows 2000Konto oder eine Windows 2000-Gruppe den Benutzerzugriff auf SQL Server. Ein Benutzer stellt beim Verbinden kein SQL Server-Anmeldekonto bereit. Ein SQL Server-Systemadministrator muss entweder das Windows 2000-Konto oder die Windows 2000-Gruppe als gltiges SQL Server-Anmeldekonto definieren.

SQL Server-Authentifizierung
Beim Verwenden von SQL Server-Authentifizierung definiert ein SQL ServerSystemadministrator ein SQL Server-Anmeldekonto und -Kennwort. Benutzer mssen das SQL Server-Anmeldekonto und -Kennwort angeben, wenn sie eine Verbindung mit SQL Server herstellen.

30

Unterrichtseinheit 1: bersicht ber SQL Server

Mglicherweise werden die Kursteilnehmer die Authentifzierungsmodi und -mechanismen von SQL Server verwirrend finden. Erlutern Sie deshalb, dass der Server in einem Authentifizierungsmodus ausgefhrt wird und dass ein Client, der eine Verbindung mit einem im gemischten Modus ausgefhrten Server herstellt, einen Authentifizierungsmodus auswhlen muss.

Methodischer Hinweis

Authentifizierungsmodus
Wenn SQL Server unter Windows 2000 ausgefhrt wird, kann ein Systemadministrator einen von zwei Authentifizierungsmodi angeben: Windows-Authentifizierungsmodus Nur Windows 2000-Authentifizierung ist zulssig. Benutzer knnen kein SQL Server-Anmeldekonto angeben. Gemischter Modus Benutzer knnen eine Verbindung mit SQL Server ber Windows-Authentifizierung oder SQL Server-Authentifizierung herstellen.

Unterrichtseinheit 1: bersicht ber SQL Server

31

Datenbank-Benutzerkonten und Datenbankrollen


Stellen Sie dar, wie SQL Server die SQL ServerAnmeldeauthentifizierung mit Benutzerkonten und Rollen vergleicht.

Thema

Windows 2000 Gruppen oder Benutzer


Windows 2000

SQL Server berprft vertraute Verbindung

SQL Server weist Benutzernamen zu Benutzerkonten und -rollen zu


DatenbankBenutzer

Einstieg

Nachdem Benutzer authentifiziert wurden und sie sich bei SQL Server anmelden knnen, bentigen sie Konten in einer Datenbank.

ODER

SQL Server
Datenbankrolle

SQL Server Anmeldekonto

SQL Server berprft Name und Kennwort

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Nachdem Benutzer durch Windows 2000 oder SQL Server authentifiziert wurden und sie sich bei SQL Server anmelden knnen, bentigen sie Konten in einer Datenbank. Benutzerkonten und Rollen identifizieren einen Benutzer in einer Datenbank und steuern den Besitz von Objekten und die Berechtigungen zum Ausfhren von Anweisungen.

Datenbank-Benutzerkonten
Die Benutzerkonten, die Sicherheitsberechtigungen anwenden, sind Windows 2000-Benutzer oder -Gruppen oder SQL Server-Anmeldekonten. Benutzerkonten sind datenbankspezifisch.

Rollen
Mit Rollen knnen Sie Benutzer zu einer einzigen Einheit zusammenfassen, auf die Sie dann Berechtigungen anwenden knnen. SQL Server stellt vordefinierte Server- und Datenbankrollen fr hufig verwendete Verwaltungsfunktionen bereit, sodass Sie auf einfache Weise einem bestimmten Benutzer Verwaltungsberechtigungen erteilen knnen. Sie knnen auch Ihre eigenen benutzerdefinierten Datenbankrollen erstellen. In SQL Server knnen Benutzer Mitglied mehrerer Rollen sein.

32

Unterrichtseinheit 1: bersicht ber SQL Server

Arten von Rollen


Beschreiben Sie drei Arten von Rollen.

Thema

Einstieg

Feste Serverrollen Gruppierungen von Administratorprivilegien auf Serverebene Feste Datenbankrollen Gruppierungen von Administratorprivilegien auf Datenbankebene Benutzerdefinierte Datenbankrollen Representation der durch eine Gruppe von Angestellten innerhalb Ihrer Organisation definierten Arbeit

Bei SQL Server sind drei Arten von Rollen mglich.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei SQL Server sind drei Arten von Rollen mglich, um das Verwalten von Berechtigungen zu untersttzen: feste Serverrollen, feste Datenbankrollen und benutzerdefinierte Datenbankrollen.

Feste Serverrollen
Feste Serverrollen stellen Gruppierungen von Administratorprivilegien auf Serverebene bereit. Sie werden unabhngig von Benutzerdatenbanken auf Serverebene verwaltet. In der folgenden Tabelle werden die festen Serverrollen in SQL Server 2000 beschrieben.
Rolle Datenbankersteller (dbcreator) Festplattenadministratoren (diskadmin) Prozessadministratoren (processadmin) Sicherheitsadministratoren (securityadmin) Serveradministratoren (serveradmin) Setup-Administratoren (setupadmin) Systemadministratoren (sysadmin) Bulkadministratoren (bulkadmin) Berechtigung Datenbanken erstellen und ndern Festplattendateien verwalten SQL Server-Prozesse verwalten Serverbenutzernamen verwalten und berwachen Serverbergreifende Einstellungen konfigurieren Replikation installieren Beliebige Aktivitten ausfhren BULK INSERT-Anweisung ausfhren

Unterrichtseinheit 1: bersicht ber SQL Server

33

Feste Datenbankrollen
Feste Datenbankrollen stellen Gruppierungen von Administratorprivilegien auf Datenbankebene bereit. In der folgenden Tabelle werden die festen Datenbankrollen in SQL Server 2000 beschrieben.
Rolle public db_owner db_accessadmin db_ddladmin db_securityadmin db_backupoperator db_datareader db_datawriter db_denydatareader db_denydatawriter Berechtigung Alle Standardberechtigungen fr Benutzer in einer Datenbank verwalten Beliebige Datenbank-Rollenaktivitten ausfhren Datenbankbenutzer, Gruppen und Rollen hinzufgen oder entfernen Datenbankobjekte hinzufgen, ndern oder lschen Anweisungs- und Objektberechtigungen zuweisen Datenbanken sichern Daten aus beliebigen Tabellen lesen Daten aus allen Tabellen hinzufgen, ndern oder lschen Keine Daten aus Tabellen lesen Keine Daten in Tabellen ndern

Benutzerdefinierte Datenbankrollen
Sie haben auch die Mglichkeit, Ihre eigenen Datenbankrollen zu erstellen, die fr die Arbeit einer Gruppe von Angestellten Ihrer Organisation stehen. Sie mssen nicht fr jede Person Berechtigungen erteilen oder aufheben. Wenn sich die Funktion einer Rolle ndert, knnen Sie auf einfache Weise die Berechtigungen fr die Rolle ndern und die nderungen automatisch auf alle Mitglieder der Rolle anwenden.

34

Unterrichtseinheit 1: bersicht ber SQL Server

Berechtigungsberprfung
Thema
Beschreiben Sie, wie SQL Server Berechtigungen berprft.
2 2 3 3
Berechtigung OK; fhrt Befehl durch

1 1

Einstieg

Innerhalb jeder Datenbank weisen Sie Benutzerkonten und Rollen Berechtigungen zu, damit bestimmte Aktionen ausgefhrt bzw. nicht ausgefhrt werden knnen.

Datenbankbenutzer Datenbankbenutzer fhrt Befehle aus fhrt Befehle aus SELECT * FROM Members SELECT * FROM Members

SQL Server prft Berechtigungen Berechtigung nicht OK; gibt Error zurck

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Innerhalb jeder Datenbank weisen Sie Benutzerkonten und Rollen Berechtigungen zu, damit bestimmte Aktionen ausgefhrt bzw. nicht ausgefhrt werden knnen. SQL Server akzeptiert Befehle, nachdem ein Benutzer erfolgreich auf eine Datenbank zugegriffen hat. SQL Server fhrt beim berprfen von Berechtigungen die folgenden Schritte durch: 1. Wenn der Benutzer eine Aktion wie das Ausfhren einer Transact-SQLAnweisung oder das Auswhlen einer Menoption ausfhrt, sendet der Client Transact-SQL-Anweisungen an SQL Server. 2. Wenn SQL Server eine Transact-SQL-Anweisung empfngt, wird berprft, ob der Benutzer ber die Berechtigung zum Ausfhren der Anweisung verfgt. 3. SQL Server fhrt dann eine der folgenden beiden Aktionen aus: Wenn der Benutzer nicht ber die entsprechenden Berechtigungen verfgt, gibt SQL Server einen Fehler zurck. Wenn der Benutzer ber die entsprechenden Berechtigungen verfgt, fhrt SQL Server die Aktion aus.

Unterrichtseinheit 1: bersicht ber SQL Server

35

Arbeiten mit SQL Server


Thema
Wiederholen Sie die folgenden Themen: SQL ServerAnwendungsentwurf und SQL Server-Datenbankimplementierung und -verwaltung.

Verwalten einer SQL Server-Datenbank Implementieren einer SQL Server-Datenbank Auswhlen einer Anwendungsarchitektur fr SQL Server Entwerfen von Anwendungen mit Hilfe von Datenbank-APIs

Einstieg

Zum Arbeiten mit SQL Server gehrt das Verwalten und Implementieren einer SQL ServerDatenbank und das Entwickeln von Anwendungen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zum Arbeiten mit SQL Server gehrt das Verwalten und Implementieren einer SQL Server-Datenbank und das Entwickeln von Anwendungen. Methodischer Hinweis Wenn Sie mit SQL Server arbeiten, knnen Sie die von SQL Server bereitgestellten grafischen Tools oder Skripts verwenden. Wenn Sie z. B. eine Datenbank erstellen mssen, knnen Sie Skripts oder ein grafisches Tool verwenden. Da Sie im Allgemeinen eine bestimmte Datenbank einmal erstellen, verwenden Sie wahrscheinlich ein grafisches Tool. Wenn Sie jedoch die Datenbank sichern, verwenden Sie wahrscheinlich ein Skript, da das Sichern wiederholt vorgenommen werden muss.

Erlutern Sie, wann ein Skript oder ein grafisches Tools zum Arbeiten mit SQL Server verwendet wird.

36

Unterrichtseinheit 1: bersicht ber SQL Server

Verwalten einer SQL Server-Datenbank


Stellen Sie die Aktivitten zur Verwaltung einer SQL Server-Datenbank vor.

Thema

Allgemeine Verwaltungsaufgaben SQL Server Enterprise Manager SQL Server-Verwaltungstools und -Assistenten SQL Server-Befehlszeilen-Verwaltungstools SQL Server-Hilfe und -Onlinedokumentation

Einstieg

SQL Server stellt grafische und Befehlszeilentools sowie Befehlszeilen-Dienstprogramme zum Verwalten von SQL Server bereit.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server stellt grafische und Befehlszeilentools sowie Befehlszeilen-Dienstprogramme zum Verwalten von SQL Server bereit. Es sind auerdem verschiedene Arten von Hilfen eingeschlossen, um Sie bei der Arbeit mit SQL Server zu untersttzen.

Allgemeine Verwaltungsaufgaben
Fr das Verwalten einer SQL Server-Datenbank sind die folgenden Schritte erforderlich: Installieren, Konfigurieren und Sichern von SQL Server. Erstellen der Datenbanken. Dazu gehrt das Zuweisen von Speicherplatz fr die Datenbank und das Protokoll, das bertragen von Daten in die Datenbank und aus der Datenbank, das Definieren und Implementieren von Datenbanksicherheit, das Erstellen automatischer Auftrge fr wiederkehrende Tasks und das Einrichten der Replikation fr das Publizieren von Daten an mehreren Standorten. Verwalten der laufenden Aktivitten wie z. B. das Importieren und Exportieren von Daten, das Sichern und Wiederherstellen der Datenbank und des Protokolls und das berwachen und Optimieren der Datenbank. Methodischer Hinweis In SQL Server sind Tools und Assistenten zum Verwalten der Server, zum Entwerfen und Erstellen von Datenbanken und zum Abfragen von Daten eingeschlossen. Auerdem wird eine Onlinehilfe bereitgestellt.

Fhren Sie kurz SQL Server Enterprise Manager, SQL Query Analyzer und das Dienstprogramm osql vor.

SQL Server Enterprise Manager


SQL Server stellt einen Verwaltungsclient, SQL Server Enterprise Manager, bereit. Es handelt sich dabei um ein MMC-Snap-In (Microsoft Management Console). MMC ist eine gemeinsam genutzte Benutzeroberflche zum Verwalten von Microsoft-Serveranwendungen.

Unterrichtseinheit 1: bersicht ber SQL Server

37

SQL Server-Verwaltungstools und -Assistenten


SQL Server stellt eine Reihe von Verwaltungstools und Assistenten bereit, die bestimmte Aspekte der Verwaltung untersttzen. In der folgenden Tabelle werden SQL Server-Tools und -Assistenten beschrieben.
Grafisches Tool SQL Server-Clientkonfiguration SQL Server-Netzwerkkonfiguration SQL Profiler Zweck Ein Dienstprogramm zum Verwalten der Clientkonfiguration fr Netzwerkbibliotheken Ein Dienstprogramm zum Verwalten der Serverkonfiguration fr Netzwerkbibliotheken Ein Dienstprogramm fr fortlaufende Aufzeichnungen der Serveraktivitt und zum Bereitstellen von berwachungsfunktionen Ein grafisches Abfragetool zum Analysieren des Planes einer Abfrage, zum Anzeigen von statistischen Informationen und zum gleichzeitigen Verwalten mehrerer Abfragen in verschiedenen Fenstern Ein grafisches Dienstprogramm zum Starten, Beenden und Anhalten der SQL Server-Dienste Eine Anwendung zum Installieren und Konfigurieren von SQL Server Eine Auflistung von Tools, die den Benutzer bei komplexen Aufgaben fhren

SQL Query Analyzer

SQL Server-Dienst-Manager SQL Server Setup SQL Server-Assistenten

SQL Server-Befehlszeilen-Verwaltungstools
Mit den SQL Server-Befehlszeilen-Verwaltungstools knnen Sie TransactSQL-Anweisungen eingeben und Skriptdateien ausfhren. In der folgenden Tabelle sind die am hufigsten verwendeten Befehlszeilen-Dienstprogramme von SQL Server beschrieben. Jede Datei ist eine ausfhrbare Anwendung.
Dienstprogramm osql Beschreibung Ein Dienstprogramm, das ODBC (Open Database Connectivity) zum Kommunizieren mit SQL Server verwendet. Es wird hauptschlich verwendet, um Batchdateien mit einer oder mehreren SQL-Anweisungen auszufhren Batchdienstprogramm zum Importieren und Exportieren von Daten in und von SQL Server. Es kopiert Daten in eine und aus einer Datendatei in ein benutzerdefiniertes Format

bcp

38

Unterrichtseinheit 1: bersicht ber SQL Server

Beschreiben Sie kurz die verschiedenen Arten der Hilfe von SQL Server.

Methodischer Hinweis

SQL Server-Hilfe und -Onlinedokumentation


SQL Server stellt Ihnen verschiedene Arten von Hilfe zur Verfgung, um Sie bei der Arbeit mit SQL Server zu untersttzen. In der folgenden Tabelle werden die verschiedenen Arten der Hilfe von SQL Server beschrieben.
Art der Hilfe Hilfe zu Tools Beschreibung SQL Server-Tools stellen normalerweise eine kontextbezogene Hilfe zur Anwendungsoberflche bereit. Klicken Sie auf die Schaltflche Hilfe oder auf einen Befehl im Men ?. Wenn Sie SQL Query Analyser verwenden, whlen Sie den Namen einer Anweisung aus, und drcken Sie dann UMSCHALT+F1. Die SQL Server-Onlinedokumentation ermglicht den Onlinezugriff auf die SQL Server-Dokumentation.

Hilfe zu Transact-SQL

SQL Server-Dokumentation

Unterrichtseinheit 1: bersicht ber SQL Server

39

Implementieren einer SQL Server-Datenbank


Stellen Sie die Schritte zum Implementieren einer SQL Server-Datenbank vor.

Thema

Entwerfen der Datenbank Erstellen der Datenbank und Datenbankobjekte Testen und Optimieren der Anwendung und der Datenbank Planen der Bereitstellung

Einstieg

Das Implementieren einer SQL Server-Datenbank umfasst das Planen, Erstellen und Verwalten einer Reihe miteinander verbundener Komponenten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Implementieren einer SQL Server-Datenbank umfasst das Planen, Erstellen und Verwalten einer Reihe miteinander verbundener Komponenten. Die Art und die Komplexitt einer Datenbankanwendung sowie der Planungsprozess knnen sich von Fall zu Fall erheblich unterscheiden. Eine Datenbank kann beispielsweise relativ einfach und nur fr die Verwendung durch eine Person entworfen sein, sie kann jedoch auch gro und komplex sein und z. B. der Abwicklung von Banktransaktionen fr Hunderttausende von Kunden dienen. Methodischer Hinweis Unabhngig von der Gre und Komplexitt der Datenbank, mssen beim Implementieren die folgenden Schritte durchgefhrt werden: Entwerfen der Datenbank, sodass die Anwendung die Hardware optimal verwendet und knftige Erweiterungen mglich sind; Identifizieren und Modellieren von Datenbankobjekten und der Anwendungslogik und Angeben der Informationsarten fr jedes Objekt und jede Art von Beziehung. Erstellen der Datenbank und der Datenbankobjekte, einschlielich Tabellen, Mechanismen fr die Datenintegritt, Objekten fr die Eingabe und den Abruf von Daten (oft gespeicherte Prozeduren), entsprechender Indizes und der Sicherheit. Testen und Optimieren der Anwendung und der Datenbank. Wenn Sie eine Datenbank entwerfen, sollten Sie sicherstellen, dass die Datenbank wichtige Funktionen ordnungsgem und schnell ausfhrt. In Verbindung mit dem richtigen Datenbankentwurf ist die richtige Verwendung von Indizes, RAID (Redundant Array of Inexpensive Disks) und Dateigruppen wichtig, um eine gute Leistung zu erreichen. Planen der Bereitstellung, dies schliet das Analysieren der Arbeitsauslastung und das Empfehlen einer optimalen Indexkonfiguration fr die SQL Server-Datenbank ein.

Besprechen Sie kurz jeden Schritt.

40

Unterrichtseinheit 1: bersicht ber SQL Server

Auswhlen einer Anwendungsarchitektur fr SQL Server


Beschreiben Sie physische Architekturen und logische Softwareanwendungsentwrfe, die beim Planen einer Datenbank verfgbar sind.

Thema

Intelligenter Intelligenter Server (2 Schichten) Server (2 Schichten)

Intelligenter Intelligenter Client (2 Schichten) Client (2 Schichten)

nn-Schichten -Schichten

Internet Internet

Prsentation

Browser Client

Einstieg

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Planen eines Datenbankentwurfs erfordert Kenntnisse in Bezug auf die von Ihnen zu modellierenden Geschftsablufen und Kenntnisse in Bezug auf die Datenbankkonzepte und -features, die zur Darstellung dieser Geschftsablufe verwendet werden knnen. Bevor Sie eine Anwendung fr SQL Server entwerfen, mssen Sie sich die Zeit nehmen, eine Datenbank zu entwerfen, die das Unternehmen genau modelliert. Eine gut entworfene Datenbank muss nicht so oft gendert werden und zeigt ein besseres Leistungsverhalten. Die ausgewhlte Architektur wirkt sich darauf aus, wie Sie Ihre Softwareanwendung entwickeln, bereitstellen und verwalten. Methodischer Hinweis

Das Planen eines Datenbankentwurfs erfordert Kenntnisse in Bezug auf die von Ihnen zu modellierenden Geschftsablufen und Kenntnisse in Bezug auf die Datenbankkonzepte und -features, die zur Darstellung dieser Geschftsablufe verwendet werden knnen.

Prsentation

Prsentation Geschft Geschft

Prsentation Geschft

Geschft Daten Daten Daten Daten

Weisen Sie darauf hin, dass nur die am hufigsten verwendeten Architekturentwrfe und Bereitstellungsoptionen dargestellt sind. Weisen Sie unbedingt darauf hin, dass sich die Softwareanwendung bei jedem Architekturentwurf physisch auf einem Server befinden kann.

Softwarearchitektur
Sie knnen mehrere Anwendungsarchitekturen verwenden, um Client/Serveranwendungen zu implementieren. Das Auswhlen einer Anwendung mit verschiedenen Schichten bedeutet jedoch Flexibilitt und die Mglichkeit zur Auswahl aus Verwaltungsoptionen. Softwareanwendungen lassen sich in drei logische Schichten aufteilen, die sich physisch auf einem oder mehreren Servern befinden knnen.
Logische Schicht Prsentation Beschreibung Diese Schicht schliet die Logik fr das Prsentieren der Daten und der Anwendung fr Benutzer ein. Sie wird fast immer auf einem Clientcomputer implementiert. Diese Schicht enthlt die Anwendungslogik und die Geschftsregeln. (SQL Server kann an dieser Schicht beteiligt sein.) Diese Schicht schliet die Datenbankdefinition, die Datenintegrittslogik, gespeicherte Prozeduren und sonstige, eng mit den Daten verbundene Operationen ein. (SQL Server ist hauptschlich an dieser Schicht beteiligt.)

Geschft Daten

Unterrichtseinheit 1: bersicht ber SQL Server

41

Beschreiben Sie kurz die einzelnen Optionen zur Anwendungsbereitstellung, und weisen Sie auf die Beispiele hin.

Methodischer Hinweis

Architekturentwurf
Es gibt die folgenden typischen Optionen zur Anwendungsbereitstellung: Intelligenter Server (zwei Schichten) Der Groteil der Verarbeitung findet auf dem Server statt, whrend der Client die Prsentationsdienste verarbeitet. In vielen Fllen ist der Groteil der Geschftslogik in die Datenbank implementiert. Dieser Entwurf ist hilfreich, wenn Clients nicht ber ausreichend Ressourcen zum Verarbeiten der Geschftslogik verfgen. Der Server kann jedoch einen Engpass darstellen, weil Datenbank- und Geschftsdienste dieselben Hardwareressourcen verwenden. Unternehmensanwendungen, die mit dem Schwerpunkt auf der Datenbank entworfen werden, sind ein Beispiel fr diesen Entwurf. Intelligenter Client (zwei Schichten) Der Groteil der Verarbeitung findet auf dem Client statt, whrend der Server die Datendienste verarbeitet. Dies ist ein hufig verwendeter Entwurf. Der Netzwerkverkehr kann jedoch stark zunehmen und das Verarbeiten von Transaktionen kann lange dauern. Dies kann die Leistung beeintrchtigen. Ein Beispiel fr diesen Entwurf sind Anwendungen, die fr kleine Organisationen mit Produkten wie Microsoft Access entwickelt wurden. n-Schichten Das Verarbeiten wird auf einen Datenbankserver, einen Anwendungsserver und Clients verteilt. Bei diesem Ansatz wird die Logik von den Datendiensten getrennt, und es lassen sich bei Bedarf problemlos weitere Anwendungsserver oder Datenbankserver hinzufgen. Bei diesem Ansatz nimmt jedoch die Komplexitt zu und kleinere Anwendungen werden mglicherweise langsamer ausgefhrt. Beispiele fr diesen Entwurf sind Unternehmensanwendungen mit mehreren Ebenen und Anwendungen, die mit Transaktionsverarbeitungsmonitoren entwickelt werden. Internet Das Verarbeiten ist auf drei Schichten aufgeteilt, wobei sich die Geschfts- und Prsentationsdienste auf dem Webserver befinden und die Clients Internetbrowser verwenden. SQL Server verwendet XML-Untersttzung fr die Prsentation von Daten fr Browser. SQL Server kann jeden Client untersttzen, der ber einen Browser verfgt. Die Software muss nicht auf dem Client gepflegt werden. Ein Beispiel fr diesen Entwurf ist eine Website, die mehrere Webserver verwendet, um Verbindungen mit Clients zu verwalten, und eine einzige SQL Server-Datenbank verwendet, die fr Datenanforderungen zustndig ist. Sie knnen auf SQL Server ber HTTP mit Hilfe eines URLs zugreifen. So knnen Sie direkt auf Datenbankobjekte zugreifen und Vorlagendateien ausfhren. Dies ist nicht empfehlenswert in Umgebungen, die sehr sicher sein mssen und in denen die Leistung von groer Bedeutung ist.

42

Unterrichtseinheit 1: bersicht ber SQL Server

Entwerfen von Anwendungen mit Hilfe von Datenbank-APIs


Beschreiben Sie das Entwerfen einer Anwendung fr SQL Server mit Hilfe von Datenbank-APIs.

Thema

Schnittstelle fr Datenobjekte

ADO ADO

Einstieg

Sie knnen eine Datenbankanwendung entwickeln, um ber eine API auf SQL Server zuzugreifen.

Schnittstelle fr Anwendungsprogrammierungen

OLE DB OLE DB

andere DatenDatenquellen

Relationale Datenbanken

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen eine Datenbankanwendung entwickeln, die ber eine API auf SQL Server zugreift. Eine Datenbank-API enthlt die folgenden zwei Teile: Transact-SQL-Sprachanweisungen, die an die Datenbank bergeben werden. Eine Reihe von Funktionen oder objektorientierten Schnittstellen und Methoden, mit denen die Transact-SQL-Anweisungen an die Datenbank gesandt und die von der Datenbank zurckgegebenen Ergebnisse verarbeitet werden. Beispiele fr relationale Datenbankanwendungen sind Buchungssysteme von Fluggesellschaften und Banktransaktionssysteme. Methodischer Hinweis
Eine ausfhrliche Erluterung der Programmierschnittstellen finden die Kursteilnehmer in der SQL Server-Onlinedokumentation.

OLE DB
OLE DB ist eine COM-basierte API. Diese API ist eine Bibliothek von COMSchnittstellen, mit denen universeller Zugriff auf verschiedene Datenquellen mglich ist. SQL Server enthlt einen systemeigenen OLE DB-Provider. Der Provider untersttzt mit Hilfe von OLE DB geschriebene Anwendungen oder andere OLE DB verwendende APIs, wie z. B. ADO. ber den systemeigenen Provider bietet SQL Server zudem die Untersttzung von Objekten oder Komponenten, die OLE DB verwenden, wie z. B. ActiveX, ADO oder Microsoft .NET Enterprise Servers.

Unterrichtseinheit 1: bersicht ber SQL Server

43

ADO
Mit dieser Datenbank-API wird definiert, wie eine Anwendung geschrieben wird, um eine Verbindung mit einer Datenbank mit Hilfe von OLE DB herzustellen, und wie Transact-SQL-Befehle an die Datenbank bergeben werden. ADO ist eine Schnittstelle auf Anwendungsebene, die OLE DB verwendet. Da ADO OLE DB als Grundlage verwendet, knnen die Vorteile der von OLE DB bereitgestellten Datenzugriffsinfrastruktur genutzt werden. Gleichzeitig entfllt fr den Anwendungsentwickler die Notwendigkeit, COM-Schnittstellen zu programmieren. Entwickler knnen ADO fr allgemeine Zugriffsprogramme in Geschftsanwendungen verwenden (Buchhaltung, Personalabteilung, Kundenbetreuung). Sie knnen OLE DB zur Entwicklung von Tools und Dienstprogrammen oder fr Entwicklungen auf Systemebene verwenden (Entwicklungstools und Datenbank-Dienstprogramme).

44

Unterrichtseinheit 1: bersicht ber SQL Server

bungseinheit A: bersicht ber SQL Server


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit verwenden Sie die SQL ServerOnlinedokumentation, um nach Informationen zur Northwind-Datenbank zu suchen. Dann werden Sie ein Datenbankdiagramm fr die Northwind-Datenbank erstellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Anzeigen des Inhalts, Verwenden des Indexes und Suchen nach Informationen in der SQL Server-Onlinedokumentation sowie Speichern des Speicherortes von Informationen auf der Registerkarte Favoriten. Erstellen eines Datenbankdiagramms fr die Northwind-Datenbank.

Voraussetzungen
Keine.

Einrichten der bungseinheit


Nicht erforderlich.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Unterrichtseinheit 1: bersicht ber SQL Server

45

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

46

Unterrichtseinheit 1: bersicht ber SQL Server

bung 1 Verwenden der SQL Server-Onlinedokumentation


In dieser bung verwenden Sie die SQL Server-Onlinedokumentation, um Informationen zu SQL Server abzurufen. So zeigen Sie den Inhalt des Abschnitts Erste Schritte der SQL Server-Onlinedokumentation an In diesem Verfahren zeigen Sie den Inhalt der SQL Server-Onlinedokumentation an und machen sich mit den in der Dokumentation verwendeten Konventionen vertraut. 1. Melden Sie sich an der Schulungsraumdomne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. Klicken Sie auf der Taskleiste auf die Schaltflche Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft SQL Server, und klicken Sie dann auf Onlinedokumentation. 3. Sehen Sie sich in der Konsolenstruktur die Organisation der SQL ServerOnlinedokumentation an. 4. Klicken Sie auf der Registerkarte Inhalt in der Liste Aktive Untermenge auf (Gesamte Sammlung), und sehen Sie sich dann den Inhalt von Erste Schritte an. 5. Erweitern Sie in der Konsolenstruktur Erste Schritte mit der SQL ServerOnlinedokumentation, und klicken Sie dann auf Typografische Vereinbarungen. berprfen Sie die Informationen im Detailbereich. 6. Erweitern Sie in der Konsolenstruktur Verwenden des HTML-HilfeViewers, erweitern Sie Verwenden der SQL Server-Onlinedokumentation, und klicken Sie dann auf Finden eines Themas. berprfen Sie die Informationen im Detailbereich. 7. Erweitern Sie in der Konsolenstruktur Finden eines Themas, und klicken Sie dann auf Verwenden der Registerkarte "Suchen". berprfen Sie die Informationen im Detailbereich. So verwenden Sie die Index der SQL Server-Onlinedokumentation, um Informationen zur Northwind-Beispieldatenbank zu erhalten In diesem Verfahren verwenden Sie den Index der SQL Server-Onlinedokumentation, um schnell Informationen zur Northwind-Beispieldatenbank anzuzeigen. 1. Klicken Sie auf die Registerkarte Index, und geben Sie dann Northwind ein. 2. Doppelklicken Sie auf Northwind-Beispieldatenbank.

Unterrichtseinheit 1: bersicht ber SQL Server

47

3. Doppelklicken Sie im Dialogfeld Themen gefunden auf NorthwindBeispieldatenbank. berprfen Sie die Informationen im Detailbereich. 4. Klicken Sie auf die Registerkarte Favoriten, und klicken Sie dann auf Hinzufgen. Klicken Sie auf die Registerkarte Inhalt, und erweitern Sie dann in der Konsolenstruktur Northwind-Beispieldatenbank, und beachten Sie die verfgbaren Themen. So suchen Sie in der SQL Server-Onlinedokumentation nach einem Wort oder einem Ausdruck In diesem Verfahren verwenden Sie die SQL Server-Onlinedokumentation, um nach Informationen zur SQL Server-Architektur zu suchen. 1. Klicken Sie auf die Registerkarte Suchen, geben Sie sql NEAR Architektur ein, und klicken Sie dann auf Themen auflisten. Beachten Sie die Anzahl der gefundenen Themen. 2. Deaktivieren Sie auf der Registerkarte Suche das Kontrollkstchen hnliche Wrter suchen, aktivieren Sie das Kontrollkstchen Nur Titel suchen, und klicken Sie dann auf Themen auflisten. Beachten Sie, dass zwei Themen gefunden wurden. 3. Doppelklicken Sie auf Grundlegendes zur SQL Server 2000-Architektur. 4. Klicken Sie auf den Detailbereich, und drcken Sie dann STRG+F. 5. Geben Sie im Feld Suchen den Begriff oltp ein, und klicken Sie dann auf Weitersuchen. Beachten Sie, dass die Suche das erste Vorkommnis von oltp findet. 6. Schlieen Sie die SQL Server-Onlinedokumentation.

48

Unterrichtseinheit 1: bersicht ber SQL Server

bung 2 Erstellen eines Datenbankdiagramms


In dieser bung verwenden Sie den Datenbank-Diagrammerstellungs-Assistenten, um automatisch ein Diagramm fr die Northwind-Datenbank zu erstellen. Dann verwenden Sie den Abfrage-Designer, um eine Abfrage zu erstellen. So erstellen Sie ein Datenbankdiagramm In diesem Verfahren erstellen Sie mit Hilfe des Datenbank-Diagrammerstellungs-Assistenten ein Datenbankdiagramm der Northwind-Datenbank. 1. Klicken Sie auf der Taskleiste auf die Schaltflche Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft SQL Server, und klicken Sie dann auf Enterprise Manager. 2. Erweitern Sie in der Konsolenstruktur Microsoft SQL Servers, erweitern Sie SQL Server-Gruppe, und erweitern Sie dann Ihren Server. 3. Erweitern Sie Datenbanken, und erweitern Sie dann Northwind. 4. Klicken Sie mit der rechten Maustaste auf Diagramme, und klicken Sie dann auf Neues Datenbankdiagramm. Das Dialogfeld Willkommen wird angezeigt. 5. Fgen Sie mit Hilfe des Datenbank-Diagrammerstellungs-Assistenten die folgenden Tabellen zum Diagramm hinzu: Categories CustomerCustomerDemo CustomerDemographics Customers Employees EmployeeTerritories Order Details Orders Products Region Shippers Suppliers Territories 6. Klicken Sie auf der Symbolleiste auf das Symbol Zoom, und klicken Sie dann auf 100 %. 7. Klicken Sie auf der Symbolleiste auf das Symbol Speichern. 8. Geben Sie im Dialogfeld Speichern unter den Namen Northwind ein, und klicken Sie dann auf OK.

Unterrichtseinheit 1: bersicht ber SQL Server

49

So erstellen Sie eine Abfrage mit Hilfe des Abfrage-Designers In diesem Verfahren verwenden Sie den Abfrage-Designer, um eine Abfrage zu erstellen, in der die Tabellen Products und Categories verknpft werden. 1. Klicken Sie im Diagramm mit der rechten Maustaste auf Products, zeigen Sie auf Aufgabe, und klicken Sie dann auf Tabelle ffnen. Dadurch wird ein neues Fenster geffnet, dass alle Zeilen der ProductsTabelle anzeigt. 2. Klicken Sie auf der Symbolleiste auf das Symbol Diagrammbereich anzeigen/ausblenden. Dadurch wird das Tabellendiagramm der Products-Tabelle angezeigt. 3. Klicken Sie mit der rechten Maustaste auf einen freien Bereich des Diagrammbereichs, und klicken Sie dann auf Tabelle hinzufgen. 4. Doppelklicken Sie auf Categories, und klicken Sie dann auf Schlieen. Dadurch wird die Categories-Tabelle zum Diagrammbereich hinzugefgt, und die Beziehungen zwischen der Categories-Tabelle und der ProductsTabelle werden angezeigt. 5. Klicken Sie auf der Symbolleiste auf das Symbol SQL-Bereich anzeigen/ausblenden. Dadurch wird das erstellte Transact-SQL-Skript angezeigt. 6. Whlen Sie in der Products-Tabelle die Kontrollkstchen ProductName und UnitPrice aus, und whlen Sie in der Categories-Tabelle das Kontrollkstchen CategoryName aus. 7. Klicken Sie in der Products-Tabelle auf UnitPrice, und klicken Sie auf der Symbolleiste auf das Symbol Absteigend sortieren. Beachten Sie die nderungen des Transact-SQL-Skripts. 8. Lschen Sie im SQL-Bereich das Sternchen und das Komma in der SELECT-Anweisung. 9. Klicken Sie auf der Symbolleiste auf das Symbol Ausfhren. Welches Produkt hat den hchsten Preis? Cte de Blaye; 263,5 ____________________________________________________________ ____________________________________________________________ Anmerkung Der Abfrage-Designer wird als MMC-Snap-In (Microsoft Management Console) ausgefhrt. Beachten Sie, dass jetzt drei MMC-Fenster aktiv sind: SQL Server Enterprise Manager, Datenbankdesigner und AbfrageDesigner.

50

Unterrichtseinheit 1: bersicht ber SQL Server

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Informationen zu SQL Server SQL Server-Integration SQL Server-Datenbanken SQL Server-Sicherheit Arbeiten mit SQL Server

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klren Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

1. Sie haben in SQL Server ein neues Anmeldekonto fr eine Windows 2000Gruppe erstellt. Die Mitglieder dieser Gruppe sollen in der Lage sein, SQL Server zu verwenden. Welche zustzlichen Sicherheitsaufgaben mssen Sie ausfhren? Sie mssen die Windows 2000-Gruppe zur Datenbank hinzufgen, auf die die Benutzer zugreifen sollen, und dann mssen Sie Berechtigungen fr die Datenbankobjekte erteilen, auf die die Benutzer zugreifen sollen. ____________________________________________________________ ____________________________________________________________ 2. Sie mchten Metadaten zu Objekten in einer SQL Server-Datenbank anzeigen. Welche Methoden wrden Sie verwenden? Sie knnen die Informationsschemasichten abfragen, gespeicherte Systemprozeduren ausfhren oder Systemfunktionen verwenden. Sie knnen auerdem Systemtabellen direkt abfragen. Dies ist jedoch nicht ratsam, da sich Systemtabellen in knftigen Versionen des Produkts gendert haben knnen. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 1: bersicht ber SQL Server

51

3. Sie mchten auf zwei Tabellen verweisen, die sich in verschiedenen Datenbanken auf dem gleichen Server befinden. Aus der Inventory-Datenbank mchten Sie auf eine Tabelle in der Sales-Datenbank verweisen. Wie wrden Sie in einer Abfrage auf die Tabelle in der Sales-Datenbank verweisen? Sie wrden auf die Tabelle in der Sales-Datenbank mit Hilfe eines vollgekennzeichneten Namens verweisen. Sie knnten beispielsweise Sales.dbo.Tabellenname oder Sales.Tabellenname angeben. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 1: bersicht ber SQL Server

This page is intentionally left blank.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung


Inhalt bersicht Entwerfen der Anwendungsarchitektur einer Organisation SQL Server-Programmierungstools Transact-SQL (Programmiersprache) Elemente von Transact-SQL Zustzliche Sprachelemente Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen Empfohlene Methoden bungseinheit A: bersicht ber Transact-SQL Lernzielkontrolle 1 2 8 11 12 20 33 44 45 53

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

iii

Hinweise fr den Kursleiter


Prsentation: 45 Minuten bungseinheit: 30 Minuten In dieser Unterrichtseinheit erhalten die Kursteilnehmer eine bersicht ber die Anwendungsarchitektur auf Organisationsebene und Transact-SQL als Programmiersprache. Transact-SQL ist eine Datendefinitions-, Datenbearbeitungs- und Datensteuerungssprache. Bei den Kursteilnehmern werden Kenntnisse in Bezug auf ANSI-SQL und grundlegende Programmierkonzepte wie Funktionen, Operatoren, Variablen und Ablaufsteuerungsanweisungen, die im Microsoft Official Curriculum (MOC)-Kurs 2316A, Abfragen von Microsoft SQL Server 2000 mit Hilfe von Transact-SQL, behandelt werden, vorausgesetzt. Den Kursteilnehmern werden darber hinaus die verschiedenen Methoden zum Ausfhren von Transact-SQL vermittelt. In der bungseinheit schreiben die Kursteilnehmer SELECT-Anweisungen, ndern eine Skriptdatei und verwenden Systemfunktionen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Konzepte einer Anwendungsarchitektur auf Organisationsebene. Beschreiben der primren Programmierungstools von Microsoft SQL Server 2000. Erlutern des Unterschieds zwischen den beiden primren Programmierungstools von SQL Server. Beschreiben der grundlegenden Elemente von Transact-SQL. Beschreiben der Verwendung von lokalen Variablen, Operatoren, Funktionen, Ablaufsteuerungsanweisungen und Kommentaren. Beschreiben der verschiedenen Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_02.ppt Die Beispieldatei C:\Moc\2328A\Demo\D02_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

iv

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch. Bearbeiten Sie alle Vorfhrungen. Machen Sie sich mit der Prsentation vertraut. Gehen Sie alle relevanten Whitepaper auf der Kursleiter-CD durch.

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Entwerfen der Anwendungsarchitektur einer Organisation Weisen Sie darauf hin, dass die Kursteilnehmer Anwendungen mit Hilfe logischer Schichten und Dienste entwerfen knnen. Betonen Sie, dass ein physischer Anwendungsentwurf von der Auswahl der Architektur und von der Art und Weise der Verteilung der Geschftslogik auf Anwendungskomponenten abhngig ist. SQL Server-Programmierungstools Geben Sie eine Einfhrung in SQL Query Analyzer. Fhren Sie die Grundfunktionen von SQL Query Analyzer vor. Weisen Sie darauf hin, dass die Kursteilnehmer eine Abfrage ganz oder teilweise ausfhren, die Abfrageergebnisse in einem Raster anzeigen und einen Ausfhrungsplan erstellen knnen. Geben Sie eine bersicht ber das Befehlszeilen-Dienstprogramm osql. Weisen Sie bei Fragen von Kursteilnehmern zum Dienstprogramm isql darauf hin, dass das Dienstprogramm osql die Schnittstelle fr Anwendungsprogrammierung (Application Programming Interface, API) ODBC (Open Database Connectivity), die mehr Funktionalitt bietet, zum Herstellen einer Verbindung mit SQL Server verwendet, whrend das Dienstprogramm isql dazu die frhere DB-Library-API verwendet. Transact-SQL (Programmiersprache) Weisen Sie die Kursteilnehmer darauf hin, dass Transact-SQL die von SQL Server verwendete Programmiersprache ist. Da die Kursteilnehmer normalerweise mit den Prinzipien des Programmierens vertraut sein sollten, werden in dieser Unterrichtseinheit keine Grundlagen zum Programmieren oder Schreiben von Anweisungen behandelt. Stattdessen wird eine bersicht gegeben und besonders auf die wichtigsten Unterschiede zwischen Transact-SQL und ANSI SQL, der ISO-Sprache (International Organizationfor Standardization), eingegangen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Elemente von Transact-SQL In diesem Abschnitt werden die Sprachelemente von Transact-SQL besprochen. Da die Kursteilnehmer bereits mit Programmierungsgrundlagen vertraut sein sollten, geben Sie eine bersicht ber DDL-Anweisungen (Data Definition Language, Datendefinitionssprache), DML-Anweisungen (Data Manipulation Language, Datenbearbeitungssprache) und DCLAnweisungen (Data Control Language, Datensteuerungssprache), und erlutern Sie SQL Server-Objektnamen und die Richtlinien fr das Benennen von Datenbankobjekten. Zustzliche Sprachelemente Erlutern Sie lokale und Systemvariablen, die verschiedenen Operatoren und Funktionen, Sprachkonstrukte zur Ablaufsteuerung sowie Kommentarzeichen. In der Unterrichtseinheit werden die wichtigsten Schlsselwrter oder Klauseln behandelt, die die Kursteilnehmer im Allgemeinen verwenden. Ausfhrliche Informationen zu weiteren Schlsselwrtern erhalten die Kursteilnehmer in der SQL Server-Onlinedokumentation. Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen Machen Sie die Kursteilnehmer mit den verschiedenen Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen vertraut. Dazu zhlen das dynamische Erstellen von Anweisungen, das bergeben von Batches und das Ausfhren von Skripts und Transaktionen. Fhren Sie diese Verfahren nach Mglichkeit mit Hilfe von SQL Query Analyzer vor.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Fr das Einrichten der bungseinheit gibt es keine Anforderungen, die die Replikation oder die Anpassung betreffen.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

This page is intentionally left blank.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Entwerfen der Anwendungsarchitektur einer Organisation SQL Server-Programmierungstools Transact-SQL (Programmiersprache) Elemente von Transact-SQL Zustzliche Sprachelemente Mglichkeiten zum Ausfhren von Transact-SQLAnweisungen

Einstieg

In dieser Unterrichtseinheit erhalten Sie Informationen ber die Anwendungsarchitektur auf Organisationsebene und TransactSQL als Programmiersprache.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Konzepte einer Anwendungsarchitektur auf Organisationsebene. Beschreiben der primren Programmierungstools von Microsoft SQL Server 2000. Erlutern des Unterschieds zwischen den beiden primren Programmierungstools von SQL Server. Beschreiben der grundlegenden Elemente von Transact-SQL. Beschreiben der Verwendung von lokalen Variablen, Operatoren, Funktionen, Ablaufsteuerungsanweisungen und Kommentaren. Beschreiben der verschiedenen Mglichkeiten zum Ausfhren von Transact-SQL-Anweisungen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Entwerfen der Anwendungsarchitektur einer Organisation


Thema
Stellen Sie die Themen dieses Abschnitts vor.

Einstieg

Identifizieren logischer Schichten Entwerfen physischer Schichten Zugreifen auf Daten

In dieser Unterrichtseinheit erfahren Sie, wie Sie die Anwendungsarchitektur einer Organisation beschreiben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server ist hufig Bestandteil einer verteilten Anwendung. Der Entwurf einer SQL Server-Implementierung fr eine Unternehmenslsung hngt von der Architekturauswahl ab und von der Art und Weise, wie die Logik auf die Anwendungen verteilt wird.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Identifizieren logischer Schichten


Identifizieren Sie die logischen Schichten in der Anwendungsarchitektur einer Organisation.

Thema

Datendarstellung Benutzerdefinierte WindowsAnwendungen Webbrowser

Anwendungslogik Benutzerdefinierte Komponenten Integrierte Anwendungen und Dienste Geschftsregeln Datenregeln

Datendienste Datenzugriffslogik Datenspeicherung

Einstieg

Die Anwendungsarchitektur einer Organisation besteht aus logischen Schichten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Anwendungsarchitektur einer Organisation besteht aus logischen Schichten. Dabei handelt es sich um die Schichten fr die Datendarstellung, Anwendungslogik und Datendienste.

Datendarstellung
Die Datendarstellungsschicht wird auch als Benutzerdienste bezeichnet und ermglicht Benutzern das Durchsuchen und Bearbeiten von Daten. Die beiden wichtigsten Arten von Client-Anwendungen sind benutzerdefinierte Microsoft Windows-Anwendungen und Webbrowser. Die Datendarstellungsschicht verwendet die von der Schicht fr die Anwendungslogik bereitgestellten Dienste.

Anwendungslogik
Diese Schicht enthlt die Anwendungslogik, in der Regeln und Prozesse definiert werden. Sie ermglicht Skalierbarkeit, d. h. es greifen nicht viele Clients direkt auf eine Datenbank zu (wobei jeder Client eine eigene Verbindung bentigt), sondern Clients knnen eine Verbindung mit Unternehmensdiensten herstellen, die ihrerseits wiederum eine Verbindung mit den Datenservern aufbauen. Unternehmensdienste knnen benutzerdefinierte Komponenten oder integrierte Anwendungen und Dienste sein, wie z. B. Webdienste. Die Schicht fr die Anwendungslogik kann auch Komponenten enthalten, die Transaktionsdienste, Messagingdienste oder Dienste zur Objekt- und Verbindungsverwaltung verwenden.

Datendienste
Die Datendienste schlieen die Datenzugriffslogik und Datenspeicherung ein. Diese Dienste knnen gespeicherte SQL Server-Prozeduren zum Verwalten des Datenverkehrs und der Datenintegritt auf dem Datenbankserver einschlieen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Entwerfen physischer Schichten


Erlutern Sie Mglichkeiten zum Integrieren logischer Schichten in physische Modelle.

Thema

Zweischichtenmodell

Einstieg

Sie haben verschiedene Mglichkeiten, logische Schichten physisch in eine verteilte Umgebung einzubinden.

Application Logic Datendarstellung Mehrschichtenmodell Datendienste

IIS

Komponenten

Datendarstellung

Anwendungslogik

Datendienste

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie haben verschiedene Mglichkeiten, logische Schichten physisch in eine verteilte Umgebung einzubinden. Obwohl alle logischen Schichten auf einem einzigen Computer vorhanden sein knnen, ist es blich, sie in einem Zweischichten- oder Mehrschichtenmodell zu verteilen. Dadurch knnen Sie Logik, Geschftsregeln und Verarbeitung dort implementieren, wo sie am effektivsten sind.

Verwenden eines Zweischichtenmodells


Wenn Sie dieses Modell verwenden, knnen Sie die Darstellung und die Anwendungslogik auf dem Client und die Datendienste auf einem Server implementieren. Alternativ knnen Sie die Anwendungslogik in gespeicherten Prozeduren auf dem Server implementieren. Sie knnen sich auch fr eine gemischte Lsung entscheiden, bei der die Anwendungslogik zwischen dem Client und dem Server aufgeteilt wird. Zweischichtenentwrfe sind nicht so gebruchlich wie Mehrschichtenentwrfe, was auf die zunehmende Verbreitung von Internetanwendungen zurckzufhren ist. Sie sind nicht genauso gut skalierbar und knnen auch nicht so leicht aufrechterhalten werden wie Mehrschichtenentwrfe.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Verwenden eines Mehrschichtenmodells


Das Mehrschichtenmodell, das auch als Drei- oder n-Schichtenmodell bezeichnet wird, ermglicht Ihnen das Verteilen der Logik auf mehrere Anwendungen. Geschftsregeln knnen vom Client oder von der Datenbank getrennt werden. Wenn dieses Modell im Internet angewendet wird, knnen Sie Darstellungsdienste zwischen einem Browserclient und einem IIS-Webserver (InternetInformationsdienste) aufteilen, sodass der Webserver die Webseiten formatiert, die vom Browser angezeigt werden. Das Mehrschichtenmodell ist fr Umgebungen mit sehr vielen Clients und vielen Anwendungen skalierbar, und Sie knnen die Arbeitsauslastung auf viele Computer verteilen. Ein Mehrschichtenmodell ist einfach zu verwalten, weil Sie eine nderung an einer Geschftsregel ohne Auswirkung auf andere Regeln vornehmen knnen. Auerdem werden bei einer Aktualisierung einer ASP (Aktive Server Page) auf einem Webserver automatisch alle Clients aktualisiert.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Zugreifen auf Daten


Thema
Erlutern Sie die verschiedenen Mglichkeiten, auf Daten zuzugreifen.
Anwendungen und Komponenten Anwendungen und Komponenten Access Daten Konsumenten Daten Provider Excel Benutzerdefinierte Clients Browser Browser IIS IIS

Einstieg

Sie knnen mit Hilfe von vordefinierten oder benutzerdefinierten Clients auf Unternehmensdaten zugreifen.

ActiveX Data Objects (ADO) ActiveX Data Objects (ADO) OLE DB Daten Provider (Dienste) OLE DB Daten Provider (Dienste) Cursor Abfrageprozessoren Geschftsdienste

OLE DB Daten Provider (Daten) OLE DB Daten Provider (Daten) ODBC SQL Server Jet Active Directory Exchange Excel Andere OLE DBProvider

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Microsoft-Technologien ermglichen Ihnen das Zugreifen auf Unternehmensdaten ber eine breite Palette vordefinierter oder benutzerdefinierter Clients, die eine Datenzugriffs-Programmierschnittstelle verwenden.

Verwenden vordefinierter Clients


Sie knnen vordefinierte Clientanwendungen fr den Zugriff auf Daten auf SQL Server verwenden. Die Datenabruflogik ist Bestandteil der Clientanwendung. Microsoft Office 2000 schliet Microsoft Access und Microsoft Excel ein. In einer Mehrschichtenlsung verwenden Sie diese Anwendungen in erster Linie fr Darstellungsdienste. Sie knnen sie jedoch auch fr die Anwendungslogik und fr Datendienste verwenden. Mit Hilfe dieser Anwendungen knnen Benutzer Daten vom Server anzeigen und Ad-hoc-Abfragen ausfhren. Sie knnen sie zum Abrufen von SQL Server-Daten oder als Client in einem Mehrschichtenmodell verwenden. Darber hinaus knnen Sie Office 2000 als Entwicklungsumgebung zum Erstellen von Datenzugriffsanwendungen verwenden. Microsoft Access und Microsoft Excel sind Beispiele fr vordefinierte Clients mit einer Reihe von Funktionen. Sie knnen auch vordefinierte Clients verwenden, die nur Darstellungsdienste bieten, z. B. einen Browser, der mit IIS (Internet-Informationsdienste) kommuniziert.

Erstellen von benutzerdefinierten Clients


Mit Hilfe einer Datenzugriffs-Programmierschnittstelle und einer Entwicklungsumgebung, wie z. B. Microsoft Visual Studio, Version 6.0, Enterprise Edition, knnen Sie benutzerdefinierte Clients erstellen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Bereitstellen eines universellen Datenzugriffs


Benutzerdefinierte Clients mssen mglicherweise auf verschiedene Datenquellen im Unternehmen zugreifen. MDAC (Microsoft Data Access Components) ist eine Schnittstelle, die eine Kommunikation mit verschiedenen Datenquellen ermglicht. Verwenden Sie fr diese Kommunikation die folgenden MDAC-Komponenten: OLE DB. Eine Gruppe von Komponentendienste-Schnittstellen, die einen einheitlichen Zugriff auf Daten, die auf unterschiedlichen Informationsquellen gespeichert sind, bereitstellen. Mit OLE DB knnen Sie auf relationale und nicht-relationale Datenquellen zugreifen. Microsoft ActiveX Data Objects (ADO). Eine benutzerfreundliche Schnittstelle fr Anwendungsprogrammierung (Application Programming Interface, API) fr alle OLE DB-Datenprovider. Sie knnen ADO in sehr vielen Datenzugriffsanwendungs-Szenarien verwenden. OLE DB und ADO ermglichen Ihnen das Erstellen von Datenkomponenten, die die von den Komponentendiensten bereitgestellten integrierten Dienste verwenden. ADO ermglicht Ihnen Folgendes: ffnen und Verwalten von Verbindungen. Erstellen von Ad-hoc-Abfragen. Ausfhren von gespeicherten Prozeduren auf SQL Server. Abrufen von Ergebnissen und Verwenden von Cursorn. Zwischenspeichern von Abfrageergebnissen auf dem Client. Aktualisieren von Zeilen in der Datenbank. Schlieen von Verbindungen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

SQL Server-Programmierungstools
Geben Sie eine bersicht ber die Programmierungstools von SQL Server.

Thema

SQL Query Analyzer Syntaxelemente werden automatisch farbig markiert Mehrere Abfragefenster Benutzerdefinierte Sichten von Resultsets Grafische Ausfhrungsplne Ausfhren von Teilen eines Skripts osql (Dienstprogramm) Befehlszeilen-Dienstprogramm

Einstieg

SQL Server verfgt ber viele Programmierungstools. Am hufigsten werden SQL Query Analyzer und das Dienstprogramm osql verwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server 2000 bietet eine Reihe von Programmierungstools, darunter SQL Query Analyzer und das Dienstprogramm osql. SQL Query Analyzer ist eine Microsoft Windows-basierte Anwendung und osql ein Dienstprogramm, das von einer Befehlszeile aus ausgefhrt werden kann.

SQL Query Analyzer


Mit SQL Query Analyzer knnen Sie Abfrageanweisungen und -ergebnisse gleichzeitig anzeigen. Darber hinaus knnen Sie SQL Query Analyzer zum Schreiben, ndern und Speichern von Transact-SQL-Skripts verwenden. SQL Query Analyzer stellt folgende Funktionen bereit: Benutzerdefiniertes Markieren von Syntaxelementen. Whrend Sie eine Abfrage schreiben, markiert SQL Query Analyzer Schlsselwrter, Zeichenfolgen und andere Sprachelemente. Sie knnen angeben, wie diese Elemente angezeigt werden sollen. Mehrere Abfragefenster, jedes mit einer eigenen Verbindung. Benutzerdefinierte Sichten von Resultsets. Sie knnen die Ergebnisse in der Standardform fr ein Resultset oder in einem Raster anzeigen, sodass Sie die Ergebnisse wie in einer Tabelle ndern knnen. Grafische Ausfhrungsplne, die beschreiben, wie SQL Server die Abfrage ausfhrt. Sie knnen den optimierten Ausfhrungsplan anzeigen und Ihre Syntax berprfen. Die Fhigkeit, Teile eines Skripts auszufhren. Sie knnen Teile eines Skripts auswhlen, und SQL Server fhrt dann nur diese Teile aus.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Weitere Informationen

osql (Dienstprogramm)
Mit dem Dienstprogramm osql knnen Sie Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien schreiben. Es verwendet ODBC (Open Database Connectivity), um mit dem Server zu kommunizieren. Sie knnen das Dienstprogramm direkt von der Betriebssystemebene mit den unten aufgefhrten Argumenten starten, wobei die Gro- und Kleinschreibung beachtet werden muss. Nachdem osql gestartet wurde, nimmt es Transact-SQL-Anweisungen an und sendet sie interaktiv an SQL Server. Die Ergebnisse werden von osql formatiert und auf dem Bildschirm angezeigt. Beenden Sie osql mit den Befehlen QUIT oder EXIT. osql -U login_id [-e] [-E] [-p] [-n] [-d db_name] [-q query] [-Q query] [-c cmd_end] [-h headers] [-w column_width] [-s col_separator] [-t time_out] [-m error_level] [-L] [-?] [-r {0 | 1}] [-H wksta_name] [-P password] [-R] [-S server_name] [-i input_file] [-o output_file] [-a packet_size] [-b] [-O] [-l time_out] Anmerkung Bei den Parametern in osql-Anweisungen wird zwischen Ground Kleinschreibung unterschieden.

Das Dienstprogramm isql wird in diesem Kurs nicht behandelt, da es DB-Library verwendet, um mit dem Server zu kommunizieren, und Unicode-Datentypen nicht untersttzt.

Syntax

Methodischer Hinweis

Weisen Sie darauf hin, dass vor Argumenten entweder ein Gedankenstrich (-) oder ein Schrgstrich (/) stehen kann.

In der folgenden Tabelle werden die am hufigsten verwendeten Argumente beschrieben.


Argument -U login_id Beschreibung Der Benutzername. Bei Benutzernamen wird zwischen Gro- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf. Verwendet eine vertraute Verbindung, statt ein Kennwort anzufordern. Zeigt eine Syntaxzusammenfassung der osql-Optionen an. Ein vom Benutzer angegebenes Kennwort. Wenn die Option -P nicht verwendet wird, fordert osql zur Eingabe eines Kennwortes auf. Wenn die Option -P ohne Kennwort am Ende der Befehlszeile verwendet wird, verwendet osql das Standardkennwort (NULL). Bei Kennwrtern wird zwischen Gro- und Kleinschreibung unterschieden. Wird weder die Option -U noch -P verwendet, verwendet SQL Server das aktuell angemeldete Benutzerkonto und fordert nicht zur Eingabe eines Kennwortes auf. Gibt den SQL Server an, mit dem die Verbindung hergestellt werden soll. server_name ist der Name des Servercomputers im Netzwerk. Diese Option ist erforderlich, wenn Sie osql von einem Remotecomputer im Netzwerk aus ausfhren. Identifiziert die Datei, die einen Batch mit Transact-SQL-Anweisungen oder gespeicherten Prozeduren enthlt. Sie knnen auch das Kleiner-als-Zeichen (<) anstelle von -i verwenden.

-E -? -P password

-S server_name

-i input_file

10

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung (Fortsetzung) Argument -o output_file Beschreibung Identifiziert die Datei, die die Ausgabe von osql empfngt. Sie knnen das Grer-als-Zeichen (>) anstelle von -o verwenden. Befindet sich die Eingabedatei im Unicode-Format, gilt dies auch fr die Ausgabedatei, wenn Sie -o angeben. Befindet sie sich nicht im Unicode-Format, hat die Ausgabedatei das OEM-Format. Gibt an, dass osql bei einem Fehler beendet wird und einen Microsoft MS-DOS ERRORLEVEL-Wert zurckgibt. Fr die DOS ERRORLEVEL-Variable wird der Wert 1 zurckgegeben, wenn der SQL Server-Fehler einen Schweregrad von 10 oder hher hat. Andernfalls wird der Wert 0 zurckgegeben. MS-DOS-Batchdateien knnen den Wert von DOS ERRORLEVEL testen und den Fehler entsprechend behandeln.

-b

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

11

Transact-SQL (Programmiersprache)
Thema
Geben Sie eine bersicht ber die SQL ServerProgrammiersprache.

Einstieg

SQL Server-Implementierung der Eingangsstufe des ISO-Standards ANSI-SQL Kann von jedem mit der Eingangsstufe von ANSI-SQLkompatiblen Produkt ausgefhrt werden Enthlt darber hinaus einzigartige Funktionen

Bei Transact-SQL handelt es sich um eine Version der SQL-Programmiersprache, die ausschlielich in SQL Server verwendet wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Transact-SQL ist die SQL Server-Implementierung der Eingangsstufe (Entry Level) des ISO-Standards (International Standards Organization) ANSI-SQL. Die ANSI-SQL-kompatiblen Sprachelemente von Transact-SQL knnen von jedem mit der Eingangsstufe von ANSI-SQL-kompatiblen Produkt ausgefhrt werden. Transact-SQL enthlt darber hinaus zustzliche Sprachelemente, die fr diese Sprache einzigartig sind. Wichtig Es wird empfohlen, Skripts zu schreiben, die ausschlielich Anweisungen im ANSI-SQL-Standard einschlieen, um die Kompatibilitt und Portabilitt der Datenbank zu verbessern.

12

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Elemente von Transact-SQL


Thema
Geben Sie eine bersicht ber die grundlegenden Elemente der Programmiersprache Transact-SQL.

DCL-Anweisungen (Data Control Language) DDL-Anweisungen (Data Definition Language) DML-Anweisungen (Data Manipulation Language) SQL Server-Objektnamen Benennungsrichtlinien

Einstieg

Beim Schreiben und Ausfhren von Transact-SQLAnweisungen verwenden Sie einige dieser Sprachelemente.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Schreiben und Ausfhren von Transact-SQL-Anweisungen verwenden Sie verschiedene Sprachelemente, mit denen ermittelt wird, wer die Daten anzeigen oder ndern, Objekte in der Datenbank erstellen und die Daten abfragen und ndern kann. Beachten Sie mglichst die Regeln fr das Benennen von SQL Server-Objekten, und machen Sie sich mit den Benennungsrichtlinien fr Datenbankobjekte vertraut.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

13

DCL-Anweisungen (Data Control Language)


Thema
Geben Sie den Kursteilnehmern eine Einfhrung in DCL-Anweisungen.

Berechtigungen erteilen oder ndern GRANT DENY REVOKE Standardmig knnen nur die Rollen sysadmin, dbcreator, db_owner und db_securityadmin DCLAnweisungen ausfhren

Einstieg

DCL-Anweisungen steuern den Zugriff auf Datenbankobjekte und auf die Berechtigung, bestimmte Anweisungen auszufhren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Weitere Informationen zu DCL-Anweisungen finden Sie im Kurs 2322A, Verwalten einer Microsoft SQL Server 2000-Datenbank.

Sie verwenden DCL-Anweisungen, um die einem Datenbankbenutzer oder einer Rolle zugeordneten Berechtigungen zu ndern. In der folgenden Tabelle sind die DCL-Anweisungen erlutert.
Anweisung GRANT Beschreibung Erstellt einen Eintrag im Sicherheitssystem, der es einem Benutzer ermglicht, mit Daten zu arbeiten oder bestimmte Transact-SQLAnweisungen auszufhren. Erstellt einen Eintrag im Sicherheitssystem, der eine Berechtigung eines Sicherheitskontos ablehnt und verhindert, dass der Benutzer, die Gruppe oder die Rolle die Berechtigung ber die Gruppen- und Rollenmitgliedschaft erbt. Entfernt eine zuvor erteilte oder verweigerte Berechtigung.

DENY

REVOKE

Standardmig knnen Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_securityadmin DCL-Anweisungen ausfhren. Beispiel In diesem Beispiel wird der public-Rolle die Berechtigung zum Abfragen der Products-Tabelle erteilt.
USE Northwind GRANT SELECT ON Products TO public

14

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

DDL-Anweisungen (Data Definition Language)


Geben Sie den Kursteilnehmern eine Einfhrung in DDL-Anweisungen.

Thema

Definieren der Datenbankobjekte CREATE object_type object_name ALTER object_type object_name DROP object_type object_name

Einstieg

DDL-Anweisungen definieren eine Datenbank, indem Datenbanken, Tabellen und benutzerdefinierte Datentypen erstellt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** DDL-Anweisungen (Data Definition Language) definieren die Datenbank, indem Datenbanken, Tabellen und benutzerdefinierte Datentypen erstellt werden. Darber hinaus knnen Sie mit DDL-Anweisungen Datenbankobjekte verwalten. Zu den DDL-Anweisungen zhlen die folgenden: CREATE object_type object_name. ALTER object_type object_name. DROP object_type object_name. Standardmig knnen nur Mitglieder der Rollen sysadmin, dbcreator, db_owner oder db_ddladmin DDL-Anweisungen ausfhren. Im Allgemeinen wird empfohlen, keinen anderen Konten das Erstellen von Datenbankobjekten zu ermglichen. Wenn Benutzer eigene Objekte in Datenbanken erstellen, muss jeder Objektbesitzer jedem Benutzer dieser Objekte die entsprechenden Berechtigungen erteilen. Wegen des enormen Verwaltungsaufwands sollte dies vermieden werden. Durch das Beschrnken der Anweisungsberechtigungen auf diese Rollen knnen darber hinaus auch Probleme mit dem Objektbesitz vermieden werden. Solche Probleme knnen auftreten, wenn ein Objektbesitzer aus einer Datenbank entfernt wurde oder wenn der Besitzer einer gespeicherten Prozedur oder Sicht nicht der Besitzer der zugrunde liegenden Tabellen ist.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

15

Wenn Objekte von mehreren Benutzerkonten erstellt werden, knnen die Rollen sysadmin und db_owner die SETUSER-Funktion verwenden, um die Identitt anderer Benutzer anzunehmen, oder die gespeicherte Systemprozedur sp_changeobjectowner, um den Besitzer eines Objekts zu ndern. Beispiel Das folgende Skript erstellt in der ClassNorthwind-Datenbank eine Tabelle mit dem Namen Client. Die Tabelle enthlt die Spalten CustomerID, Company, Contact und Phone.
USE ClassNorthwind CREATE TABLE Client (CustomerID int, Company varchar(40),Contact varchar(30), Phone char(12) )

16

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

DML-Anweisungen (Data Manipulation Language)


Thema
Geben Sie den Kursteilnehmern eine Einfhrung in DML-Anweisungen.

Einstieg

Verwenden Sie beim Arbeiten mit Daten in der Datenbank Folgendes: SELECT INSERT UPDATE DELETE

DML-Anweisungen arbeiten mit den Daten in der Datenbank.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** DML-Anweisungen arbeiten mit den Daten in der Datenbank. Mit Hilfe von DML-Anweisungen knnen Sie Daten ndern oder Informationen abrufen. Zu den DML-Anweisungen zhlen die folgenden: SELECT INSERT UPDATE DELETE Standardmig knnen nur Mitglieder der Rollen sysadmin, dbcreator, db_owner und db_datawriter DML-Anweisungen ausfhren. Beispiel In diesem Beispiel werden die Kategorie-ID, der Produktname, die Product ID und der Stckpreis der Produkte in der Northwind-Datenbank abgerufen.
SELECT CategoryID, ProductName, CategoryID, ProductID, UnitPrice FROM Northwind..Products

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

17

SQL Server-Objektnamen
Thema
Stellen Sie die Regeln zum Benennen von SQL ServerObjekten (Regeln fr Bezeichner) vor.

Standardmige Bezeichner Das erste Zeichen muss ein alphabetisches Zeichen sein Andere Zeichen knnen Buchstaben, Zahlen oder Symbole sein Bezeichnernamen, die mit einem Symbol beginnen, werden in besonderen Fllen verwendet Begrenzte Bezeichner Verwenden, wenn Namen eingebettete Leerzeichen enthalten Verwenden, wenn reservierte Wrter Teile von Namen sind In Klammern ([ ]) oder Anfhrungszeichen (" ") setzen

Einstieg

SQL Server stellt eine Reihe standardmiger Benennungsregeln fr Objektbezeichner bereit sowie eine Methode zum Verwenden von Trennzeichen fr Bezeichner, die nicht dem Standard entsprechen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis SQL Server stellt eine Reihe standardmiger Benennungsregeln fr Objektbezeichner bereit sowie eine Methode zum Verwenden von Trennzeichen fr Bezeichner, die nicht dem Standard entsprechen. Es wird empfohlen, beim Benennen von Objekten mglichst die Standardzeichen fr Bezeichner zu verwenden.

Fhren Sie vor, wie SQL Server Query Analyzer die Anweisungselemente automatisch farbcodiert, um reservierte Wrter, Zeichenfolgen usw. anzuzeigen.

Standardmige Bezeichner
Standardmige Bezeichner knnen zwischen einem und 128 Zeichen enthalten, darunter Buchstaben, Symbole (_, @, oder #) und Zahlen. Standardmige Bezeichner drfen keine eingebetteten Leerzeichen enthalten. Beachten Sie die folgenden Regeln, wenn Sie Bezeichner verwenden: Das erste Zeichen muss ein alphabetisches Zeichen sein (a-z oder A-Z). Nach dem ersten Zeichen kann ein Bezeichner Buchstaben, Zahlen oder eines der Symbole @, $, # oder _ einschlieen. Bezeichnernamen, die mit einem Symbol beginnen, werden in besonderen Fllen verwendet: Ein mit dem Zeichen @ beginnender Bezeichner steht fr eine lokale Variable oder einen lokalen Parameter. Ein mit einem Nummernzeichen (#) beginnender Bezeichner steht fr eine temporre Tabelle oder Prozedur. Ein mit einem doppelten Nummernzeichen (##) beginnender Bezeichner steht fr ein globales temporres Objekt. Anmerkung Namen fr temporre Objekte sollten einschlielich Nummernzeichen (#) oder doppeltem Nummernzeichen (##) eine Lnge von 116 Zeichen nicht berschreiten, da SQL Server an temporre Objekte ein internes numerisches Suffix vergibt.

18

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Begrenzte Bezeichner
Wenn ein Bezeichner alle Regeln fr das Format von Bezeichnern erfllt, knnen Sie ihn mit oder ohne Trennzeichen verwenden. Ein Bezeichner, der eine oder mehrere Regeln fr das Format von Bezeichnern nicht erfllt, muss immer begrenzt sein. Sie knnen begrenzte Bezeichner in folgenden Situationen verwenden: Namen enthalten eingebettete Leerzeichen. Reservierte Wrter werden fr Objektnamen oder Teile von Objektnamen verwendet. Sie mssen begrenzte Bezeichner in Klammern oder Anfhrungszeichen setzen, wenn Sie sie in Transact-SQL-Anweisungen verwenden. Bezeichner in Klammern werden durch eckige Klammern ([ ]) begrenzt:
SELECT * FROM [Blanks In Table Name]

Anmerkung Trennzeichen in Klammern knnen, unabhngig vom Status der SET QUOTED_IDENTIFIER-Option, immer verwendet werden. Bezeichner in Anfhrungszeichen werden durch Anfhrungszeichen ("") begrenzt:
SELECT * FROM "Blanks in Table Name"

Bezeichner in Anfhrungszeichen knnen Sie nur verwenden, wenn die SET QUOTED_IDENTIFIER-Option aktiviert ist.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

19

Benennungsrichtlinien
Stellen Sie empfohlene Benennungsrichtlinien vor.

Thema

Einstieg

Verwenden aussagekrftiger Namen, wenn mglich Verwenden kurzer Namen Verwenden einer klaren und einfachen Benennungskonvention Auswhlen eines Bezeichners, der den Objekttyp deutlich erkennen lsst Sichten Gespeicherte Prozeduren Verwenden von eindeutigen Objekt- und Benutzernamen

Richtlinien fr das Benennen von Datenbankobjekten sind wichtig, da mit Hilfe der Richtlinien der Objekttyp identifiziert und die Problembehandlung sowie das Debuggen erleichtert werden kann. Beim Benennen von Datenbankobjekten sollten Sie Folgendes beachten...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Richtlinien fr das Benennen von Datenbankobjekten sind wichtig, da mit Hilfe der Richtlinien der Objekttyp identifiziert und die Problembehandlung sowie das Debuggen erleichtert werden kann. Beim Benennen von Datenbankobjekten sollten Sie Folgendes beachten: Verwenden aussagekrftiger Namen, wenn mglich. Geben Sie zum Beispiel einer Spalte, die Kundennamen enthlt, den Namen Chr_Name_Of_Customer. Das Prfix Chr im Spaltennamen bezeichnet einen character-Datentyp. Verwenden kurzer Namen. Der Spaltenname Chr_Name_Of_Customer ist zwar sehr aussagekrftig, Sie knnen ihn jedoch auf Name oder Chr_Name abkrzen. Verwenden einer klaren und einfachen Benennungskonvention. Entscheiden Sie, was in Ihrer Situation am sinnvollsten ist, und achten Sie auf Einheitlichkeit. Vermeiden Sie zu komplexe Benennungskonventionen, weil sie schwer zu behalten sind. Sie knnen beispielsweise die Vokale entfernen, wenn ein Objektname einem Schlsselwort hneln soll (z. B. eine gespeicherte Prozedur fr Sicherungen mit dem Namen Bckup). Auswhlen eines Bezeichners, der den Objekttyp deutlich erkennen lsst (insbesondere bei Sichten und gespeicherten Prozeduren). Systemadministratoren verwechseln hufig Sichten mit Tabellen, was zu unerwarteten Problemen fhren kann. Wenn Sie z. B. eine Sicht erstellen, die zwei Tabellen miteinander verknpft, knnen Sie diese Sicht SoldView nennen. Verwenden von eindeutigen Objekt- und Benutzernamen. Vermeiden Sie es beispielsweise, eine Sales-Tabelle und eine sales-Rolle in derselben Datenbank zu erstellen.

20

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Zustzliche Sprachelemente
Thema
Geben Sie eine bersicht ber zustzliche Sprachelemente von TransactSQL.

Lokale Variablen Operatoren Funktionen Beispiele fr Funktionen Sprachkonstrukte zur Ablaufsteuerung Kommentare

Einstieg

Zu den zustzlichen Elementen von TransactSQL zhlen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zu den zustzlichen Elementen von Transact-SQL zhlen lokale Variablen, Operatoren, Funktionen, Ablaufsteuerungsanweisungen und Kommentare.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

21

Lokale Variablen
Definieren Sie eine Variable, und erlutern Sie, wie sie verwendet wird.

Thema

Benutzerdefiniert mit DECLARE-Anweisung Wert mit SET- oder SELECT-Anweisung zugewiesen


DECLARE @vLastName char(20), DECLARE @vLastName char(20), @vFirstName varchar(11) @vFirstName varchar(11) SET @vLastName = 'Dodsworth' SET @vLastName = 'Dodsworth' SELECT @vFirstName = FirstName SELECT @vFirstName = FirstName FROM Northwind..Employees FROM Northwind..Employees WHERE LastName = @vLastName WHERE LastName = @vLastName PRINT @vFirstName + ' ' + @vLastName PRINT @vFirstName + ' ' + @vLastName GO GO

Einstieg

Mit Hilfe der DECLAREAnweisung deklarieren Sie lokale Variablen im Hauptteil eines Batches oder einer Prozedur, und mit einer SET- oder SELECT-Anweisung weisen Sie ihnen Werte zu.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Fhren Sie dies mit Hilfe von SQL Query Analyzer vor.

Variablen sind Sprachelemente mit zugewiesenen Werten. Lokale Variablen knnen in Transact-SQL verwendet werden. Sie definieren eine lokale Variable in einer DECLARE-Anweisung und weisen ihr dann mit der SET- oder SELECT-Anweisung einen Anfangswert zu. Verwenden Sie die SET-Anweisung, wenn Sie den gewnschten Wert kennen. Verwenden Sie die SELECT-Anweisung, wenn Sie den gewnschten Wert in einer Tabelle suchen mssen. Nachdem Sie den Wert fr die Variable festgelegt haben, knnen Sie die Variable in der Anweisung, dem Batch oder der Prozedur verwenden, in der oder in dem sie deklariert wurde. Bei einem Batch handelt es sich um eine Gruppe von Transact-SQL-Anweisungen, die gemeinsam bergeben und als Gruppe ausgefhrt werden. Eine lokale Variable wird mit einem @-Zeichen vor dem Namen angezeigt. DECLARE {@local_variable data_type} [,...n] SET @local_variable_name = expression

Syntax

Beispiel

Im folgenden Beispiel werden zwei Variablen deklariert. Zum Festlegen des Wertes fr die @vLastName-Variable wird die SET-Anweisung und zum Suchen des Wertes fr die @vFirstName-Variable die SELECT-Anweisung verwendet. Anschlieend werden beide Variablen ausgedruckt.
DECLARE @vLastName char(20), @vFirstName varchar(11) SET @vLastName = 'Dodsworth' SELECT @vFirstName = FirstName FROM Northwind..Employees WHERE LastName = @vLastName PRINT @vFirstName + ' ' + @vLastName GO

Ergebnis

Anne Dodsworth

22

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Operatoren
Thema
Zeigen Sie, wie Operatoren zum ndern von Resultsets verwendet werden knnen.

Typen von Operatoren Arithmetisch Vergleich Verkettung von Zeichenfolgen Logisch Rangfolgenebenen von Operatoren

Einstieg

Mit Operatoren knnen Sie Berechnungen durchfhren oder Werte vergleichen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei Operatoren handelt es sich um Symbole, die mathematische Berechnungen, Zeichenfolgenverkettungen und Vergleiche zwischen Spalten, Konstanten und Variablen durchfhren. Sie knnen sie miteinander kombinieren und in Suchbedingungen verwenden. Beim Kombinieren von Operatoren ergibt sich die Reihenfolge, in der sie von SQL Server verarbeitet werden, aus einer vordefinierten Rangfolge. Teilsyntax {constant | column_name | function | (subquery)} [{arithmetic_operator | string_operator | AND | OR | NOT} {constant | column_name | function | (subquery)}]

Typen von Operatoren


SQL Server untersttzt vier Typen von Operatoren: arithmetische Operatoren, Vergleichsoperatoren, Operatoren fr die Verkettung von Zeichenfolgen und logische Operatoren. Methodischer Hinweis
Transact-SQL untersttzt auch bitweise Operatoren. Sie werden hier nicht behandelt, da sie nur sehr selten verwendet werden.

Arithmetisch
Arithmetische Operatoren fhren Berechnungen mit numerischen Spalten oder Konstanten durch. Transact-SQL untersttzt multiplikative Operatoren, einschlielich Multiplikation (*), Division (/) und Modulo (%) - der ganzzahlige Rest nach einer ganzzahligen Division -, sowie die Addition (+) und Subtraktion (-) additiver Operatoren.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

23

Vergleich
Vergleichsoperatoren vergleichen zwei Ausdrcke. Sie knnen Variablen, Spalten und Ausdrcke desselben Typs miteinander vergleichen. Die folgende Tabelle enthlt eine bersicht der Vergleichsoperatoren von Transact-SQL.
Operator = > < >= <= <> Bedeutung Gleich Grer als Kleiner als Grer als oder gleich Kleiner als oder gleich Ungleich

Verkettung von Zeichenfolgen


Der Operator fr die Verkettung von Zeichenfolgen (+) verkettet Zeichenfolgenwerte. Zeichenfolgenfunktionen ermglichen alle sonstigen Zeichenfolgenbearbeitungen.

Logisch
Die logischen Operatoren AND, OR und NOT verbinden Suchbedingungen in WHERE-Klauseln. Methodischer Hinweis

Weisen Sie darauf hin, dass sich die Rangfolgenebene der logischen Operatoren von anderen Programmiersprachen unterscheidet.

Rangfolgenebenen von Operatoren


Wenn Sie mehrere Operatoren (logische oder arithmetische) verwenden, um Ausdrcke zu kombinieren, verarbeitet SQL Server die Operatoren gem ihrer Rangfolge, wodurch der Ergebniswert beeinflusst werden kann. Die folgende Tabelle enthlt eine bersicht ber die Rangfolgenebene von Operatoren (die Ebenen sind nach Rangfolge absteigend sortiert).
Typ Gruppierung Arithmetisch Arithmetisch Andere Logische Operatoren Logische Operatoren Logische Operatoren Operator Primre Gruppierung Multiplikativ Additiv Verkettung von Zeichenfolgen NOT AND OR Symbol () */% -+ + NOT AND OR

SQL Server verarbeitet zunchst den am tiefsten geschachtelten Ausdruck. Wenn darber hinaus alle arithmetischen Operatoren in einem Ausdruck dieselbe Rangfolgenebene haben, werden sie von links nach rechts ausgewertet.

24

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Funktionen
Thema
Geben Sie eine bersicht ber die in SQL Server verfgbaren Funktionen.

Aggregatfunktionen
SELECT AVG (UnitPrice) FROM Products SELECT AVG (UnitPrice) FROM Products

Einstieg

Transact-SQL stellt viele Funktionen bereit, die Daten zurckgeben, darunter

Skalarfunktionen
SELECT DB_NAME() AS 'database' SELECT DB_NAME() AS 'database'

Rowsetfunktionen
SELECT * SELECT * FROM OPENQUERY FROM OPENQUERY (OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP') (OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP')

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Transact-SQL stellt viele Funktionen bereit, die Daten zurckgeben. Funktionen besitzen Eingabeparameter und geben Werte zurck, die in Ausdrcken verwendet werden knnen. Die Programmiersprache Transact-SQL stellt drei Funktionstypen zur Verfgung: Aggregatfunktionen, Skalarfunktionen und Rowsetfunktionen.

Weisen Sie die Kursteilnehmer darauf hin, dass sie Funktionen berall dort verwenden knnen, wo ein Ausdruck in einer SELECTAnweisung zulssig ist.

Aggregatfunktionen
Aggregatfunktionen verarbeiten eine Auflistung von Werten, geben aber einen einzelnen zusammenfassenden Wert zurck. In diesem Beispiel wird der Durchschnittswert der UnitPrice-Spalte fr alle Produkte in der Products-Tabelle ermittelt.
SELECT AVG(UnitPrice) FROM Products

Beispiel 1

Ergebnis

Products 28.8663 (1 row(s) affected)

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

25

Skalarfunktionen
Skalarfunktionen verarbeiten einen einzelnen Wert und geben dann einen einzelnen Wert zurck. Sie knnen diese Funktionen auf alle gltigen Ausdrcke anwenden. Die folgende Tabelle enthlt eine bersicht ber die Kategorien, in die Skalarfunktionen guppiert werden knnen.
Funktionskategorie Konfiguration Cursor Datum und Zeit Beschreibung Gibt Informationen zur aktuellen Konfiguration zurck. Gibt Informationen zu Cursorn zurck. Verarbeitet einen Datums- und Zeiteingabewert und gibt einen Zeichenfolgenwert, einen numerischen Wert oder einen Datums- und Zeitwert zurck. Fhrt eine Berechnung auf der Grundlage von Eingabewerten durch, die als Parameter fr die Funktion bereitgestellt werden, und gibt dann einen numerischen Wert zurck. Gibt Informationen zur Datenbank und den Datenbankobjekten zurck. Gibt Informationen zu Benutzern und Rollen zurck. Verarbeitet den Eingabewert einer Zeichenfolge (char oder varchar) und gibt eine Zeichenfolge oder einen numerischen Wert zurck. Fhrt Operationen aus und gibt Informationen zu Werten, Objekten und Einstellungen in SQL Server zurck. Gibt statistische Informationen zum System zurck. Verarbeitet einen Text- oder Imageeingabewert bzw. eine Textoder Imagespalte und gibt Informationen zum Wert zurck.

Mathematisch

Metadaten Sicherheit Zeichenfolge

System Statistische Systemfunktion Text und Image

Beispiel 2

Dieses Beispiel einer Metadatenfunktion gibt den Namen der aktuell verwendeten Datenbank zurck.
SELECT DB_NAME() AS 'database'

Ergebnis

Datenbank Northwind (1 row(s) affected)

Rowsetfunktionen
Rowsetfunktionen knnen wie Tabellenverweise in einer Transact-SQL-Anweisung verwendet werden. Beispiel 3 In diesem Beispiel wird eine verteilte Abfrage ausgefhrt, um Informationen aus der EMP-Tabelle abzurufen.
SELECT * FROM OPENQUERY(OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP')

26

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Beispiele fr Funktionen
Thema
Fhren Sie einige der allgemeinen Verwendungsmglichkeiten von Funktionen vor.

Einstieg

Funktionen werden hufig zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet.

SELECT 'ANSI:' AS Region, SELECT 'ANSI:' AS Region, CONVERT(varchar(30), GETDATE(), 102) AS Style CONVERT(varchar(30), GETDATE(), 102) AS Style UNION UNION SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113) SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113) UNION UNION SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111) SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)

Ergebnis Region
ANSI: ANSI: European: European: Japanese: Japanese:

Style Style
2000.03.22 1 1 2000.03.22 22 Mar 2000 14:20:00:010 1 22 Mar 2000 14:20:00:010 1 2000/03/22 2000/03/22

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Funktionen werden hufig zum Konvertieren von Datumsangaben aus dem Format eines Landes in das eines anderen Landes verwendet. Anmerkung Verwenden Sie die CONVERT-Funktion mit der Formatoption, um Datumsformate zu ndern und das Datumsformat zu ermitteln, das zurckgegeben wird. Dieses Beispiel zeigt, wie Datumsangaben in unterschiedliche Formate konvertiert werden knnen.
SELECT 'ANSI:' AS Region, CONVERT (varchar(30), GETDATE(), 102) AS Style UNION SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113) UNION SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)

Weisen Sie auf die Formatoptionen im Thema CONVERT in der SQL Server-Onlinedokumentation hin.

Beispiel 1

Ergebnis

Region ANSI: European: Japanese:

Style 2000.03.22 22 Mar 2000 14:20:00:010 2000/03/22

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

27

Beispiel 2

In diesem Beispiel wird die DATEFORMAT-Option der SET-Anweisung verwendet, um Datumsangaben fr die Dauer einer Verbindung zu formatieren. Diese Einstellung wird nur fr die Interpretation von Zeichenfolgen, die in Datumsangaben konvertiert werden, verwendet und hat keine Auswirkung auf die Anzeige von Datumswerten.
SET DATEFORMAT dmy GO DECLARE @vdate datetime SET @vdate = '29/11/00' SELECT @vdate

Ergebnis Beispiel 3

2000-11-29 00:00:00.000 (1 row(s) affected)

In diesem Beispiel werden der aktuelle Benutzername und die Anwendung zurckgegeben, die der Benutzer fr die aktuelle Sitzung oder Verbindung verwendet. Der Benutzer ist in diesem Beispiel ein Mitglied der sysadminRolle.
USE Northwind SELECT user_name(), app_name()

Ergebnis

dbo

MS SQL Query Analyzer

(1 row(s) affected)

Beispiel 4

In diesem Beispiel wird ermittelt, ob in der FirstName-Spalte der EmployeesTabelle der Northwind-Datenbank NULL-Werte zugelassen sind. Das Ergebnis 0 (FALSE) bedeutet, dass keine NULL-Werte zugelassen sind, und das Ergebnis 1 (TRUE) bedeutet, dass NULL-Werte zugelassen sind. Beachten Sie, dass die OBJECT_ID-Funktion in die COLUMNPROPERTYFunktion eingebettet ist. Dadurch knnen Sie den Wert fr object id der Employees-Tabelle abrufen.
USE Northwind SELECT COLUMNPROPERTY(OBJECT_ID('Employees'), 'FirstName', 'AllowsNull')

Ergebnis

0 (1 row(s) affected)

28

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Sprachkonstrukte zur Ablaufsteuerung


Geben Sie den Kursteilnehmern eine Einfhrung in die Sprachkonstrukte von Transact-SQL, die die Verarbeitung von Anweisungen steuern.

Thema

Anweisungsebene BEGINEND-Blcke IFELSE-Blcke WHILE-Konstrukte Zeilenebene CASE-Ausdruck

Einstieg

Transact-SQL untersttzt Sprachkonstrukte, die den Ablauf der Logik in Anweisungen steuern.

IF USER_NAME() <> 'dbo' IF USER_NAME() <> 'dbo' BEGIN BEGIN RAISERROR('Must be sysadmin RAISERROR('Must be sysadmin to Perform Operation', to Perform Operation', 10, 1) 10, 1) RETURN RETURN END END ELSE ELSE DBCC CHECKDB(Northwind) DBCC CHECKDB(Northwind)

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Transact-SQL enthlt mehrere Sprachkonstrukte, durch die der Ablauf der Logik in einer Anweisung gesteuert wird. Darber hinaus enthlt es den CASEAusdruck, der es Ihnen ermglicht, in einer SELECT- oder UPDATEAnweisung in jeweils einer Zeile Bedingungslogik zu verwenden.

Anweisungsebene
Mit den folgenden Sprachkonstrukten knnen Sie den Ablauf der Logik in einem Skript steuern: BEGINEND-Blcke Diese Elemente schlieen eine Reihe von Transact-SQLAnweisungen ein, sodass sie von SQL Server als Einheit behandelt werden. IFELSE-Blcke Diese Elemente geben an, dass SQL Server die erste Alternative ausfhren soll, wenn eine bestimmte Bedingung erfllt ist. Andernfalls soll SQL Server die zweite Alternative ausfhren. WHILE-Konstrukte Durch diese Elemente wird eine Anweisung wiederholt ausgefhrt, solange die angegebene Bedingung erfllt ist. Mit den Anweisungen BREAK und CONTINUE wird die Ausfhrung der Anweisungen innerhalb einer WHILE-Schleife gesteuert.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

29

Beispiel 1

In diesem Beispiel wird ermittelt, ob fr einen Kunden noch Bestellungen offen sind, bevor dieser Kunde aus der Kundenliste gelscht wird.
USE Northwind IF EXISTS (SELECT OrderID FROM Orders WHERE CustomerID = 'Frank') PRINT '*** Customer cannot be deleted ***' ELSE BEGIN DELETE Customers WHERE CustomerID = 'Frank' PRINT '*** Customer deleted ***' END

Zeilenebene
Ein CASE-Ausdruck listet Prdikate auf, weist jedem Prdikat einen Wert zu und testet dann jedes Prdikat. Wenn der Ausdruck den Wert TRUE zurckgibt, gibt der CASE-Ausdruck den Wert in der WHEN-Klausel zurck. Wenn der Ausdruck den Wert FALSE zurckgibt und eine ELSE-Klausel angegeben wurde, gibt SQL Server den Wert in der ELSE-Klausel zurck. Ein CASE-Ausdruck kann in jedem Ausdruck verwendet werden. Syntax CASE expression {WHEN expression THEN result} [,n] [ELSE result] END

30

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Beispiel

Im folgenden Beispiel wird der Lagerbestand von Produkten in der ProductsTabelle berprft, und es werden Meldungen ber die verfgbaren und die bestellten Mengen sowie die Information, dass ein Produkt nicht mehr gefhrt wird, zurckgegeben.
SELECT ProductID, 'Product Inventory Status' = CASE WHEN (UnitsInStock < UnitsOnOrder AND Discontinued = 0) THEN 'Negative Inventory - Order Now!' WHEN ((UnitsInStock-UnitsOnOrder) < ReorderLevel AND Discontinued = 0) THEN 'Reorder level reached- Place Order' WHEN (Discontinued = 1) THEN '***Discontinued***' ELSE 'In Stock' END FROM Northwind..Products

Ergebnis

ProductID

Product Inventory Status

1 In Stock 2 Negative Inventory - Order Now! 3 Negative Inventory - Order Now! 4 In Stock 5 ***Discontinued*** 6 In Stock 7 In Stock 8 In Stock 9 ***Discontinued*** 10 In Stock 11 Negative Inventory - Order Now! 12 In Stock 13 Reorder level reached - Place Order . . . (77 row(s) affected)

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

31

Kommentare
Thema
Geben Sie den Kursteilnehmern eine Einfhrung in die allgemeine Verwendung von Kommentaren.

Inline-Kommentare
SELECT ProductName, SELECT ProductName, (UnitsInStock + UnitsOnOrder) AS Max -- Berechnet Inventar (UnitsInStock + UnitsOnOrder) AS Max -- Berechnet Inventar , SupplierID , SupplierID FROM Products FROM Products

Einstieg

Kommentare sind nicht auszufhrende Zeichenfolgen, die Sie in eine Anweisung einfgen knnen, um die Anweisung zu kommentieren oder Teile davon whrend des Testens zu deaktivieren.

Blockkommentare
/* /* ** Dieser Code ruft alle Zeilen der Tabelle products ab ** Dieser Code ruft alle Zeilen der Tabelle products ab ** und zeigt den Einheitspreis, den Einheitspreis um 10% ** und zeigt den Einheitspreis, den Einheitspreis um 10% ** erhht und den Name des Produktes an. ** erhht und den Name des Produktes an. */ */ SELECT UnitPrice, (UnitPrice * 1.1), ProductName SELECT UnitPrice, (UnitPrice * 1.1), ProductName FROM Products FROM Products

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Kommentare sind nicht auszufhrende Textzeichenfolgen, die in Anweisungen platziert sind und die von der Anweisung ausgefhrte Aktion beschreiben oder eine oder mehrere Zeilen der Anweisung deaktivieren. Sie knnen Kommentare auf zwei Arten verwenden - in derselben Zeile wie die Anweisung (Inline) oder als Block.

Inline-Kommentare
Sie knnen Inline-Kommentare mit Hilfe von zwei Bindestrichen (--) erstellen, mit denen ein Kommentar von einer Anweisung abgegrenzt wird. TransactSQL ignoriert Text, der rechts von den Kommentarzeichen steht. Darber hinaus knnen Sie dieses Kommentarzeichen verwenden, um Zeilen einer Anweisung zu deaktivieren. Beispiel 1 In diesem Beispiel wird in einem Inline-Kommentar erklrt, welche Art von Berechnung durchgefhrt wird.
SELECT ProductName ,(UnitsInStock + UnitsOnOrder) AS Max -- Berechnet Inventar , SupplierID FROM Products

Beispiel 2

In diesem Beispiel wird eine zweite Gruppe von Inline-Kommentaren, erkennbar an dem zweiten Bindestrichpaar (--), dazu verwendet, die Ausfhrung eines Abschnitts (SupplierID) einer Anweisung zu verhindern.
SELECT ProductName ,(UnitsInStock + UnitsOnOrder) AS Max -- Berechnet Inventar -- , SupplierID FROM Products

32

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Blockkommentare
Sie knnen Kommentarblocks mit mehreren Zeilen erstellen, indem Sie ein Kommentarzeichen (/*) am Anfang des Kommentartextes platzieren, dann die Kommentare eingeben und den Kommentar mit einem abschlieenden Kommentarzeichen (*/) beenden. Mit diesem Kommentarkennzeichner knnen Sie eine oder mehrere Zeilen umfassende Kommentare oder Kommentarberschriften erstellen - beschreibenden Text, der die nachfolgenden Anweisungen dokumentiert. Kommentarberschriften schlieen hufig den Namen des Verfassers, das Datum der Erstellung und letzten nderung des Skripts, sowie Versionsinformationen und eine Beschreibung der von der Anweisung ausgefhrten Aktion ein. Anmerkung Blockkommentare knnen keine GO-Anweisung enthalten. Beispiel 3 Dieses Beispiel zeigt eine Kommentarberschrift, die mehrere Zeilen umfasst. Durch die beiden Sterne (**) vor jeder Zeile wird die Lesbarkeit verbessert.
/* ** Dieser Code ruft alle Zeilen der Tabelle products ab ** und zeigt den Einheitspreis, den Einheitspreis um 10% ** erhht und den Name des Produktes an. */ SELECT UnitPrice, (UnitPrice * 1.1), ProductName FROM Products

Anmerkung Sie sollten im gesamten Skript Kommentare platzieren, sodass die von den Anweisungen ausgefhrten Aktionen beschrieben werden. Dies ist besonders wichtig, wenn auch andere Personen das Skript berprfen oder implementieren mssen. Beispiel 4 Dieser Abschnitt eines Skripts ist in Kommentarzeichen gesetzt, damit er nicht ausgefhrt wird. Dies kann beim Debuggen oder bei der Fehlerbehandlung in einer Skriptdatei hilfreich sein.
/* DECLARE @v1 int SET @v1 = 0 WHILE @v1 < 100 BEGIN SELECT @v1 = (@v1 + 1) SELECT @v1 END */

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

33

Mglichkeiten zum Ausfhren von Transact-SQLAnweisungen


Thema
Geben Sie eine bersicht ber die Mglichkeiten zum Ausfhren von TransactSQL-Anweisungen.

Dynamisches Erstellen von Anweisungen Verwenden von Batches Verwenden von Skripts Verwenden von Transaktionen Verwenden von XML

Einstieg

Transact-SQL-Anweisungen knnen auf verschiedene Arten ausgefhrt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Transact-SQL-Anweisungen ausfhren, indem Sie Anweisungen dynamisch erstellen oder Batches, Skripts und Transaktionen verwenden. Darber hinaus knnen Sie XML (Extensible Markup Language) verwenden, um Daten auf Webseiten darzustellen.

34

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Dynamisches Erstellen von Anweisungen


Erlutern Sie den Kursteilnehmern die dynamische Ausfhrung von Anweisungen.

Thema

Verwenden von EXECUTE mit Zeichenfolgenliteralen und Variablen Verwenden, falls der Variablenwert whrend der Ausfhrungszeit zugewiesen werden muss Jede Variable und temporre Tabelle bleibt nur whrend der Ausfhrung bestehen
DECLARE @dbname varchar(30), @tblname varchar(30) DECLARE @dbname varchar(30), @tblname varchar(30) SET @dbname = 'Northwind' SET @dbname = 'Northwind' SET @tblname = 'Products' SET @tblname = 'Products' EXECUTE EXECUTE ('USE ' + @dbname + ' SELECT * FROM '+ @tblname) ('USE ' + @dbname + ' SELECT * FROM '+ @tblname)

Einstieg

Sie knnen Anweisungen dynamisch erstellen, sodass sie zu dem Zeitpunkt erstellt werden, an dem SQL Server ein Skript ausfhrt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Anweisungen dynamisch erstellen, sodass sie zu dem Zeitpunkt erstellt werden, an dem SQL Server ein Skript ausfhrt. Zum dynamischen Erstellen einer Anweisung wird die EXECUTE-Anweisung mit einer Reihe von Zeichenfolgenliteralen und Variablen verwendet, die zur Ausfhrungszeit aufgelst werden. Dynamisch erstellte Anweisungen sind hilfreich, wenn SQL Server den Wert der Variable beim Ausfhren der Anweisung zuweisen soll. Sie knnen z. B. eine dynamische Anweisung erstellen, die fr eine Reihe von Datenbankobjekten die gleiche Aktion ausfhrt. Syntax EXECUTE ({@str_var | 'tsql_string'} + [{@str_var | 'tsql_string'}...]}) Optionen werden dynamisch festgelegt, und die Variablen und temporren Tabellen, die Sie dynamisch erstellen, bleiben nur fr die Dauer bestehen, die SQL Server bentigt, um die Anweisung auszufhren. Bei der EXECUTE-Anweisung sollten die folgenden Aspekte beachtet werden: Die EXECUTE-Anweisung fhrt aus Zeichenfolgen bestehende Anweisungen in einem Transact-SQL-Batch aus. Da es sich hierbei um Zeichenfolgenliterale handelt, mssen Sie an den entsprechenden Stellen Leerzeichen hinzufgen, damit die Zeichenfolgen richtig verkettet werden. Die EXECUTE-Anweisung kann ein Zeichenfolgenliteral, eine lokale Variable oder eine Verkettung von beidem einschlieen. Alle Elemente in der EXECUTE-Zeichenfolge mssen aus Zeichendaten bestehen, und Sie mssen alle numerischen Daten konvertieren, bevor Sie die EXECUTE-Anweisung verwenden. Sie knnen zum Erstellen der Zeichenfolge fr die Ausfhrung keine Funktionen verwenden.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

35

Sie knnen alle gltigen Transact-SQL-Anweisungen dynamisch erstellen, dies gilt auch fr Funktionen. EXECUTE-Anweisungen knnen geschachtelt werden. Beispiel 1 Dieses Beispiel zeigt, wie Sie eine dynamisch ausgefhrte Anweisung verwenden knnen, um einen anderen Datenbankkontext anzugeben als den, in dem Sie sich gerade befinden, und wie Sie anschlieend mit der Anweisung alle Spalten und Zeilen aus einer angegebenen Tabelle auswhlen In diesem Beispiel bleibt der Wechsel des Datenbankkontextes zur Northwind-Datenbank nur fr die Dauer der Abfrage bestehen. Der aktuelle Datenbankkontext bleibt unverndert. Mit Hilfe einer gespeicherten Prozedur kann der Benutzer die Datenbank- und Tabelleninformationen als Parameter an die Anweisung bergeben und dann eine bestimmte Tabelle in einer Datenbank abfragen.
DECLARE @dbname varchar(30), @tablename varchar(30) SET @dbname = 'Northwind' SET @tablename = 'Products' EXECUTE ('USE ' + @dbname + ' SELECT ProductName FROM ' + @tablename)

Ergebnis

ProductName Chai Chang Aniseed Syrup

Beispiel 2

Dieses Beispiel zeigt, wie Sie mit einer dynamisch ausgefhrten Anweisung eine Datenbankoption fr die Dauer der Anweisung ndern knnen. Die folgende Anweisung gibt die Anzahl der betroffenen Zeilen nicht zurck.
EXECUTE ('SET NOCOUNT ON '+ 'SELECT LastName, ReportsTo FROM Employees WHERE ReportsTo IS NULL')

Ergebnis

LastName Fuller

ReportsTo NULL

36

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Verwenden von Batches


Thema
Geben Sie den Kursteilnehmern eine Einfhrung in die Verwendung von Batches.

Eine oder mehrere Transact-SQL-Anweisungen werden zusammen bergeben Definieren eines Batches mit Hilfe der GO-Anweisung Batchverarbeitung bei SQL Server Anweisungen, die nicht im selben Batch verwendet werden knnen CREATE PROCEDURE CREATE VIEW CREATE TRIGGER CREATE RULE CREATE DEFAULT

Einstieg

Bei einem Batch handelt es sich um eine Gruppe von Transact-SQL-Anweisungen, die gemeinsam bergeben und als Gruppe ausgefhrt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine oder mehrere Anweisungen knnen auch in einem Batch bergeben werden.

Eine oder mehrere Transact-SQL-Anweisungen werden zusammen bergeben


Batches knnen interaktiv oder als Teil eines Skripts ausgefhrt werden. Ein Skript kann mehrere Batches mit Transact-SQL-Anweisungen einschlieen.

Definieren eines Batches mit Hilfe der GO-Anweisung


Verwenden Sie eine GO-Anweisung, um das Ende eines Batches anzugeben. Die GO-Anweisung ist keine allgemein gltige Transact-SQL-Anweisung, sondern wird nur von SQL Query Analyzer und dem Dienstprogramm osql akzeptiert. Auf ODBC- oder OLE DB-APIs basierende Anwendungen erzeugen einen Syntaxfehler, wenn sie versuchen, eine GO-Anweisung auszufhren.

Batchverarbeitung bei SQL Server


Die Anweisungen werden von SQL Server in einem Batch gemeinsam optimiert, kompiliert und ausgefhrt. Die Anweisungen mssen jedoch nicht als wiederherstellbare Arbeitseinheit ausgefhrt werden. Der Gltigkeitsbereich von benutzerdefinierten Variablen ist auf einen Batch beschrnkt, nach einer GO-Anweisung kann daher nicht auf eine dieser Variablen verwiesen werden. Anmerkung Wenn ein Syntaxfehler in einem Batch vorhanden ist, wird keine der Anweisungen in diesem Batch ausgefhrt. Die Ausfhrung beginnt mit dem folgenden Batch.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

37

Anweisungen, die nicht im selben Batch verwendet werden knnen


SQL Server muss bestimmte Anweisungen zur Objekterstellung innerhalb ihrer Batches in einem Skript ausfhren, da die Objekte unterschiedlich definiert sind. Jede der im Folgenden aufgefhrten Anweisungen wird definiert, indem ein Objektdefinitionsheader gefolgt von dem Schlsselwort AS eingefgt wird (AS zeigt an, dass eine oder mehrere Anweisungen folgen). Die Objektdefinitionen sind durch die GO-Anweisung begrenzt; SQL Server erkennt das Ende der Objektdefinition, wenn die GO-Anweisung erreicht wird. CREATE PROCEDURE CREATE VIEW CREATE TRIGGER CREATE RULE CREATE DEFAULT Beispiel 1 Wenn Sie mehrere nicht kombinierbare Anweisungen verwenden mchten, mssen Sie mehrere Batches bergeben, wie das folgende Skript zeigt.
CREATE DATABASE ... CREATE TABLE ... GO CREATE VIEW1 ... GO CREATE VIEW2 ... GO

Beispiel 2

Das folgende Beispiel zeigt einen fehlerhaften Batch. Fgen Sie eine GO-Anweisung vor jede CREATE TRIGGER-Anweisung ein, damit er ordnungsgem ausgefhrt wird.
CREATE CREATE CREATE CREATE GO DATABASE ... TABLE ... TRIGGER ... TRIGGER ...

Beispiel 3

Dieses Beispiel zeigt, wie Sie die Anweisungen aus Beispiel 2 gruppieren knnen, sodass sie ordnungsgem ausgefhrt werden.
CREATE DATABASE ... CREATE TABLE ... GO CREATE TRIGGER ... GO CREATE TRIGGER ... GO

38

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Verwenden von Skripts


Geben Sie eine Einfhrung in die Verwendung von Skripts zum Ausfhren von Transact-SQL-Anweisungen.

Thema

Enthlt gespeicherte Anweisungen Kann mit jedem Text-Editor geschrieben werden Speichern mit der Dateinamenerweiterung SQL Ausfhren mit SQL Query Analyzer oder dem Dienstprogramm osql Verwenden, um Datenbankobjekte neu zu erstellen oder um Anweisungen wiederholt auszufhren

Einstieg

In den meisten Fllen werden Skripts zum Ausfhren von Transact-SQL-Anweisungen verwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In den meisten Fllen werden Skripts zum Ausfhren von Transact-SQL-Anweisungen verwendet. Ein Skript besteht aus einer oder mehreren TransactSQL-Anweisungen, die als Datei gespeichert sind. Sie knnen Skripts in SQL Query Analyzer oder mit einem beliebigen TextEditor, wie z. B. Notepad, erstellen und speichern. Speichern Sie die Skriptdatei mit der Dateinamenerweiterung SQL. Sie knnen die Skriptdatei in SQL Query Analyzer oder mit dem Dienstprogramm osql (oder einem anderen Abfragetool) ffnen und ausfhren. Gespeicherte Skripts sind sehr hilfreich, wenn Sie Datenbanken oder Datenobjekte neu erstellen oder wenn Sie eine Gruppe von Anweisungen wiederholt ausfhren mssen. Formatieren Sie Transact-SQL-Anweisungen so, dass andere sie gut lesen knnen. Verwenden Sie Einzge, um Beziehungsebenen anzuzeigen.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

39

Verwenden von Transaktionen


Geben Sie den Kursteilnehmern eine Einfhrung in die Verwendung von Transaktionen.

Thema

Werden wie Batches verarbeitet Datenintegritt ist gewhrleistet nderungen in der Datenbank werden entweder zusammen ausgefhrt, oder es wird ein Rollback fr die nderungen ausgefhrt
BEGIN TRANSACTION BEGIN TRANSACTION UPDATE savings SET amount = (amount - 100) UPDATE savings SET amount = (amount - 100) WHERE custid = 78910 WHERE custid = 78910 <Rollback transaction if error> <Rollback transaction if error> UPDATE checking SET amount = (amount + 100) UPDATE checking SET amount = (amount + 100) WHERE custid = 78910 WHERE custid = 78910 <Rollback transaction if error> <Rollback transaction if error> COMMIT TRANSACTION COMMIT TRANSACTION

Einstieg

Transaktionen werden wie Batches verarbeitet, es gibt jedoch einige wichtige Unterschiede

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Transaktionen bestehen, hnlich wie Batches, aus Anweisungsgruppen, die als Gruppe bergeben werden. SQL Server behandelt Transaktionen jedoch als eine einzige Arbeitseinheit, und die Transaktion ist als Ganzes erfolgreich oder schlgt als Ganzes fehl. Dadurch wird die Datenintegritt gewhrleistet. Transaktionen knnen mehrere Batches umfassen. Beginnen Sie eine Transaktion mit einer BEGIN TRANSACTION-Anweisung, und beenden Sie sie mit einer COMMIT TRANSACTION- oder ROLLBACK TRANSACTION-Anweisung. Wird fr eine Transaktion ein Commit ausgefhrt, macht SQL Server die nderungen an der Transaktion zu permanenten nderungen. Wenn fr eine Transaktion ein Rollback ausgefhrt wird, stellt SQL Server fr alle von der Transaktion betroffenen Zeilen wieder den Zustand vor Ausfhrung der Transaktion her. Teilsyntax BEGIN TRANSACTION COMMIT / ROLLBACK TRANSACTION

Die in den Beispielen in diesem Abschnitt verwendeten Tabellen Savings und Checking sind fiktiv.

40

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Beispiel

Im folgenden Beispiel werden 100 $ vom Sparkonto des Kunden mit der Nummer 78910 abgebucht und 100 $ dem Girokonto des Kunden gutgeschrieben. Der Kunde hat 100 $ vom Sparkonto auf das Girokonto berwiesen.
BEGIN TRANSACTION UPDATE savings SET balance = (amount 100) WHERE custid = 78910 IF @@ERROR <> 0 BEGIN RAISERROR ('Transaction not completed due to savings account problem.', 16, -1) ROLLBACK TRANSACTION END UPDATE checking SET balance = (amount + 100) WHERE custid = 78910 IF @@ERROR <> 0 BEGIN RAISERROR ('Transaction not completed due to checking account problem.', 16, -1) ROLLBACK TRANSACTION END COMMIT TRANSACTION

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

41

Verwenden von XML


Thema
Geben Sie eine bersicht ber XML, und erlutern Sie, wie eine Abfrage wohlgeformte XML-Daten zurckgeben kann.

Formatieren von Daten im Client Browser Angeben der FOR XML AUTO-Option Angeben der FOR XML RAW-Option Identifizieren von Einschrnkungen beim Verwenden der FOR XML-Klausel

Einstieg

XML ist eine Programmiersprache, die Webentwickler verwenden knnen, um Daten aus einer SQL Server-Datenbank auf Webseiten darzustellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** XML ist eine Programmiersprache, die Webentwickler verwenden knnen, um Daten aus einer SQL Server-Datenbank auf Webseiten darzustellen.

Formatieren von Daten im Client Browser


Beim Verwenden der FOR XML-Klausel in der SELECT-Anweisung gibt SQL Server Folgendes zurck: Das Ergebnis einer Abfrage als Zeichenfolge. Die Attribute der Daten, z. B. Spalten- und Tabellennamen, als Tags. Ein Client Browser kann diese Tags anschlieend zum Formatieren der zurckgegebenen Daten verwenden.

Angeben der FOR XML AUTO-Option


Sie knnen die FOR XML AUTO-Option angeben, um Abfrageergebnisse in einem standardisierten Format zurckzugeben. Jede Tabelle in der FROM-Klausel, fr die mindestens eine Spalte in der SELECT-Klausel aufgelistet ist, wird als XML-Element dargestellt. Ein Element enthlt sowohl Daten als auch Attribute, die die Daten beschreiben.

42

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Beispiel 1

In diesem Beispiel werden drei Spalten aus zwei verknpften Tabellen ausgewhlt. Beachten Sie, dass in den Ergebnissen alle Spalten in einer einzigen Textzeichenfolge zusammengefasst werden.
SELECT Orders.OrderID, Shippers.CompanyName, Orders.CustomerID FROM Orders JOIN Shippers ON Orders.shipvia = Shippers.ShipperID WHERE OrderID < 10250 FOR XML AUTO

Ergebnis

XML_F52E2B61-18A1-11d1-B105-00805F49916B -------------------------------------------<Orders OrderID="10248" CustomerID="VINET"> <Shippers CompanyName="Federal Shipping"/> </Orders> <Orders OrderID="10249" CustomerID="TOMSP"> <Shippers CompanyName="Speedy Express"/> </Orders>

Anmerkung SQL Server sortiert das Resultset neu und gruppiert Spalten nach Tabellennamen.

Angeben der FOR XML RAW-Option


In bestimmten Fllen wnschen Webentwickler keine automatische Formatierung. Sie knnen die RAW-Option angeben, um jede einzelne Zeile im Resultset in ein XML-Element mit einer generischen Bezeichnerzeile als Element-Tag zu transformieren. Beispiel 2 Vergleichen Sie das Ergebnis in diesem Beispiel mit dem in Beispiel 1. Dieses Beispiel gibt dieselben Daten zurck, jedoch in einer strker generisch ausgerichteten Formatierung. Beachten Sie, dass die Tabellen keine Namen haben und die Spalten nicht nach Tabellennamen gruppiert sind.
SELECT Orders.OrderID, Shippers.CompanyName, Orders.CustomerID FROM Orders JOIN Shippers ON Orders.shipvia = Shippers.ShipperID WHERE OrderID < 10250 FOR XML RAW

Ergebnis

XML_F52E2B61-18A1-11d1-B105-00805F49916B ---------------------------------------<row OrderID="10248" CompanyName="Federal Shipping" CustomerID="VINET"/> <row OrderID="10249" CompanyName="Speedy Express" CustomerID="TOMSP"/>

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

43

Identifizieren von Einschrnkungen beim Verwenden der FOR XML-Klausel


Eine SELECT-Anweisung mit einer FOR XML-Klausel formatiert die Ausgabe fr den SQL Server-Client neu. Aufgrund dieser nderungen knnen Sie eine Abfrageausgabe im XML-Format nicht als Eingabe fr weitere SQL ServerVerarbeitungen verwenden. Ausgaben im XML-Format knnen Sie in den folgenden Fllen nicht verwenden: Bei einer geschachtelten SELECT-Anweisung. Bei einer SELECT INTO-Anweisung. Bei einer COMPUTE BY-Klausel. Bei gespeicherten Prozeduren, die in einer INSERT-Anweisung aufgerufen werden. Bei einer Sichtdefinition oder einer benutzerdefinierten Funktion, die ein Rowset zurckgibt.

44

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Empfohlene Methoden
Stellen Sie die empfohlenen Methoden zum Programmieren mit Transact-SQL vor.

Thema

Behalten Sie die Geschftslogik als gespeicherte Prozeduren Behalten Sie die Geschftslogik als gespeicherte Prozeduren auf dem Server auf dem Server Verwenden Sie ANSI SQL-Syntax Verwenden Sie ANSI SQL-Syntax Whlen Sie eine geeignete Benennungskonvention Whlen Sie eine geeignete Benennungskonvention Speichern Sie Anweisungen als Skripts, und fgen Sie Speichern Sie Anweisungen als Skripts, und fgen Sie aussagekrftige Kommentare hinzu aussagekrftige Kommentare hinzu Formatieren Sie Transact-SQL-Anweisungen so, dass andere Formatieren Sie Transact-SQL-Anweisungen so, dass andere sie gut lesen knnen sie gut lesen knnen

Einstieg

Im Folgenden werden empfohlene Methoden fr die Programmierung mit Transact-SQL beschrieben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden sollen Sie beim Erstellen fehlerfreier Skripts in Transact-SQL untersttzen: Behalten Sie die Geschftslogik als gespeicherte Prozeduren auf dem Server. Verwenden Sie ANSI SQL-Syntax, um sicherzustellen, dass die Skripts mglichst kompatibel und bertragbar sind. Whlen Sie eine geeignete Benennungskonvention, und achten Sie auf Einheitlichkeit bei der Vergabe von Namen. Speichern Sie Anweisungen als Skripts, und fgen Sie aussagekrftige Kommentare hinzu. Formatieren Sie Transact-SQL-Anweisungen so, dass andere sie gut lesen knnen. Verwenden Sie Einzge, um Beziehungsebenen anzuzeigen. Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema Transact-SQL-Variablen Funktionen Tipps zu Transact-SQL Transact-SQL-Konventionen Empfehlungen zur SQL Syntax Vorbereiten von Anweisungen Dienstprogramm osql Reservierte Schlsselwrter Zwischenspeichern von Ad-hoc-Batches Verwenden von XML Suchbegriff Variablen Funktionen transact-sql transact-sql "SQL-Syntax" "Vorbereiten von Anweisungen" osql Schlsselwrter "OLE DB", ODBC "SELECT (T-SQL)"

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

45

bungseinheit A: bersicht ber Transact-SQL


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit schreiben Sie SELECTAnweisungen, ndern eine Skriptdatei und verwenden Systemfunktionen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Schreiben grundlegender SELECT-Anweisungen, die sortierte und eingeschrnkte Resultsets zurckgeben. ndern und Ausfhren eines Skripts. Ausfhren eines Skripts mit dem Dienstprogramm osql. Verwenden von Systemfunktionen zum Abrufen von Systeminformationen.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L02 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L02\Answers befinden.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

46

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

47

bung 1 Schreiben grundlegender SELECT-Anweisungen


In dieser bung schreiben Sie verschiedene Anweisungen, die Zeilen aus der Products-Tabelle der Northwind-Datenbank zurckgeben. So schreiben Sie eine SELECT-Anweisung, die sortierte Daten zurckgibt Mit diesem Verfahren schreiben Sie eine Anweisung, die alle Zeilen und Spalten aus der Products-Tabelle zurckgibt und die Ergebnisse in aufsteigender Reihenfolge nach der ProductName-Spalte sortiert. C:\Moc\2328A\Labfiles\L02\Answers\Basica.sql enthlt ein vollstndiges Skript fr dieses Verfahren. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, ber die Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Gruppe der Administratoren von Microsoft Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf Northwind. 4. Schreiben Sie eine SELECT-Anweisung, die alle Zeilen und Spalten aus der Products-Tabelle zurckgibt und die Ergebnisse in aufsteigender Reihenfolge nach der ProductName-Spalte sortiert. Sie knnen die gespeicherte Systemprozedur sp_help in der ProductsTabelle ausfhren, um die korrekten Spaltennamen abzufragen.
SELECT * FROM Products ORDER BY ProductName

48

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

So schreiben Sie eine SELECT-Anweisung, die eingeschrnkte Daten zurckgibt In diesem Verfahren schreiben Sie eine Anweisung, die Produkte aus einer bestimmten Kategorie abruft. Schreiben Sie eine SELECT-Anweisung, die alle Produkte in der Kategorie (CategoryID) 4 aus der Products-Tabelle abruft. Sie knnen die gespeicherte Systemprozedur sp_help in der ProductsTabelle ausfhren, um die korrekten Spaltennamen abzufragen.
SELECT * FROM Products WHERE CategoryID = 4

Tipp Weitere Informationen zur SELECT-Anweisung (und allen TransactSQL-Anweisungen und Systemtabellen) erhalten Sie, indem Sie im Abfragefenster das Schlsselwort SELECT auswhlen und dann die Tastenkombination UMSCHALT+F1 zum ffnen der SQL Server-Onlinedokumentation drcken. Doppelklicken Sie unter SELECT auf den Untereintrag Klausel.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

49

bung 2 ndern einer Skriptdatei


In dieser bung ndern und speichern Sie eine einfache Skriptdatei und fhren sie dann aus. So ndern Sie eine Skriptdatei In diesem Verfahren fhren Sie ein Skript aus, das Fehler enthlt. Mit Hilfe der von SQL Server zurckgegebenen Fehlerinformationen fhren Sie nderungen am Skript durch, sodass es ordnungsgem ausgefhrt wird. Danach speichern Sie das Skript und fhren es aus. 1. ffnen Sie C:\Moc\2328A\Labfiles\L02\Sample_Script.sql, berprfen Sie die Datei, und fhren Sie sie dann aus. Beim Ausfhren dieser Datei erhalten Sie Fehlermeldungen. Diese Fehler wurden absichtlich eingebaut. C:\Moc\2328A\Labfiles\L02\Answers\Sample_Script.sql enthlt ein vollstndiges Skript fr dieses Verfahren. 2. Fgen Sie Kommentarzeichen vor dem Skriptnamen und der Beschreibung ein, damit sie nicht ausgefhrt werden.
/* ** ** ** ** ** ** ** ** ** */ Sample_Script.sql Dieses Skript erstellt die Sample1-Tabelle und die Sample_View-Sicht. Nachdem die Objekte erstellt sind, werden fnf Zeilen in die Sample1-Tabelle eingefgt und dann abgefragt. Dieses Skript sollte in der Northwind-Datenbank ausgefhrt werden.

3. Fgen Sie eine Anweisung hinzu, die angibt, dass das Skript im Kontext der Northwind-Datenbank ausgefhrt wird.
USE Northwind

4. Schlieen Sie Markierungen fr das Ende des Batches (GO-Anweisungen) an den richtigen Stellen innerhalb des Skripts ein. Es sind nur zwei zustzliche Batchmarkierungen erforderlich.
GO CREATE VIEW Sample_View AS SELECT cust_no, lname FROM Sample1 GO

5. Speichern Sie das Skript, und fhren Sie es dann aus.

50

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

So fhren Sie eine Skriptdatei mit Hilfe des Dienstprogramms osql aus In diesem Verfahren fhren Sie eine Skriptdatei mit Hilfe des Dienstprogramms osql aus. 1. ffnen Sie ein Fenster mit einer Eingabeaufforderung. 2. Geben Sie den folgenden Befehl ein, um C:\Moc\2328A\Labfiles\L02\Sample_Script2.sql auszufhren. berprfen Sie, ob der Pfad richtig ist.
osql /E /i "c:\moc\2328A\labfiles\L02\Sample_Script2.sql"

Anmerkung Schreiben Sie den Befehl in eine einzige Zeile.

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

51

bung 3 Verwenden von Systemfunktionen


In dieser bung sammeln Sie Systeminformationen mit Hilfe von Systemfunktionen. So ermitteln Sie die Serverprozess-ID In diesem Verfahren beobachten Sie die aktuelle Serveraktivitt und ermitteln die Aktivitt, die durch Ihre Sitzung generiert wird. 1. Fhren Sie die gespeicherte Systemprozedur sp_who aus. SQL Server zeigt alle Aktivitten auf dem Server an. 2. Um zu ermitteln, welche Aktivitt Ihre ist, knnen Sie die folgende Anweisung ausfhren:
SELECT @@spid

SQL Server gibt die Serverprozess-ID (SPID) Ihres Prozesses in den Ergebnissen zurck. 3. Fhren Sie die gespeicherte Systemprozedur sp_who erneut aus, wobei Sie Ihre SPID als zustzlichen Parameter verwenden. (In der folgenden Anweisung steht n fr Ihre SPID.)
EXEC sp_who n

SQL Server zeigt die Aktivitt fr Ihre Serverprozess-ID an. So rufen Sie Umgebungsinformationen ab Mit diesem Verfahren ermitteln Sie, welche Version von SQL Server ausgefhrt wird, und Sie rufen Informationen ber die Verbindung, den Datenbankkontext und den Server ab. Sie fhren diese Aufgaben mit Hilfe von Systemfunktionen aus. 1. Fhren Sie die folgende Anweisung aus:
SELECT @@version

2. Fhren Sie die folgende Anweisung aus:


SELECT USER_NAME(), DB_NAME(), @@servername

52

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

So rufen Sie Metadaten ab In diesem Verfahren fhren Sie mehrere Abfragen aus, die Metadaten von bestimmten Datenbankobjekten zurckgeben, indem Informationsschemasichten verwendet werden. Zur Erinnerung: INFORMATION_SCHEMA ist ein vordefinierter Datenbankbenutzer, der alle Informationsschemasichten besitzt. 1. Fhren Sie die folgende Anweisung aus, um eine Liste aller benutzerdefinierten Tabellen einer Datenbank zurckzugeben:
USE Northwind SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

2. Fhren Sie die folgende Anweisung aus, um die Primrschlssel- und Fremdschlsselspalten fr die Orders-Tabelle zurckzugeben:
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Orders'

Fr welche Spalte ist ein Primrschlssel definiert? OrderID ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

53

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Entwerfen der Anwendungsarchitektur einer Organisation SQL Server-Programmierungstools Transact-SQL (Programmiersprache) Elemente von Transact-SQL Zustzliche Sprachelemente Mglichkeiten zum Ausfhren von Transact-SQLAnweisungen

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Sie entwerfen eine Mehrschichtenanwendung mit einer Webschnittstelle. Diese Anwendung muss regelmig eine Datenbanktabelle aktualisieren. Wie und wo sollten Sie die Logik zum Ausfhren der Aktualisierung implementieren? Sie erreichen voraussichtlich die bestmgliche Leistung, wenn Sie eine gespeicherte Prozedur zum Ausfhren der Aktualisierung auf dem SQL Server erstellen. Sie rufen diese gespeicherte Prozedur von einer Komponente der mittleren Schicht auf.

2. Erlutern Sie den Unterschied zwischen einem Batch und einem Skript. Ein Batch ist eine Gruppe von Transact-SQL-Anweisungen, die zusammen bergeben, auf Syntaxfehler berprft und als Gruppe ausgefhrt werden. Ein Skript ist eine Gruppe von Transact-SQLAnweisungen, die als Datei gespeichert ist.

54

Unterrichtseinheit 2: bersicht ber die SQL Server-Programmierung

3. Welche Vorteile hat eine Transaktion gegenber einem Batch oder einem Skript? Eine Transaktion wird als eine einzelne Arbeitseinheit ausgefhrt. Bei einem Transaktionsfehler kann fr die Transaktion als Einheit ein Rollback ausgefhrt werden, sodass die Daten in einem konsistenten Zustand bleiben.

4. Wenn Sie Bedingungslogik in ein Skript einschlieen mchten, welche Art von Sprachelement knnen Sie verwenden? Geben Sie mglichst viele Beispiele fr die Schlsselwrter von Sprachelementen an. Schlsselwrter fr die Ablaufsteuerung. Beispiele sind BEGIN...END, IF...ELSE, RETURN, WHILE, BREAK und CONTINUE.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken


Inhalt bersicht Erstellen von Datenbanken Erstellen von Dateigruppen Verwalten von Datenbanken Einfhrung in Datenstrukturen Empfohlene Methoden bungseinheit A: Erstellen und Verwalten von Datenbanken Lernzielkontrolle 1 2 11 14 25 32 33 39

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

iii

Hinweise fr den Kursleiter


Prsentation: 30 Minuten bungseinheit: 30 Minuten Diese Unterrichtseinheit gibt den Kursteilnehmern eine Beschreibung, wie eine Datenbank erstellt wird, wie Datenbankoptionen festgelegt und Dateigruppen erstellt werden und wie eine Datenbank und das Transaktionsprotokoll verwaltet werden. Weiter wird behandelt, wie Speicherplatz reserviert wird und wie das Transaktionsprotokoll Datennderungen aufzeichnet. Anmerkung Dieser Kurs basiert auf der Northwind-Datenbank. Das Schema fr die Northwind-Datenbank befindet sich in Anhang A. In den bungseinheiten wird eine vergleichbare Version der Northwind-Datenbank mit dem Namen ClassNorthwind verwendet. In der bungseinheit definieren die Kursteilnehmer die ClassNorthwindDatenbank, ndern sie, und legen dann eine Option fest, um das Transaktionsprotokoll zu lschen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer Datenbank. Erstellen einer Dateigruppe. Verwalten einer Datenbank. Beschreiben von Datenstrukturen.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_03.ppt Die Beispieldatei C:\Moc\2328A\Demo\D03_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch. Machen Sie sich mit der Vorfhrung der animierten Folien vertraut.

iv

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Sonstige Aktivitten
In diesem Abschnitt werden Verfahren bereitgestellt, mit denen interaktive Aktivitten zum Anzeigen und berprfen von Informationen implementiert werden, wie Spiele oder bungen mit Rollenspielen.

Anzeigen der PowerPoint-Animationen


Alle Animationen sind durch ein Hyperlinksymbol in der unteren linken Ecke der Folie gekennzeichnet. So zeigen Sie die Folie Arbeitsweise des Transaktionsprotokolls an 1. Zeigen Sie die Folie mit dem Thema an, die den ersten Schritt anzeigt, bei dem die Anwendung die Datennderung initiiert. 2. Fahren Sie mit der nchsten Animation fort, in der der nchste Schritt zeigt, wie betroffene Datenseiten von der Festplatte in den Arbeitsspeicher (den so genannten Puffercache) geladen werden. Erklren Sie, dass betroffene Datenseiten von der Festplatte in den Arbeitsspeicher geladen werden, sofern sich die Seiten nicht aufgrund einer frheren Abfrage bereits im Puffercache befinden. 3. Fahren Sie mit der nchsten Animation fort, in der jede Datennderung bei ihrer Durchfhrung im Protokoll aufgezeichnet wird. Erklren Sie, dass die nderung immer zuerst im Transaktionsprotokoll aufgezeichnet und auf der Festplatte gespeichert wird, bevor sie anschlieend in der Datenbank vorgenommen wird. Weisen Sie darauf hin, dass diese Art des Protokolls als Write-Ahead-Protokoll (Vorausschreiben-Protokoll) bezeichnet wird. 4. Fahren Sie mit der nchsten Animation fort, in der der nchste Schritt den Prfpunktprozess zeigt, bei dem alle abgeschlossenen Transaktionen in die Datenbank auf Festplatte gespeichert werden Erklren Sie, dass dieser Vorgang regelmig wiederholt wird. So zeigen Sie die Folie Seiten fr die Tabellen- und Indexverfolgung an Diese Animation zeigt, wie Microsoft SQL Server 2000 beim Erstellen einer Tabelle Seiten zuweist. 1. Zeigen Sie die Folie mit dem Thema an, und weisen Sie darauf hin, dass zwei gemischte Blcke und zwei einheitliche Blcke vorhanden sind. 2. Fahren Sie mit der nchsten Animation fort, in der die IAM-Seite (Index Allocation Map, Indexreservierungstabelle) und eine Datenseite erstellt werden. Erklren Sie kurz, dass die IAM-Seite einen Verweis auf die Datenseite enthlt. 3. Fahren Sie mit der nchsten Animation fort, in der weitere sieben Datenseiten zugewiesen werden. Erklren Sie kurz, dass die IAM-Seite auch einen Verweis auf diese sieben Datenseiten enthlt. 4. Fahren Sie mit der nchsten Animation fort, in der ein einheitlicher Block zugewiesen wird. Schlieen Sie mit der Erklrung ab, dass von diesem Zeitpunkt an nur einheitliche Blcke zugewiesen werden und dass die IAMSeite eine Bitmap enthlt, die jeden Block identifiziert.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Erstellen von Datenbanken Beschreiben Sie den Vorgang des Erstellens einer Datenbank. Erlutern Sie, wie Datenbankoptionen festgelegt werden. Gehen Sie die gespeicherten Systemprozeduren durch, die Informationen ber Datenbankoptionen anzeigen. Erstellen von Dateigruppen Geben Sie eine bersicht ber das Konzept der Dateigruppen. Beschreiben Sie, welche Dateigruppentypen es gibt und wie die Gre der Standarddateigruppe festgelegt wird. Gehen Sie die gespeicherten Systemprozeduren durch, die Informationen ber Dateigruppen anzeigen. Verwalten von Datenbanken Beschreiben und vergleichen Sie drei Methoden zum berwachen der Gre von Daten- und Protokolldateien: Konfigurieren der Dateien, sodass sie automatisch vergrert werden, Manuelles Vergrern der Dateigre und Hinzufgen von sekundren Dateien. Erlutern Sie, wie eine Datenbank verkleinert und gelscht wird. Einfhrung in Datenstrukturen Geben Sie den Kursteilnehmern eine Einfhrung in Seiten und Blcke. Weisen Sie darauf hin, dass Daten in Blcken verwaltet werden, und dass es gemischte Blcke gibt, damit kleine Tabellen effizient verwaltet werden knnen. Erlutern Sie die verschiedenen Seitentypen, ohne die Diskussion zu sehr zu vertiefen.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Fr das Einrichten der bungseinheit gibt es keine Anforderungen, die die Replikation oder die Anpassung betreffen.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Erstellen von Datenbanken Erstellen von Dateigruppen Verwalten von Datenbanken Einfhrung in Datenstrukturen

Einstieg

In dieser Unterrichtseinheit lernen Sie, wie Datenbanken und Dateigruppen erstellt werden, und wie SQL Server Daten speichert.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit beschreibt, wie eine Datenbank erstellt wird, wie Datenbankoptionen festgelegt und Dateigruppen erstellt werden und wie eine Datenbank und das Transaktionsprotokoll verwaltet werden. Es wird darber hinaus beschrieben, wie Microsoft SQL Server 2000 Daten speichert. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer Datenbank. Erstellen einer Dateigruppe. Verwalten einer Datenbank. Beschreiben von Datenstrukturen.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Erstellen von Datenbanken


Erlutern Sie, wie eine Datenbank erstellt wird.

Thema

Einstieg

Definieren von Datenbanken Arbeitsweise des Transaktionsprotokolls Festlegen von Datenbankoptionen Abrufen von Datenbankinformationen

Dieser Abschnitt beschreibt, wie Datenbanken erstellt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Dieser Abschnitt beschreibt, wie Datenbanken erstellt, Datenbankoptionen festgelegt und Datenbankinformationen abgerufen werden. Er beschreibt darber hinaus die Arbeitsweise des Transaktionsprotokolls.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Definieren von Datenbanken


Thema
Erlutern Sie, wie eine Datenbank definiert wird.

Beim Erstellen einer Datenbank wird Folgendes definiert: Der Name der Datenbank Die Gre der Datenbank Die Dateien, in denen sich die Datenbank befindet
CREATE DATABASE Sample CREATE DATABASE Sample ON ON PRIMARY ( NAME=SampleData, PRIMARY ( NAME=SampleData, FILENAME='c:\Programme\..\..\Data\Sample.mdf', FILENAME='c:\Programme\..\..\Data\Sample.mdf', SIZE=10MB, SIZE=10MB, MAXSIZE=15MB, MAXSIZE=15MB, FILEGROWTH=20%) FILEGROWTH=20%) LOG ON LOG ON ( NAME=SampleLog, ( NAME=SampleLog, FILENAME= 'c:\Programme\..\..\Data\Sample.ldf', FILENAME= 'c:\Programme\..\..\Data\Sample.ldf', SIZE=3MB, SIZE=3MB, MAXSIZE=5MB, MAXSIZE=5MB, FILEGROWTH=1MB) FILEGROWTH=1MB) COLLATE SQL_Latin1_General_Cp1_CI_AS COLLATE SQL_Latin1_General_Cp1_CI_AS

Einstieg

Sie knnen eine Datenbank definieren, indem Sie SQL Server Enterprise Manager verwenden oder Transact-SQL-Anweisungen ausfhren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Fhren Sie die zwei Verfahren der Datenbankdefinition mit Hilfe von SQL Server Enterprise Manager vor.

Sie knnen eine Datenbank definieren, indem Sie SQL Server Enterprise Manager oder die Transact-SQL-Anweisung CREATE DATABASE in SQL Query Analyzer verwenden. Beim Definieren einer Datenbank wird ebenfalls ein Transaktionsprotokoll fr diese Datenbank angelegt. Informationen zu den einzelnen Datenbanken von SQL Server sind in der sysdatabases-Tabelle der master-Datenbank gespeichert. Sie mssen daher, wenn Sie eine Datenbank mit Transact-SQL definieren, die master-Datenbank verwenden. Zur Definition einer Datenbank muss der Name der Datenbank angegeben und die Gre sowie der Speicherort der Datenbankdateien festgelegt werden. Die neue Datenbank ist nach ihrer Erstellung zunchst ein Duplikat der modelDatenbank. Smtliche Optionen und Einstellungen der model-Datenbank werden in die neue Datenbank kopiert. Wichtig Sie sollten die master-Datenbank nach dem Erstellen, ndern oder Lschen einer Datenbank stets sichern.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Syntax

CREATE DATABASE database_name [ON { [PRIMARY] (NAME = logical_file_name, FILENAME = 'os_file_name' [, SIZE = size] [, MAXSIZE = {max_sizeUNLIMITED}] [, FILEGROWTH = growth_increment] ) } [,...n] ] [LOG ON { ( NAME = logical_file_name, FILENAME = 'os_file_name' [, SIZE = size] [, MAXSIZE = {max_sizeUNLIMITED}] [, FILEGROWTH = growth_increment] ) } [,...n] ] [COLLATE collation_name] Bei der Datenbankerstellung knnen Sie die folgenden Parameter festlegen: PRIMARY Mit diesem Parameter werden die Dateien in der primren Dateigruppe angegeben. Die primre Dateigruppe enthlt alle Systemtabellen der Datenbank. Auerdem enthlt sie alle Objekte, die nicht Benutzerdateigruppen zugewiesen sind. Jede Datenbank verfgt ber eine primre Datendatei. Die primre Datendatei bildet den Ausgangspunkt der Datenbank und zeigt auf die brigen Dateien in der Datenbank. Die empfohlene Dateinamenerweiterung fr primre Datendateien ist MDF. Wenn Sie das Schlsselwort PRIMARY nicht angeben, ist die erste in der Anweisung aufgefhrte Datei automatisch die primre Datei. FILENAME Mit diesem Parameter werden der Betriebssystem-Dateiname und der Pfad fr die Datei angegeben. Der Pfad von os_file_name muss einen Ordner auf dem Server enthalten, auf dem SQL Server installiert ist. SIZE Mit diesem Parameter wird die Gre der Daten- oder Protokolldatei angegeben. Grenangaben sind sowohl in MB (Standardwert) als auch in KB mglich. Die Mindestgre fr die Daten- bzw. die Protokolldatei betrgt 512 KB. Die fr die primre Datendatei angegebene Gre darf nicht unter der Gre der Primrdatei der model-Datenbank liegen. Wenn eine Daten- oder Protokolldatei hinzugefgt wird, betrgt der Standardwert 1 MB. MAXSIZE Mit diesem Parameter wird die maximale Gre angegeben, die die Datei annehmen darf. Grenangaben sind sowohl in MB (Standard) als auch in KB mglich. Wenn Sie keine Gre angeben, kann die Dateigre so weit zunehmen, bis der Datentrger voll ist.

Zum Festlegen der Dateivergrerung gibt es drei Mglichkeiten: in MB, in KB oder mit einem Prozentsatz. Der Prozentsatz bezieht sich nur auf die Dateivergrerung, nicht auf die maximale Gre.

FILEGROWTH Mit diesem Parameter wird die Schrittweite fr die Vergrerung der Datei angegeben. Die FILEGROWTH-Einstellung fr eine Datei darf die MAXSIZE-Einstellung nicht berschreiten. Durch den Wert 0 wird angezeigt, dass die Datei nicht vergrert wird. Der Wert kann in MB (Standard), in KB oder als ein Prozentsatz (%) angegeben werden. Der Standardwert, wenn FILEGROWTH nicht definiert wird, betrgt 10 %, und der Minimalwert betrgt 64 KB (ein Block). Die angegebene Gre wird auf die nchsten 64 KB aufbzw. abgerundet.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

COLLATION Dieser Parameter gibt die Standardsortierung fr die Datenbank an. Die Regeln der Sortierung schlieen ein, welche Zeichen fr eine Sprache oder ein Alphabet verwendet werden. Beispiel Im folgenden Beispiel wird eine Datenbank mit dem Namen Sample mit einer 10 MB groen primren Datendatei und einer 3 MB groen Protokolldatei in einer Standardinstanz von SQL Server erstellt.
CREATE DATABASE Sample ON PRIMARY ( NAME=SampleData, FILENAME='c:\Programme\ Microsoft SQL Server\MSSQL\Data\Sample.mdf', SIZE=10MB, MAXSIZE=15MB, FILEGROWTH=20%) LOG ON ( NAME=SampleLog, FILENAME='c:\Programme\ Microsoft SQL Server\MSSQL\Data\Sample.ldf', SIZE=3MB, MAXSIZE=5MB, FILEGROWTH=1MB) COLLATE SQL_Latin1_General_Cp1_CI_AS

Methodischer Hinweis

Weisen Sie darauf hin, dass der Dateipfad variiert, wenn anstelle der Standardinstanz von SQL Server eine benannte Instanz verwendet wird.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Arbeitsweise des Transaktionsprotokolls


Beschreiben Sie, wie das Transaktionsprotokoll arbeitet.

Thema

1 Die Anwendung initiiert 1 Die Anwendung initiiert eine Datennderung eine Datennderung

Einstieg

Die nderung wird im Die nderung wird im 3 Transaktionsprotokoll 3 Transaktionsprotokoll auf dem Datentrger auf dem Datentrger gespeichert gespeichert Datentrger

Das Transaktionsprotokoll zeichnet Datennderungen bei ihrer Durchfhrung auf.

Puffercache

Die Datenseiten werden im 2 Die Datenseiten werden im 2 Puffercache gesucht oder in Puffercache gesucht oder in diesen eingelesen und diesen eingelesen und gendert gendert

Datentrger 4 Prfpunkt schreibt 4 Prfpunkt schreibt die ausgefhrten die ausgefhrten Transaktionen in Transaktionen in die Datenbank die Datenbank

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis SQL Server zeichnet jede Transaktion in einem Transaktionsprotokoll auf, um die Datenbankkonsistenz aufrecht zu erhalten und die Wiederherstellung zu untersttzen. Das Protokoll ist ein Speicherbereich, in dem Datenbanknderungen automatisch nachverfolgt werden. SQL Server zeichnet nderungen im Protokoll auf dem Datentrger bei ihrer Durchfhrung auf, also bevor sie in die Datenbank geschrieben werden. Die Protokollierung wird in folgenden Schritten durchgefhrt: 1. Die Anwendung initiiert eine Datennderung. 2. Wenn eine nderung ausgefhrt wird, werden die betroffenen Datenseiten von der Festplatte in den Puffercache geladen, sofern sich die Seiten nicht aufgrund einer frheren Abfrage bereits im Puffercache befinden. 3. Jede Datennderung wird bei ihrer Durchfhrung im Protokoll aufgezeichnet. Die nderung wird immer zuerst in das Protokoll aufgenommen und auf dem Datentrger gespeichert, bevor sie anschlieend in der Datenbank vorgenommen wird. Diese Art des Protokolls wird als Write-Ahead-Protokoll (Vorausschreiben-Protokoll) bezeichnet. 4. Alle abgeschlossenen Transaktionen werden vom immer wiederkehrenden Prfpunktprozess in der Datenbank auf dem Datentrger gespeichert. Bei einem Systemfehler sorgt das automatische Wiederherstellungsverfahren mit Hilfe des Transaktionsprotokolls dafr, dass fr alle Transaktionen, fr die ein Commit ausgefhrt wurde, ein Rollforward und fr unvollstndige Transaktionen ein Rollback durchgefhrt wird. Mit Hilfe von Transaktionsmarkierungen im Protokoll werden whrend der automatischen Wiederherstellung Anfang und Ende einer Transaktion ermittelt. Eine Transaktion gilt als abgeschlossen, wenn fr die BEGIN TRANSACTION-Markierung eine entsprechende COMMIT TRANSACTIONMarkierung vorhanden ist. Bei Auftreten eines Prfpunkts werden die Datenseiten auf den Datentrger geschrieben.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Festlegen von Datenbankoptionen


Thema
Stellen Sie einige konfigurierbare Datenbankoptionen vor.

Festlegen von Datenbankoptionen durch Verwenden von: SQL Server Enterprise Manager ALTER DATABASE-Anweisung Kategorien der Datenbankoptionen: Automatische Optionen Cursoroptionen Wiederherstellungsoptionen SQL-Optionen Statusoptionen

Einstieg

Fr die meisten Datenbanken knnen eine Reihe von Optionen festgelegt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Nachdem Sie eine Datenbank erstellt haben, knnen Sie die Datenbankoptionen mit SQL Server Enterprise Manager oder der ALTER DATABASE-Anweisung festlegen. Sie knnen zwar mehrere Datenbankoptionen gleichzeitig konfigurieren, dies ist aber immer nur fr jeweils eine Datenbank mglich. Um Optionen fr smtliche neue Datenbanken zu ndern, mssen Sie die model-Datenbank bearbeiten. In der folgenden Tabelle sind einige der hufiger verwendeten Optionen aufgefhrt.
Kategorie der Datenbankoption Automatische Optionen Datenbankoption AUTO_CREATE_STATISTICS Beschreibung Erstellt automatisch fehlende Statistiken, die eine Abfrage fr die Optimierung bentigt. Die Standardeinstellung ist ON. Aktualisiert automatisch veraltete Statistiken, die eine Abfrage fr die Optimierung bentigt. Die Standardeinstellung ist ON. Schliet automatisch geffnete Cursor, wenn ein Commit fr die Transaktion ausgefhrt wird. Die Standardeinstellung ist OFF, wobei die Cursor geffnet bleiben. CURSOR_DEFAULT LOCAL schrnkt den Gltigkeitsbereich des Cursors ein. Der Bereich ist lokal zu dem Batch, zu der gespeicherten Prozedur oder zu dem Trigger, in dem bzw. in der der Cursor erstellt wurde. CURSOR_DEFAULT GLOBAL ist die Standardeinstellung. Der Gltigkeitsbereich des Cursors ist global zu der Verbindung.

AUTO_UPDATE_STATISTICS

Cursoroptionen

CURSOR_CLOSE_ON_COMMIT

CURSOR_DEFAULT LOCAL | GLOBAL

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

(Fortsetzung) Kategorie der Datenbankoption Wiederherstellungsoptionen Datenbankoption RECOVERY FULL | BULK_LOGGED | SIMPLE Beschreibung FULL stellt vollstndige Wiederherstellbarkeit bei Datentrgerfehlern bereit. Dies ist der Standard. BULK_LOGGED kommt mit weniger Speicherplatz fr das Protokoll aus, da nur minimal protokolliert wird, birgt aber ein hheres Offenlegungsrisiko. SIMPLE stellt die Datenbank nur bis zur letzten vollstndigen oder differenziellen Datenbanksicherung wieder her. Ermglicht SQL Server das Erkennen von unvollstndigen E/A-Operationen, die durch Stromausflle oder Systemausflle verursacht wurden. Die Standardeinstellung ist ON. Ermglicht dem Benutzer, die Standardeinstellung fr die NULL-Zulssigkeit in der Datenbank zu steuern. Die Standardeinstellung bei SQL Server 2000 ist NOT NULL. Ist diese Option auf ON festgelegt, werden alle Vergleiche mit einem NULL-Wert als NULL (unbekannt) ausgewertet. Ist diese Option auf OFF festgelegt, werden Vergleiche von Nicht-Unicode-Werten mit NULL-Werten als TRUE ausgewertet, wenn beide Werte NULL sind. Der Standardwert fr die Datenbankoption ANSI_NULLS ist OFF. Definiert eine Datenbank als schreibgeschtzt - verwenden Sie diese Option zum Festlegen der Sicherheit von Decision Support-Datenbanken - oder lsst wieder Lese/Schreiboperationen in der Datenbank zu. SINGLE_USER ermglicht jeweils einem Benutzer, eine Verbindung zur Datenbank herzustellen. Alle anderen Benutzerverbindungen werden unterbrochen. RESTRICTED_USER ermglicht nur Mitgliedern der festen Datenbankrolle db_owner und der festen Serverrollen dbcreator und sysadmin, eine Verbindung zur Datenbank herzustellen. MULTI_USER ermglicht allen Benutzern mit den entsprechenden Berechtigungen, eine Verbindung zur Datenbank herzustellen. MULTI_USER ist die Standardeinstellung.

TORN_PAGE_DETECTION

SQL-Optionen

ANSI_NULL_DEFAULT

ANSI_NULLS

Statusoptionen

READ_ONLY | READ_WRITE

SINGLE_USER | RESTRICTED_USER | MULTI_USER

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Abrufen von Datenbankinformationen


Thema
Listen Sie die verschiedenen Mglichkeiten zum Abrufen von Datenbankinformationen auf.

Bestimmen von Datenbankeigenschaften mit Hilfe der DATABASEPROPERTYEX-Funktion Verwenden von gespeicherten Systemprozeduren, um Informationen zu Datenbanken und Datenbankparametern anzuzeigen sp_helpdb sp_helpdb database_name sp_spaceused [objname]

Einstieg

Es gibt mehrere Mglichkeiten, Datenbankinformationen abzurufen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Datenbankeigenschaften mit Hilfe der DATABASEPROPERTYEX-Funktion ermitteln. Syntax Methodischer Hinweis SELECT DATABASEPROPERTYEX (database, property) In der folgenden Tabelle sind einige Datenbankeigenschaften aufgefhrt.
Collation IsAnsiNullDefault IsAnsiNullsEnabled IsAnsiPaddingEnabled IsAnsiWarningsEnabled IsArithmeticAbortEnabled IsAutoCreateStatistics IsAutoShrink IsAutoUpdateStatistics IsCloseCursorsOnCommitEnabled IsFulltextEnabled IsInStandBy IsNullConcat IsQuotedIdentifiersEnabled IsRecursiveTriggersEnabled Recovery Status Updateability UserAccess Version

Fhren Sie vor, wie Datenbankinformationen unter SQL Server Enterprise Manager angezeigt werden.

10

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

In der folgenden Tabelle sind die gebruchlichsten gespeicherten Systemprozeduren aufgefhrt, mit denen Informationen zu den Datenbanken und Datenbankparametern angezeigt werden knnen.
Gespeicherte Systemprozedur sp_helpdb Beschreibung Fhrt alle auf einem Server vorhandenen Datenbanken auf, wobei der Datenbankname, die Gre, der Besitzer, die ID, das Erstellungsdatum und die Optionen aufgefhrt werden. Gibt Informationen ber die angegebene Datenbank aus, wobei der Datenbankname, die Gre, der Besitzer, die ID, das Erstellungsdatum und die Optionen aufgefhrt werden. Auerdem wird eine Liste der Daten- und Protokolldateien ausgegeben. Gibt den Speicherplatz an, den eine Datenbank oder ein Datenbankobjekt verwendet.

sp_helpdb database_name

sp_spaceused [objname]

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

11

Erstellen von Dateigruppen


Thema
Stellen Sie das Konzept der Dateigruppen vor.

Northwind-Datenbank
sys... sys... sys... sys... sysusers sysusers sysobjects sysobjects ... ... Orders Orders Customers Customers Products Products OrdHistYear2 OrdHistYear2 OrdHistYear1 OrdHistYear1

Einstieg

Dateigruppen bestehen aus einer oder mehreren Dateien mit einem bergeordneten Namen, die gemeinsam verwaltet werden und auf die gemeinsam zugegriffen werden kann.

C:\
Northwind.mdf Northwind.mdf

D:\
Ordhist1.ndf Ordhist1.ndf Ordhist2.ndf Ordhist2.ndf

E:\
Northwind.Idf Northwind.Idf

DEFAULT-Dateigruppe

OrderHistoryGroup

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Ihre Hardwareinstallation ber mehrere Laufwerke verfgt, knnen Sie bestimmte Objekte und Dateien unterschiedlichen Datentrgern zuordnen, wobei Sie die Datenbankdateien in Dateigruppen zusammenfassen. Dateigruppen sind benannte Auflistungen von Dateien. SQL Server schliet standardmig eine Dateigruppe ein. Sie knnen mit Hilfe der CREATE DATABASE- oder ALTER DATABASE-Anweisung weitere Dateigruppen erstellen. Bei Verwendung von Dateigruppen haben Sie die Mglichkeit, bestimmte Objekte einer bestimmten Datei zuzuweisen. In der Abbildung werden die Dateien Ordhist1.ndf und Ordhist2.ndf auf einem separaten Datentrger gespeichert, um so Dateien, die hufig abgefragt werden, von den Dateien zu trennen, die umfangreichen nderungen unterworfen sind, und so Datentrgerkonflikte zu reduzieren. Systemadministratoren haben auch die Mglichkeit, anstelle ganzer Datenbanken nur einzelne Dateien bzw. Dateigruppen zu sichern und wiederherzustellen. Das Sichern von Dateien oder Dateigruppen ist fr umfangreiche Datenbanken unbedingt erforderlich, um ber eine effiziente Sicherungs- und Wiederherstellungsstrategie zu verfgen.

12

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Allgemeine Aspekte bei der Verwendung von Dateigruppen


Weisen Sie darauf hin, dass man bei der Organisation einer Datenbank auch zu viel tun kann. Die Implementierung von RAID-Verfahren ist fr Programme oftmals gnstiger als die Verwendung von Dateigruppen.

Methodischer Hinweis

Die Verwendung von Dateigruppen gehrt zu den fortgeschrittenen Datenbankentwicklungstechniken. Um die gnstigste Anordnung der Tabellen und Indizes in den Dateigruppen ermitteln zu knnen, mssen Sie ber die Struktur Ihrer Datenbank, die Daten, Transaktionen und Abfragen sehr genau Bescheid wissen. Oftmals kann mit Hilfe der Striping-Funktionen von RAID-Systemen (Redundant Array of Inexpensive Disks) eine hnliche Verbesserung der Systemleistung erzielt werden, wie beim Einsatz von Dateigruppen, wobei Sie sich den zustzlichen Aufwand fr das Definieren und Verwalten der Dateigruppen ersparen. Anmerkung Protokolldateien knnen keiner Dateigruppe angehren. Der Speicherplatz in Protokolldateien wird unabhngig vom Speicherplatz in Datendateien verwaltet.

Dateigruppentypen
Unter SQL Server knnen die beiden folgenden Typen von Dateigruppen verwendet werden: Die primre Dateigruppe, die die Systemtabellen in der primren Datendatei enthlt. Benutzerdefinierte Dateigruppen, d. h. alle Dateigruppen, die mit dem Schlsselwort FILEGROUP definiert werden.

Festlegen der Standarddateigruppe


Wenn Sie eine Datenbank erstellen, dient die primre Dateigruppe automatisch als DEFAULT-Dateigruppe (Standarddateigruppe). Die Standarddateigruppe empfngt alle neuen Tabellen, Indizes und Dateien, fr die keine Dateigruppe angegeben wird. Wenn die Datenbank mehrere Dateigruppen enthlt, wird empfohlen, die Standarddateigruppe in eine der benutzerdefinierten Dateigruppen zu ndern. So kann verhindert werden, dass die primre Dateigruppe, die die Systemtabellen enthlt, versehentlich von einer Benutzertabelle belegt wird.

Festlegen der Gre der primren Standarddateigruppe


Wenn die Standarddateigruppe weiter als primre Dateigruppe dient, ist die korrekte Grenfestlegung fr die Standarddateigruppe sehr wichtig. Wenn in der Dateigruppe kein Speicherplatz mehr verfgbar ist, knnen Sie keine neuen Informationen zu den Systemtabellen hinzufgen. Wenn eine benutzerdefinierte Dateigruppe ber zu wenig Speicherplatz verfgt, sind davon nur die Benutzerdateien betroffen, die dieser Dateigruppe explizit zugewiesen werden.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

13

Beispiel

Im folgenden Beispiel wird in der Northwind-Datenbank eine benutzerdefinierte Dateigruppe erstellt und dieser Dateigruppe eine sekundre Datendatei hinzugefgt.
ALTER DATABASE Northwind ADD FILEGROUP OrderHistoryGroup GO ALTER DATABASE Northwind ADD FILE ( NAME = 'OrdHistYear1', FILENAME = 'c:\Programme\ Microsoft SQL Server\MSSQL\Data\OrdHist1.ndf, SIZE = 5MB), TO FILEGROUP OrderHistoryGroup GO

Anzeigen von Dateigruppeninformationen


Informationen ber Dateigruppen sind mit Hilfe von Funktionen, wie z. B. FILE_NAME, FILE_ID, FILE_PROPERTY, FILEGROUP_NAME, FILEGROUP_ID und FILEGROUP_PROPERTY, verfgbar. Die in der folgenden Tabelle aufgefhrten gespeicherten Systemprozeduren zeigen ebenfalls Informationen ber Dateigruppen an.
Gespeicherte Systemprozedur sp_helpfile [[@filename =] 'name'] Beschreibung Gibt die physischen Namen und Attribute der Dateien zurck, die der aktuellen Datenbank zugeordnet sind. Mit dieser gespeicherten Systemprozedur knnen Sie die Namen der Dateien ermitteln, die mit dem Server verbunden oder von ihm getrennt werden sollen. Gibt die Namen und Attribute von Dateigruppen zurck, die der aktuellen Datenbank zugeordnet sind.

sp_helpfilegroup [[@filegroupname =] 'filegroup_name']

14

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Verwalten von Datenbanken


Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

berwachen der Gre von Daten- und Protokolldateien berwachen und Erweitern eines Transaktionsprotokolls Verkleinern von Datenbanken und Dateien Lschen von Datenbanken

In diesem Abschnitt lernen Sie, wie Datenbanken und Transaktionsprotokolle verwaltet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Fragen Sie die Kursteilnehmer, ob sie mit den Themen dieses Abschnitts vertraut sind. Ist das der Fall, knnen Sie diesen Abschnitt allgemein unterrichten oder ganz berspringen.

Wenn sich der Umfang Ihrer Daten ndert, knnen Sie die Datenbank sowohl automatisch als auch manuell vergrern bzw. verkleinern. Wenn Sie eine Datenbank nicht lnger bentigen, knnen Sie sie zusammen mit allen zugehrigen Dateien lschen.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

15

berwachen der Gre von Daten- und Protokolldateien


Erlutern Sie, wie die Vergrerung von Daten- und Protokolldateien berwacht wird.

Thema

Automatische Dateivergrerung Vergrerung von Datenbankdateien Hinzufgen sekundrer Datenbankdateien


ALTER DATABASE Sample ALTER DATABASE Sample MODIFY FILE (NAME = 'SampleLog', MODIFY FILE (NAME = 'SampleLog', SIZE = 15MB) SIZE = 15MB) GO GO ALTER DATABASE Sample ALTER DATABASE Sample ADD FILE ADD FILE (NAME = SampleData2, (NAME = SampleData2, FILENAME=c:\Programme\..\..\ FILENAME=c:\Programme\..\..\ Data\Sample2.ndf', Data\Sample2.ndf', SIZE=15MB, SIZE=15MB, MAXSIZE=20MB) MAXSIZE=20MB) GO GO

Einstieg

Es gibt mehrere Mglichkeiten, die Gre einer Datenbank zu kontrollieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn die Gre der Datendateien zunimmt oder umfangreichere Datennderungen durchgefhrt werden, mssen die Daten- und Protokolldateien eventuell vergrert werden. Die Gre der Datenbank kann mit SQL Server Enterprise Manager sowie mit Hilfe der ALTER DATABASE-Anweisung verwaltet werden. Die ALTER DATABASE-Anweisung kann nur innerhalb der master-Datenbank ausgefhrt werden. Sie haben folgende Mglichkeiten, die Datenbankgre zu kontrollieren: Konfigurieren Sie die Datenbank- und Protokolldateien so, dass sie bei Bedarf automatisch vergrert werden. Erhhen oder vermindern Sie manuell den Wert fr die aktuelle oder die maximale Gre der bestehenden Datenbank- und Protokolldateien. Fgen Sie manuell sekundre Datenbank- und Protokolldateien hinzu.

Automatische Dateivergrerung
Sie knnen die Option fr die automatische Dateivergrerung entweder mit Hilfe der ALTER DATABASE-Anweisung oder mit SQL Server Enterprise Manager definieren, sodass die Datenbankdateien bei Bedarf automatisch um einen bestimmten Wert vergrert werden. Wenn Sie die automatische Dateivergrerung definieren, entfllt der fr die manuelle Datenbankvergrerung erforderliche Verwaltungsaufwand. Sie knnen fr jede Datei die Anfangsgre, die maximale Gre und die Schrittweite fr die Vergrerung festlegen. Obwohl die Dateivergrerung in MB oder KB angegeben werden kann, sollten Sie sie als Prozentsatz angeben. Ist keine Maximalgre angegeben, so kann die Datei vergrert werden, bis der gesamte verfgbare Speicherplatz auf dem Datentrger belegt ist.

16

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Wenn Sie die automatische Dateivergrerung bei mehreren Dateien einsetzen, verwendet SQL Server eine proportionale Fllstrategie ber alle Dateien einer Dateigruppe. So wie Daten in die Dateigruppe geschrieben werden, schreibt SQL Server in jede Datei der Dateigruppe einen Anteil, der proportional zum freien Speicherplatz in der Datei ist, anstatt zuerst in die erste Datei zu schreiben, bis diese voll ist, und dann in die nchste Datei zu schreiben. Fr eine optimale Systemleistung sollten Sie wie folgt vorgehen: Reservieren Sie eine ausreichende Anfangsgre fr die Datenbank und das Protokoll, um das hufige Aktivieren der automatischen Vergrerung zu vermeiden. Legen Sie eine maximale Gre fr Datendateien fest, wenn mehrere Datenbanken vorhanden sind. Legen Sie die Schrittweite fr die Vergrerung der Daten- und Protokolldateien so gro fest, dass das hufige Aktivieren der automatischen Vergrerung vermieden wird. Wenn das Protokoll beispielsweise um 40 MB tglich zunimmt, legen Sie die Schrittweite fr die automatische Vergrerung auf 50 MB oder 100 MB fest - und nicht etwa auf 1 MB.

Vergrerung von Datenbankdateien


Wenn Sie fr eine Datei keine Konfiguration fr die automatische Vergrerung vornehmen, kann die Gre dennoch gendert werden. Wenn Sie als Schrittweite fr die Vergrerung den Wert 0 (Null) angeben, wird eine automatische Vergrerung verhindert.

Hinzufgen sekundrer Datenbankdateien


Sie knnen eine Datenbank auch vergrern, indem Sie sekundre Datenbankdateien erstellen. Verwenden Sie sekundre Datenbankdateien, um Datendateien auf verschiedenen physischen Datentrgern zu verteilen, wenn Sie nicht die Datenaufteilung von RAID-Systemen nutzen. Teilsyntax ALTER DATABASE database { ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ] | ADD LOG FILE < filespec > [ ,...n ] | REMOVE FILE logical_file_name [ WITH DELETE ] | ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name | MODIFY FILE < filespec > | MODIFY NAME = new_dbname | MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name } | SET < optionspec > [ ,...n ] [ WITH < termination > ] | COLLATE < collation_name > }

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

17

Beispiel

Im folgenden Beispiel wird die aktuelle Protokollgre erhht und eine sekundre Datendatei zur Sample-Datenbank hinzugefgt.
ALTER DATABASE Sample MODIFY FILE (NAME = 'SampleLog', SIZE = 15MB) GO ALTER DATABASE Sample ADD FILE (NAME = 'SampleData2' , FILENAME='c:\Programme\ Microsoft SQL Server\MSSQL\Data\Sample2.ndf', SIZE=15MB , MAXSIZE=20MB) GO

18

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

berwachen und Erweitern eines Transaktionsprotokolls


Thema
Zeigen Sie, wie der Transaktionsprotokollspeicher berwacht und vergrert wird.

berwachen des Protokolls berwachen von Situationen, die eine erhhte Protokollaktivitt zur Folge haben Laden von groen Datenmengen in eine indizierte Tabelle Groe Transaktionen Durchfhren von protokollierten Operationen mit Textoder Bilddaten Protokollvergrerung bei Bedarf

Einstieg

Planen Sie sorgfltig, damit stets ausreichend Protokollspeicherplatz zur Verfgung steht.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn die Gre einer Datenbank zunimmt oder umfangreichere Datennderungen durchgefhrt werden, muss eventuell das Transaktionsprotokoll vergrert werden.

berwachen des Protokolls


Planen Sie die Gre des Protokolls sorgfltig, damit Ihnen hierfr stets ausreichend Speicherplatz zur Verfgung steht. Sie sollten das Protokoll regelmig berprfen, um den optimalen Zeitpunkt fr eine Vergrerung ermitteln zu knnen. Achtung Wenn fr Ihr Transaktionsprotokoll nicht mehr gengend Speicherplatz zur Verfgung steht, knnen keine Transaktionen aufgezeichnet werden und SQL Server lsst keine nderung Ihrer Datenbank mehr zu. Sie knnen das Transaktionsprotokoll mit SQL Server Enterprise Manager, mit der DBCC SQLPERF (LOGSPACE)-Anweisung oder mit dem Microsoft Windows 2000-Systemmonitor berwachen. Die Transaktionsprotokolle einzelner Datenbanken knnen mit Hilfe von Leistungsindikatoren des Objekts SQLServer:Datenbanken vom Systemmonitor berwacht werden. Einige dieser Indikatoren sind in der folgenden Tabelle aufgefhrt.
Leistungsindikator Geleerte Protokollbytes/Sekunde Protokollleerungen/Sekunde Ausstehende Protokollleerungen/Sekunde Prozentsatz des verwendeten Protokolls Anzeige Anzahl der Bytes im Protokollpuffer, wenn der Puffer geleert wird Anzahl der Protokollleerungen pro Sekunde Anzahl der Commits, die auf eine Protokollleerung warten Prozentsatz des beanspruchten Platzes in dem verwendeten Protokoll

Methodischer Hinweis

Zeigen Sie, wie das Protokoll mit dem Systemmonitor berwacht wird.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken (Fortsetzung) Leistungsindikator Protokolldatei(en) Gre (KB) Protokollcache-Trefferquote Anzeige Kumulierte Gre aller Protokolldateien in der Datenbank Prozentsatz der Lesevorgnge im Protokollcache, die durch den Protokollcache aufgelst werden konnten

19

berwachen von Situationen, die eine erhhte Protokollaktivitt zur Folge haben
Eine erhhte Aktivitt des Transaktionsprotokolls kann beispielsweise durch folgende Situationen verursacht werden: Wenn Informationen in eine Tabelle geladen werden, die Indizes enthlt. SQL Server protokolliert alle Einfgungen und Indexnderungen. Wenn Daten in Tabellen ohne Indizes geladen werden, protokolliert SQL Server nur Blockreservierungen. Wenn mit einer einzelnen Transaktion in einer Tabelle zahlreiche nderungen (INSERT-, UPDATE- und DELETE-Anweisungen) durchgefhrt werden. Dies ist normalerweise dann der Fall, wenn in der Anweisung eine WHERE-Klausel fehlt, oder wenn die WHERE-Klausel zu allgemein ist, sodass eine groe Anzahl von Datenstzen betroffen ist. Wenn in einer Tabelle Text- oder Imagedaten hinzugefgt oder gendert werden.

Protokollvergrerung bei Bedarf


Sie knnen das Transaktionsprotokoll mit SQL Server Enterprise Manager oder unter Verwendung der ALTER DATABASE-Anweisung vergrern.

20

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Verkleinern von Datenbanken und Dateien


Thema
Zeigen Sie, wie eine Datenbank verkleinert wird.

Verkleinern einer gesamten Datenbank


DBCC SHRINKDATABASE (Sample_Data, 25) DBCC SHRINKDATABASE (Sample_Data, 25)

Einstieg

Sie knnen eine ganze Datenbank oder nur bestimmte Dateien in einer Datenbank verkleinern.

Verkleinern einer Datendatei in der Datenbank


DBCC SHRINKFILE (Sample, 10) DBCC SHRINKFILE (Sample, 10)

Automatisches Verkleinern einer Datenbank Stellen Sie die autoshrink-Datenbankoption auf TRUE ein

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn zu viel Speicherplatz reserviert wurde, oder wenn weniger Speicher als geplant bentigt wird, knnen Sie entweder die gesamte Datenbank oder einige ihrer Datendateien verkleinern.

Verkleinern einer gesamten Datenbank


Sie knnen eine gesamte Datenbank entweder mit SQL Server Enterprise Manager oder mit Hilfe der SHRINKDATABASE-Anweisung des Datenbankprfprogramms (Database Consistency Checker, DBCC) verkleinern. Hierdurch werden alle Datendateien in der Datenbank verkleinert. SQL Server verkleinert Protokolldateien unter Verwendung einer verzgerten Verkleinerungsoperation, und zwar so, als wren alle Protokolldateien in einem zusammenhngenden Protokollpool zusammengefasst. Die Protokolldateien werden zurckgesetzt, nachdem das Protokoll abgeschnitten wurde. SQL Server versucht, die abgeschnittenen Protokolldateien so weit wie mglich auf die gewnschte Gre zu reduzieren. Syntax DBCC SHRINKDATABASE (database_name [, target_percent] [,{NOTRUNCATE | TRUNCATEONLY}]) In der folgenden Tabelle werden die DBCC SHRINKDATABASE-Optionen beschrieben.
Option target_percent Beschreibung Legt den gewnschten Prozentsatz des freien Speicherplatzes fest, der in der Datenbank verbleiben soll, nachdem SQL Server die Datenbank verkleinert hat. Bewirkt, dass SQL Server den freigegebenen Festplattenspeicher in den Datenbankdateien beibehlt. Standardmig wird der freigegebene Speicherplatz dem Betriebssystem wieder zur Verfgung gestellt.

NOTRUNCATE

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken (Fortsetzung) Option TRUNCATEONLY Beschreibung Bewirkt, dass der gesamte ungenutzte Speicherplatz in der Datendatei an das Betriebssystem freigegeben wird, und verkleinert die Datei auf den letzten reservierten Block. Damit wird die Dateigre reduziert, ohne Daten zu verschieben. Es wird nicht versucht, Zeilen aus nicht reservierten Seiten zu verschieben. SQL Server ignoriert target_percent, wenn Sie diese Option verwenden.

21

Beispiel

In diesem Beispiel wird die Datei Sample_Data so weit verkleinert, dass der freie Speicherplatz 25 % betrgt.
DBCC SHRINKDATABASE (Sample_Data, 25)

Wenn in dem vorherigen Beispiel die Sample-Datenbankdatei 6 MB Daten enthlt, betrgt die neue Gre der Datenbank 8 MB (6 MB Daten + 2 MB freier Speicherplatz). Anmerkung SQL Server sorgt dafr, dass die Gre des von den Daten belegten Speicherplatzes beim Verkleinern von Dateien nicht unterschritten werden kann. Auch die mit dem Parameter SIZE der CREATE DATABASE-Anweisung festgelegte Gre kann nicht unterschritten werden.

Verkleinern einer Datendatei in der Datenbank


Sie knnen eine Datendatei in einer Datenbank mit SQL Server Enterprise Manager oder durch Ausfhren der DBCC-Anweisung SHRINKFILE verkleinern. Syntax DBCC SHRINKFILE ({file_name |file_id} [, target_size] [, { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}]) In der folgenden Tabelle werden die DBCC SHRINKFILE-Optionen beschrieben.
Option target_size Beschreibung Legt die gewnschte Gre fr die Datendatei in MB als Ganzzahl fest. Wenn nichts angegeben wird, wird die Gre von DBCC SHRINKFILE so weit wie mglich reduziert. Verlagert alle Daten aus der angegebenen Datei in andere Dateien in derselben Dateigruppe. Es knnen auch knftig keine weiteren Daten in der Datei, auf die EMPTYFILE angewendet wird, gespeichert werden. Verwenden Sie diese Option, um die Datei mit Hilfe der ALTER DATABASE-Anweisung zu lschen.

EMPTYFILE

Beispiel

In diesem Beispiel wird die sample-Datendatei auf 10 MB verkleinert.


DBCC SHRINKFILE (Sample, 10)

22

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Automatisches Verkleinern einer Datenbank


Das automatische Verkleinern ist nicht standardmig aktiviert. Indem Sie die autoshrink-Datenbankoption auf TRUE einstellen, knnen Sie nicht belegten Speicherplatz mit Hilfe einer Datenbankoption automatisch wieder zur Verfgung zu stellen. Sie knnen diese Option auch mit SQL Server Enterprise Manager ndern. Bercksichtigen Sie beim Verkleinern einer Datenbank oder Datendatei die folgenden Punkte und Richtlinien: Nach der Verkleinerung muss die Datenbank noch grer sein als die model-Datenbank oder die in der Datenbank bzw. Datendatei enthaltenen Daten. Bevor Sie eine Datenbank oder Datendatei verkleinern, sollten Sie die betreffende Datenbank und die master-Datenbank sichern. Die DBCC-Anweisungen SHRINKDATABASE und SHRINKFILE werden verzgert ausgefhrt, sodass die Datenbank- bzw. Dateigre eventuell nicht sofort reduziert wird. Mit der Anweisung DBCC SHRINKFILE kann die Datenbank unter die bei Erstellung oder nderung angegebene Gre verkleinert werden, jedoch nicht unter die Gre, die fr die aktuellen Daten erforderlich ist.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

23

Lschen von Datenbanken


Thema
Erlutern Sie, wie eine Datenbank gelscht wird.

Vorgehensweise beim Lschen einer Datenbank SQL Server Enterprise Manager DROP DATABASE-Anweisung
DROP DATABASE Northwind, pubs DROP DATABASE Northwind, pubs

Einstieg

Lschen Sie eine Datenbank nur, wenn Sie ganz sicher sind, dass Sie diese nicht mehr bentigen.

Beschrnkungen fr das Lschen von Datenbanken Whrend des Wiederherstellens Wenn ein Benutzer mit der Datenbank verbunden ist Wenn die Datenbank als Teil der Replikation publiziert wird Wenn es sich um eine Systemdatenbank handelt

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie eine Datenbank nicht mehr bentigen, knnen Sie sie lschen. Beim Lschen einer Datenbank werden die Datenbank und alle Datentrgerdateien gelscht, die die Datenbank verwendet.

Vorgehensweise beim Lschen einer Datenbank


Sie knnen Datenbanken entweder mit SQL Server Enterprise Manager oder mit Hilfe der DROP DATABASE-Anweisung lschen. Syntax Beispiel DROP DATABASE database_name [,n] Im folgenden Beispiel werden mit einer Anweisung mehrere Datenbanken gelscht.
DROP DATABASE Northwind, pubs

Bercksichtigen Sie beim Lschen von Datenbanken die folgenden Punkte und Richtlinien: Wenn Sie SQL Server Enterprise Manager verwenden, knnen Sie immer nur jeweils eine Datenbank lschen. Mit Transact-SQL knnen mehrere Datenbanken gleichzeitig gelscht werden. Nach dem Lschen einer Datenbank verfgen smtliche Benutzernamen, denen diese Datenbank als Standarddatenbank zugewiesen war, nicht mehr ber eine Standarddatenbank. Anmerkung Fhren Sie nach dem Lschen einer Datenbank stets eine Sicherung der master-Datenbank durch.

24

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Weisen Sie darauf hin, dass die master-, model- und tempdb-Datenbanken unter SQL Server nicht gelscht werden knnen, das Lschen der msdbSystemdatenbank aber mglich ist.

Methodischer Hinweis

Beschrnkungen fr das Lschen von Datenbanken


Fr das Lschen von Datenbanken gelten folgende Beschrnkungen. Die folgenden Datenbanken knnen nicht gelscht werden: Datenbanken, die zum aktuellen Zeitpunkt wiederhergestellt werden. Datenbanken, die geffnet sind, weil durch einen Benutzer Lese- bzw. Schreibvorgnge durchgefhrt werden. Datenbanken, deren Tabellen fr die SQL Server-Replikation publiziert werden. Eine Systemdatenbank.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

25

Einfhrung in Datenstrukturen
Geben Sie eine Einfhrung in Datenstrukturen.

Thema

Einstieg

Art der Datenspeicherung Seitentypen und Blocktypen Seiten fr die Speicherplatzverwaltung Seiten fr die Tabellen- und Indexverfolgung

In diesem Abschnitt lernen Sie die Datenstrukturen von SQL Server kennen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Dieser Abschnitt beschreibt die Datenstrukturen, die SQL Server zum Speichern von Daten verwendet.

26

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Art der Datenspeicherung


Erlutern Sie die Struktur der Datenbanken.

Thema

Datenbank

Einstieg

Wenn Sie eine Datenbank erstellen, sollten Sie wissen, wie die Daten von SQL Server gespeichert werden.
Tabellen, Indizes Daten

Daten (Datei) MDF oder NDF

Protokoll (Datei) LDF

Seite (8 KB)

Block (8 zusammenhngende Seiten 8 KB)

Maximale Zeilengre = 8.060 Byte

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie eine Datenbank erstellen, sollten Sie wissen, auf welche Weise die Daten in SQL Server gespeichert werden, damit Sie den fr die Datenbank erforderlichen Speicherplatz berechnen und zuweisen knnen. Bercksichtigen Sie hinsichtlich des Speicherplatzes die folgenden Punkte und Richtlinien: Jede Datenbank besteht aus einer primren Datendatei, die mit der Dateinamenerweiterung MDF identifiziert wird, und einer oder mehreren Transaktionsprotokolldateien mit der Dateinamenerweiterung LDF. Darber hinaus kann eine Datenbank auch ber sekundre Datendateien verfgen. Diese werden mit der Dateinamenerweiterung NDF identifiziert. Diese physischen Dateien besitzen sowohl Betriebssystemdateinamen als auch logische Dateinamen, die Sie beide in Transact-SQL-Anweisungen verwenden knnen. Bei der Erstellung einer Datenbank wird in diese eine Kopie der modelDatenbank, die die Systemtabellen enthlt, aufgenommen. Die Mindestgre einer Datenbank muss grer oder gleich der Gre der modelDatenbank sein. SQL Server speichert, liest und schreibt Daten in zusammenhngenden Datenblcken von jeweils 8 KB, die als Seiten bezeichnet werden. Das heit also, dass in einer Datenbank 128 Seiten pro MB gespeichert werden knnen. Zeilen knnen nicht seitenbergreifend gespeichert werden. Daher betrgt der maximale Umfang einer einzigen Zeile, abzglich des fr die Verwaltung erforderlichen Platzes, 8.060 Byte.

Methodischer Hinweis

Es ist sehr wichtig, die maximale Gre von Zeilen und Blcken zu kennen, wenn Sie eine Datenbank entwerfen oder eine Kapazittsplanung durchfhren mchten. Da Zeilen nicht seitenbergreifend gespeichert werden knnen, belegt beispielsweise eine einzige Zeile von 4.035 Byte eine ganze 8.060-Byte-Seite.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

27

Alle Seiten werden in Blcken gespeichert. Ein Block besteht aus acht zusammenhngenden Seiten, bzw. 64 KB. Folglich knnen in einer Datenbank 16 Blcke pro MB gespeichert werden. In Transaktionsprotokolldateien werden alle Informationen gespeichert, die fr die Wiederherstellung einer Datenbank im Falle eines Systemfehlers erforderlich sind. Die Standardgre des Transaktionsprotokolls betrgt 25 % der Gre der Datendateien. Diese Zahl sollte jedoch nur als Anhaltspunkt dienen und kann entsprechend den Anforderungen Ihrer Anwendung angepasst werden.

28

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Seitentypen und Blocktypen


Stellen Sie die Seiten- und Blocktypen vor.

Thema

Seitentypen Seiten, auf denen die Speicherplatzreservierung verfolgt wird Seiten, die Benutzer- und Indexdaten enthalten Blocktypen

Einstieg

Speicherplatzreservierunge n in der Datenbank erfolgen berwiegend in Einheiten von acht Seiten, den Blcken.

Gemischter Block

Einheitliche Blcke

Freier Speicherplatz

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Seiten und Blcke sind die primren Datenstrukturen in der physischen SQL Server-Datenbank.

Seitentypen
SQL Server verwendet mehrere Seitentypen: bestimmte Seiten verfolgen die Speicherplatzreservierung nach, andere Seiten enthalten Benutzer- und Indexdaten. Die Seiten, auf denen die Speicherplatzreservierung nachverfolgt wird, enthalten dicht gepackte Informationen. Dadurch kann SQL Server diese Seiten effizient im Speicher behalten, um die Nachverfolgung zu vereinfachen.

Blocktypen
SQL Server verwendet zwei Blocktypen: Blcke, die Seiten aus mindestens zwei Objekten enthalten, werden als gemischte Blcke bezeichnet. Jede Tabelle fngt als gemischter Block an. Gemischte Blcke werden vor allem fr Seiten verwendet, die die Speicherplatzreservierung nachverfolgen und kleine Objekte enthalten. Blcke, deren acht Seiten alle fr ein einziges Objekt reserviert sind, werden als einheitliche Blcke bezeichnet. Sie werden verwendet, wenn Tabellen oder Indizes mehr als 64 KB Speicherplatz bentigen.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

29

Seiten fr die Speicherplatzverwaltung


Beschreiben Sie die Seiten, die den Speicherplatz verwalten.

Thema

0 1 2 3 4 5 6 7 7 0 1 2 3 4 5

Seitennummer

Einstieg

Die ersten vier Seiten jeder Datei informieren SQL Server darber, welche Seiten verwendet werden.

Dateiheader PFS GAM SGAM

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Der erste Block jeder Datei ist ein gemischter Block, der eine Dateiheaderseite und drei Reservierungsseiten enthlt. SQL Server reserviert diesen gemischten Block, wenn die primre Datei erstellt wird, und verwendet die Seiten intern.

Betonen Sie die folgenden Punkte: (1) Die PFS-Seite verfolgt alle Seiten. (2) Die GAM- und SGAM-Seiten verfolgen Blcke und nicht Seiten. (3) Mit Hilfe der GAM und SGAM kann SQL Server Speicherplatz finden, wenn neue Seiten bentigt werden. (4) PFS-, GAM- und SGAM-Seiten werden in greren Dateien bei Bedarf wiederholt.

Dateiheaderseite
Die Dateiheaderseite enthlt die Dateiattribute, wie z. B. den Namen der besitzenden Datenbank, die zugehrige Dateigruppe, die Mindestgre und die Schrittweite fr die Vergrerung. Sie ist die erste Seite in jeder Datei (Seite 0).

PFS-Seite
Die PFS-Seite (Page Free Space) ist eine Reservierungsseite, die Informationen zum freien Speicherplatz enthlt, der auf den Seiten einer Datei verfgbar ist. Seite 1 jeder Datei ist eine PFS-Seite. SQL Server fgt bei Bedarf weitere PFSSeiten hinzu. Jede PFS-Seite kann 8.000 zusammenhngende Seiten nachverfolgen, was annhernd 64 MB an Daten entspricht. Fr jede Seite enthlt die PFS-Seite ein Byte, in dem Folgendes aufgezeichnet wird: Ob die Seite reserviert wurde. Ob sich die Seite in einem gemischten oder einheitlichen Block befindet. Wie viel freier Speicherplatz ungefhr auf der Seite verfgbar ist.

30

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

GAM- und SGAM-Seiten


SQL Server ermittelt mit Hilfe der GAM-Seiten (Global Allocation Map) und der SGAM-Seiten (Secondary Global Allocation Map), wo sich freie Blcke oder gemischte Blcke mit freien Seiten befinden.

GAM-Seiten
Die GAM-Seite ist eine Reservierungsseite, die Informationen zu reservierten Blcken enthlt. Seite 2 jeder Datei ist eine GAM-Seite. SQL Server fgt bei Bedarf weitere GAM-Seiten hinzu. Jede GAM-Seite erfasst 63.904 Blcke, was ungefhr 4 GB an Daten entspricht. Die GAM-Seite enthlt ein Bit fr jeden Block, der von ihr abgedeckt wird. Das Bit hat den Wert 0, wenn der Block reserviert ist, und 1, wenn er frei ist.

SGAM-Seiten
Die SGAM-Seite ist eine Reservierungsseite, die Informationen zu reservierten Blcken enthlt. Seite 3 jeder Datei ist eine SGAM-Seite. SQL Server fgt bei Bedarf weitere SGAM-Seiten hinzu. SGAM-Seiten verfolgen gemischte Blcke, die derzeit ber mindestens eine freie Seite verfgen. Sie erfassen ebenfalls 63.904 Blcke. Wenn das Bit den Wert 0 hat, wird der Block entweder als einheitlicher Block oder als gemischter Block ohne freie Seiten verwendet. Wenn das Bit den Wert 1 hat, wird der Block als gemischter Block mit mindestens einer freien Seite verwendet. In der folgenden Tabelle werden die Einstellungen der GAM- und SGAM-Bits zusammengefasst:
GAM-Biteinstellung 1 0 0 SGAM-Biteinstellung 0 1 0 Blockverwendung Ein freier Block. Dieser Block wird derzeit nicht verwendet. Eine freie Seite. Dieser gemischte Block besitzt mindestens eine nicht zugewiesene Seite. Ein vollstndig belegter Block. Der Block ist als einheitlicher Block oder als vollstndig belegter gemischter Block zugewiesen.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

31

Seiten fr die Tabellen- und Indexverfolgung


Erlutern Sie die Aufgabe der IAM-Seiten.

Thema

Gemischte Blcke

Einheitliche Blcke

Einstieg

IAM-Seiten verfolgen die Beziehung zwischen einem Objekt und den von ihm verwendeten Blcken oder Seiten.

IAM Datenseite Seiten 3-8 Daten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis SQL Server weist anfnglich jeder Tabelle und jedem Index eine Reservierungsseite und mindestens eine Datenseite in einem gemischten Block zu. So wie das Objekt wchst, weist SQL Server bei Bedarf bis zu sieben weitere Seiten aus gemischten Blcken zu. Wenn das Objekt mehr als acht Seiten belegt, weist SQL Server weitere Seiten aus einheitlichen Blcken zu. SQL Server verwendet vier Seitentypen, um Tabellen und Indizes zu verwalten. Sie knnen sich an beliebiger Stelle in der Datei befinden. Es handelt sich um die IAM-, Daten-, Text/Image- und Indexseiten.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie. Betonen Sie, dass jede Tabelle und jeder Index eine eigene IAM-Seite besitzt. SQL Server findet mit Hilfe der IAM-Seite jeden Block und jede Seite, der bzw. die dem Objekt zugewiesen ist.

IAM-Seite
Die IAM-Seite ist eine Reservierungsseite, die Informationen zu den Blcken enthlt, die von einer Tabelle oder einem Index verwendet werden. Die IAM-Seite enthlt die Adressen der acht Anfangsseiten und eine Blockbitmap, die anzeigt, welche Blcke fr das betreffende Objekt derzeit belegt sind. Eine IAM-Seite kann bis zu 512.000 Datenseiten verfolgen. SQL Server fgt fr grere Tabellen bei Bedarf weitere IAM-Seiten hinzu. Fr IAM-Seiten wird stets freier Speicherplatz aus gemischten Blcken reserviert. Sie knnen sich an beliebiger Stelle in einer Datei oder Dateigruppe befinden. SQL Server versucht, IAM-Seiten zu Gruppen zusammenzufassen, um die Zugriffe zu beschleunigen.

Datenseite
Datenseiten enthalten alle Daten, ausgenommen Daten der Datentypen text, ntext und image.

Text/Image-Seite
Die Text/Image-Seite enthlt text-, ntext- und image-Daten.

Index-Seite
Die Indexseite enthlt Indexstrukturen.

32

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Empfohlene Methoden
Stellen Sie die empfohlenen Methoden zum Erstellen und Verwalten von Datenbanken vor.

Thema

Sichern der master-Datenbank Sichern der master-Datenbank

Einstieg

Die folgenden Methoden werden zur Erstellung und Verwaltung von Datenbanken empfohlen.

Angeben der maximalen Dateigre Angeben der maximalen Dateigre

Festlegen groer Schrittweiten fr die automatische Vergrerung Festlegen groer Schrittweiten fr die automatische Vergrerung

ndern der Standarddateigruppe ndern der Standarddateigruppe

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden untersttzen Sie beim Erstellen und Verwalten von Datenbanken: Fhren Sie nach dem Erstellen oder ndern einer Datenbank stets sofort eine Sicherung der master-Datenbank durch. Dies ist wichtig, da sich in der master-Datenbank der Systemkatalog befindet. Geben Sie eine maximale Gre an, wenn die automatische Dateivergrerung aktiviert ist. Dies verhindert, dass eine einzelne Datei die Festplatte vollstndig belegt. Legen Sie groe Schrittweiten fr die automatische Vergrerung fest, um hufige Dateivergrerungen zu vermeiden. Dies verringert den Verwaltungsaufwand von SQL Server und trgt dazu bei, dass die Datei auf der Festplatte nicht so stark fragmentiert wird. ndern Sie die Standarddateigruppe. Wenn die Datenbank mehrere Dateigruppen besitzt, weisen Sie eine benutzerdefinierte Dateigruppe als Standard zu. So wird verhindert, dass sich die unerwartete Zunahme der Tabellengre nachteilig auf die Systemtabellen in der primren Dateigruppe auswirkt.

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

33

bungseinheit A: Erstellen und Verwalten von Datenbanken


Thema
Geben Sie eine Einfhrung in die bungseinheit.

Einstieg

In dieser bungseinheit erstellen und verwalten Sie die ClassNorthwindDatenbank und lschen das Transaktionsprotokoll.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer Datenbank. Verwalten der Vergrerung einer Datenbank. ndern der Datenbankoptionen, um zu steuern, wie oft das Transaktionsprotokoll gelscht wird.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L03\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit bearbeiten zu knnen, mssen Sie die vorhergehende bungseinheit durchgearbeitet haben. Anmerkung Dieser Kurs basiert auf der Northwind-Datenbank. Das Schema fr die Northwind-Datenbank befindet sich in Anhang A. In den bungseinheiten wird eine parallele Version der Northwind-Datenbank mit dem Namen ClassNorthwind verwendet.

34

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

35

bung 1 Erstellen der ClassNorthwind-Datenbank


In dieser bung erstellen Sie die ClassNorthwind-Datenbank und definieren die fr die Daten und das Transaktionsprotokoll verwendeten Dateien. So erstellen Sie die ClassNorthwind-Datenbank In diesem Verfahren erstellen Sie mit Hilfe von SQL Server Enterprise Manager die ClassNorthwind-Datenbank. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\MOC\2328A\Labfiles\L03\Answers\Creabase.sql. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Kennwort Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

2. ffnen Sie SQL Server Enterprise Manager. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und die Installation von SQL Server zu verwalten, da Ihr SQLAdminx-Konto Mitglied der lokalen Microsoft Windows 2000-Gruppe Administratoren ist, der automatisch die SQL Server-Rolle sysadmin zugeordnet wird. 3. Erweitern Sie Microsoft SQL Servers, erweitern Sie SQL Server-Gruppe, und erweitern Sie anschlieend Ihren Computer. 4. Klicken Sie mit der rechten Maustaste auf Datenbanken, und klicken Sie dann auf Neue Datenbank. 5. Erstellen Sie mit Hilfe der Werte in der nachstehenden Tabelle die ClassNorthwind-Datenbank.
Parameter Datenbankname Name der Datenbankdatei Speicherort Anfangsgre Dateigruppe Dateivergrerung Maximale Dateigre Name der Transaktionsprotokolldatei Speicherort Anfangsgre Dateivergrerung Maximalgre der Protokolldatei Wert ClassNorthwind ClassNorthwind_Data (Standard) 25 MB Primary 10 Prozent 100 MB ClassNorthwind_Log (Standard) 15 MB 10 Prozent 40 MB

36

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

6. Nachdem Sie die ClassNorthwind-Datenbank erstellt haben, erweitern Sie in der Konsolenstruktur Datenbanken, klicken Sie mit der rechten Maustaste auf ClassNorthwind, und klicken Sie dann auf Eigenschaften. berprfen Sie die Informationen auf der Registerkarte Allgemein. 7. ffnen Sie SQL Query Analyzer, und stellen Sie eine Verbindung ber die Windows-Authentifizierung her. 8. Fhren Sie die gespeicherte Systemprozedur sp_helpdb aus, um Informationen zur ClassNorthwind-Datenbank anzuzeigen.
EXEC sp_helpdb ClassNorthwind

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

37

bung 2 Verwalten der Vergrerung der ClassNorthwindTransaktionsprotokolldatei


In dieser bung ndern Sie die maximale Gre der ClassNorthwindTransaktionsprotokolldatei. So vergrern Sie die ClassNorthwind-Transaktionsprotokolldatei In diesem Verfahren schreiben Sie eine Anweisung, die die Maximalgre der ClassNorthwind-Transaktionsprotokolldatei auf 50 MB und die aktuelle Gre des Protokolls auf 20 MB vergrert, und fhren die Anweisung aus. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\MOC\2328A\Labfiles\L03\Answers\Altebase.sql. 1. Schreiben Sie eine Anweisung, die die Maximalgre der ClassNorthwindTransaktionsprotokolldatei auf 50 MB erhht, und fhren Sie diese aus.
USE master GO ALTER DATABASE ClassNorthwind MODIFY FILE (NAME='ClassNorthwind_Log', MAXSIZE=50MB) GO

2. Schreiben Sie eine Anweisung, die die aktuelle Gre der ClassNorthwindTransaktionsprotokolldatei auf 25 MB erhht, und fhren Sie diese aus.
USE master GO ALTER DATABASE ClassNorthwind MODIFY FILE (NAME='ClassNorthwind_Log', MAXSIZE=25MB) GO

3. Schreiben Sie eine Anweisung, die die Schrittweite fr die Vergrerung der ClassNorthwind-Transaktionsprotokolldatei auf 20 Prozent erhht, und fhren Sie diese aus.
USE master GO ALTER DATABASE ClassNorthwind MODIFY FILE (NAME='ClassNorthwind_Log', FILEGROWTH=20%) GO

4. Fhren Sie die gespeicherte Systemprozedur sp_helpdb aus, um Informationen zur ClassNorthwind-Datenbank anzuzeigen und die nderungen zu berprfen.
EXEC sp_helpdb ClassNorthwind

38

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

bung 3 Festlegen des Wiederherstellungsmodells fr die Datenbank


In dieser bung legen Sie das Wiederherstellungsmodell fr die Datenbank auf SIMPLE fest. Damit kann SQL Server den Protokollspeicher wieder belegen, wenn er nicht mehr fr die Wiederherstellung bentigt wird. Dieses Modell reduziert zudem die Speicherplatzanforderungen. So legen Sie das Wiederherstellungsmodell fr die Datenbank fest In diesem Verfahren schreiben Sie eine Anweisung, die das Wiederherstellungsmodell fr die ClassNorthwind-Datenbank auf SIMPLE festlegt, und fhren sie aus. Sie verwenden hierzu die ALTER DATABASE-Anweisung. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\MOC\2328A\Labfiles\L03\Answers\RecovModel.sql. 1. Fhren Sie die folgende Anweisung aus, um die Option zu aktivieren, die das Transaktionsprotokoll jedes Mal lscht, wenn SQL Server einen Prfpunkt verarbeitet:
ALTER DATABASE ClassNorthwind SET RECOVERY SIMPLE GO

2. Fhren Sie die gespeicherte Systemprozedur sp_helpdb aus, um Informationen zur ClassNorthwind-Datenbank anzuzeigen und zu berprfen, ob das Wiederherstellungsmodell gendert wurde.
EXEC sp_helpdb ClassNorthwind

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

39

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Erstellen von Datenbanken Erstellen von Dateigruppen Verwalten von Datenbanken Einfhrung in Datenstrukturen

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Sie erstellen eine Datenbank, die selten aktualisiert wird, sondern hauptschlich bei der Entscheidungsfindung verwendet und hufig abgefragt, aber selten gendert wird. Welchen Prozentsatz der Datenbank wrden Sie fr das Transaktionsprotokoll reservieren? Die Antworten variieren. Der Prozentsatz kann zwischen 10 und 20 liegen. Mehr als 20 % sind nicht sinnvoll. Da die Datenbank wenig nderungszugriffe verzeichnet, sollten eher um die 10 % reserviert werden.

2. Welche Vorteile hat die Verwendung von Dateigruppen? Sie knnen Tabellen auf bestimmte Datentrger platzieren. Sie knnen umfangreiche Tabellen separat sichern.

40

Unterrichtseinheit 3: Erstellen und Verwalten von Datenbanken

3. Sie sind fr die Verwaltung der unternehmenswichtigen Buchhaltungsdatenstze Ihres Unternehmens verantwortlich. Welches DatenbankWiederherstellungsmodell wre fr diese Datenbank am besten geeignet? Sie sollten das vollstndige Wiederherstellungsmodell verwenden.

4. Die GAM-, SGAM- und IAM-Seiten verfolgen die Speicherplatzreservierung fr Daten. Worin unterscheidet sich die IAM-Seite von den GAM- und SGAM-Seiten? Die GAM- und SGAM-Seiten verfolgen Objekte nach. Die IAM-Seite verfolgt die Speicherreservierung fr eine bestimmte Tabelle oder einen bestimmten Index nach.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen


Inhalt bersicht Erstellen von Datentypen Erstellen von Tabellen Generieren von Spaltenwerten Generieren von Skripts Empfohlene Methoden bungseinheit A: Erstellen von Datentypen und Tabellen Lernzielkontrolle 1 2 9 17 21 22 23 33

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

iii

Hinweise fr den Kursleiter


Prsentation: 30 Minuten bungseinheit: 30 Minuten In dieser Unterrichtseinheit wird den Kursteilnehmern erlutert, wie Datentypen und Tabellen erstellt und Transact-SQL-Skripts generiert werden, die Anweisungen enthalten, mit denen eine Datenbank und deren Objekte erstellt werden. In der bungseinheit erstellen die Kursteilnehmer die Datentypen und Tabellen der ClassNorthwind-Datenbank, fgen Spalten hinzu und lschen sie und generieren dann ein Skript, um alle Datenbankobjekte erneut erstellen zu knnen, die im Vorfeld bereits erstellt wurden. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen und Lschen benutzerdefinierter Datentypen. Erstellen und Lschen von Benutzertabellen. Generieren von Spaltenwerten. Generieren von Skripts.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_04.ppt Die Beispieldatei C:\Moc\2328A\Demo\D04_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Erstellen von Datentypen Beschreiben Sie die vom System bereitgestellten Datentypen sowie die Richtlinien fr das Erstellen von benutzerdefinierten Datentypen. Erlutern Sie, wie benutzerdefinierte Datentypen hinzugefgt und gelscht werden. Erstellen von Tabellen Beschreiben Sie das Verfahren zum Erstellen, ndern und Lschen einer Tabelle. Generieren von Spaltenwerten Erlutern Sie die IDENTITY-Eigenschaft, die NEWID-Funktion und den uniqueidentifier-Datentyp, damit die Kursteilnehmer in der Lage sind, diese Fhigkeiten zu definieren und zum automatischen Generieren von Werten einzusetzen. Generieren von Skripts Beschreiben Sie, wie ein Transact-SQL-Skript generiert wird, das die Anweisungen enthlt, die zum Erstellen einer Datenbank und deren Objekte verwendet werden.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Einrichten der bungseinheit


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheit fr diese Unterrichtseinheit.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit in dieser Unterrichtseinheit muss die ClassNorthwindDatenbank in den fr diese bungseinheit erforderlichen Zustand zurckversetzt werden. Damit Kursteilnehmercomputer diese Anforderung erfllen, mssen Sie eine der folgenden Aktionen durchfhren: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore04.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore04.cmd ausfhren, um sicherzustellen, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

This page is intentionally left blank.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Erstellen von Datentypen Erstellen von Tabellen Generieren von Spaltenwerten Generieren von Skripts

Einstieg

In dieser Unterrichtseinheit erfahren Sie, wie Datentypen und Tabellen erstellt und Skripts generiert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In dieser Unterrichtseinheit wird beschrieben, wie Datentypen und Tabellen erstellt und Transact-SQL-Skripts generiert werden, die Anweisungen enthalten, mit denen eine Datenbank und deren Objekte erstellt werden. Am Ende dieser Unterrichtseinheit werden die Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen und Lschen benutzerdefinierter Datentypen. Erstellen und Lschen von Benutzertabellen. Generieren von Spaltenwerten. Generieren von Skripts.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Erstellen von Datentypen


Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

Systemdatentypen Erstellen und Lschen benutzerdefinierter Datentypen Richtlinien fr das Festlegen von Datentypen

In diesem Abschnitt lernen Sie, wie benutzerdefinierte Datentypen erstellt und gelscht werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bevor Sie eine Tabelle erstellen knnen, mssen Sie die Datentypen fr die Tabelle definieren. Datentypen geben die Art von Daten (Zeichen, Zahlen oder Datumsangaben) an, die in einer Spalte enthalten sein knnen, und bestimmen, wie die Daten gespeichert werden. Microsoft SQL Server 2000 enthlt eine Vielzahl unterschiedlicher Systemdatentypen. SQL Server gestattet auch die Erstellung von benutzerdefinierten Datentypen, die auf Systemdatentypen basieren.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Systemdatentypen
Thema
Listen Sie die SQL ServerDatentypen auf.

Numerisch Integer Exakt-numerisch Annhernd-numerisch Whrung Datum und Zeit Zeichendaten und Unicode-Zeichen Binr Andere

Einstieg

SQL Server stellt eine Reihe unterschiedlicher Datentypen bereit.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Datentypen definieren den Datenwert, der in jeder einzelnen Spalte zulssig ist. SQL Server stellt eine Reihe unterschiedlicher Datentypen bereit. Bestimmten allgemeinen Datentypen sind verschiedene SQL Server-Datentypen zugeordnet. Sie sollten die geeigneten Datentypen auswhlen, um die Leistung zu optimieren und Festplatten-Speicherplatz einzusparen.

Kategorien von Systemdatentypen


In der folgenden Tabelle werden allgemeine Datentypen den entsprechenden SQL Server-Systemdatentypen zugeordnet. Die Tabelle enthlt Synonyme fr Datentypen, um die Kompatibilitt mit ANSI zu gewhrleisten.
Allgemeine Datentypen Integer Von SQL Server bereitgestellte Systemdatentypen int bigint smallint, tinyint Exakt numerisch Annhernd numerisch Whrung Datum und Zeit decimal[(p[, s])] numeric[(p[, s])] float[(n)] real money, smallmoney Datetime, smalldatetime

ANSI-Synonym integer dec double precision, float[(n)] for n=8-15 float[(n)] for n=1-7 -

Anzahl der Bytes 4 8 2, 1 2-17 8 4 8, 4 8 4

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen (Fortsetzung) Allgemeine Datentypen Zeichendaten Von SQL Server bereitgestellte Systemdatentypen

Methodischer Hinweis
SQL Server kann mehrere Sprachen untersttzen, indem Zeichenfolgen in Unicode-Datentypfeldern (Doppelbyte) gespeichert werden.

ANSI-Synonym character[(n)] char VARYING[(n)] character VARYING[(n)] -

Anzahl der Bytes 0-8000

char[(n)] varchar[(n)]
text

0 - 2 GB 0-8000 (4000 Zeichen) 0 - 2 GB

UnicodeZeichen

nchar[(n)] nvarchar[(n)] ntext binary[(n)] varbinary[(n)]

Binr

binary VARYING[(n)] rowversion -

0-8000

Image Globaler Bezeichner Speziell

image uniqueidentifier bit, cursor, uniqueidentifier timestamp sysname table sql_variant

0 - 2 GB 16 1, 0-8 8 256 0-8016

Methodischer Hinweis

Machen Sie die Kursteilnehmer auf die Datentypen cursor, table und sql_variant aufmerksam.

Exakt und annhernd numerische Datentypen


Ob Sie einen exakt numerischen oder einen annhernd numerischen Datentyp verwenden, sollte von der Art und Weise bestimmt werden, wie Sie einen Datentyp verwenden mchten.

Exakt numerische Datentypen


Mit exakt numerischen Datentypen knnen Sie die zu verwendenden Dezimalstellen und die Genauigkeit genau angeben. So knnen Sie z. B. drei Ziffern rechts vom Dezimalzeichen und vier Ziffern links vom Dezimalzeichen angeben. Eine Abfrage gibt immer genau das zurck, was Sie eingegeben haben. SQL Server untersttzt zwei exakt numerische Datentypen, um die Kompatibilitt mit ANSI zu gewhrleisten: decimal und numeric. Im Allgemeinen werden exakt numerische Datentypen in Finanzanwendungen eingesetzt, in denen eine einheitliche Darstellung der Daten wichtig ist (immer zwei Dezimalstellen) und in denen diese Spalte mit den einheitlichen Daten abgefragt werden soll (z. B., um alle Kredite mit einem Zinssatz von 8,75 % zu finden).

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Annhernd numerische Datentypen


Annhernd numerische Datentypen speichern Daten so genau wie mglich. Die Bruchzahl 1/3 wird beispielsweise in einem Dezimalsystem als 0,33333 (Periode) dargestellt. Da die Zahl nicht genau gespeichert werden kann, wird ein annhernder Wert gespeichert. SQL Server untersttzt zwei annhernd numerische Datentypen: float und real. Wenn Sie Zahlen runden oder Qualittsprfungen zwischen Zahlen vornehmen, sollten Sie keine annhernd numerischen Datentypen verwenden. Anmerkung Das Verweisen auf Spalten mit dem float- oder real-Datentyp in WHERE-Klauseln sollte nach Mglichkeit vermieden werden.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Erstellen und Lschen benutzerdefinierter Datentypen


Erlutern Sie, wie benutzerdefinierte Datentypen hinzugefgt und gelscht werden.

Thema

Erstellen Erstellen EXEC EXEC EXEC EXEC EXEC EXEC Lschen Lschen EXEC sp_droptype city EXEC sp_droptype city sp_addtype city, 'nvarchar(15)', NULL sp_addtype city, 'nvarchar(15)', NULL sp_addtype region, 'nvarchar(15)', NULL sp_addtype region, 'nvarchar(15)', NULL sp_addtype country, 'nvarchar(15)', NULL sp_addtype country, 'nvarchar(15)', NULL

Einstieg

Sie knnen benutzerdefinierte Datentypen mit SQL Server Enterprise Manager oder mit gespeicherten Systemprozeduren hinzufgen oder lschen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Benutzerdefinierte Datentypen basieren auf Systemdatentypen. Sie ermglichen Ihnen eine genauere Definition der Datentypen, um die Konsistenz bei der Arbeit mit allgemeinen Datenelementen in unterschiedlichen Tabellen oder Datenbanken sicherzustellen. Ein benutzerdefinierter Datentyp wird fr eine bestimmte Datenbank definiert. Anmerkung Benutzerdefinierte Datentypen, die Sie in der model-Datenbank erstellen, werden automatisch in alle im Anschluss erstellten Datenbanken eingefgt. Jeder benutzerdefinierter Datentyp wird als Zeile zur systypes-Tabelle hinzugefgt. Sie knnen benutzerdefinierte Datentypen mit SQL Server Enterprise Manager oder mit gespeicherten Systemprozeduren hinzufgen oder lschen. Datentypnamen mssen die Regeln fr Bezeichner befolgen und fr jede Datenbank eindeutig sein. Definieren Sie jeden benutzerdefinierten Datentyp unter Bercksichtigung eines Systemdatentyps, wobei Sie vorzugsweise NULL oder NOT NULL angeben.

Fhren Sie den Kursteilnehmern vor, wie ein Datentyp mit SQL Server Enterprise Manager erstellt wird.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Erstellen eines benutzerdefinierten Datentyps


Die gespeicherte Systemprozedur sp_addtype erstellt benutzerdefinierte Datentypen. Syntax Beispiel sp_addtype {type}, [system_data_type] [, ['NULL' | 'NOT NULL']] [, 'owner_name'] Im folgenden Beispiel werden drei benutzerdefinierte Datentypen erstellt.
EXEC EXEC EXEC sp_addtype sp_addtype sp_addtype city, 'nvarchar(15)', NULL region, 'nvarchar(15)', NULL country, 'nvarchar(15)', NULL

Lschen eines benutzerdefinierten Datentyps


Die gespeicherte Systemprozedur sp_droptype lscht benutzerdefinierte Datentypen aus der systypes-Systemtabelle. Ein benutzerdefinierter Datentyp kann nicht gelscht werden, wenn Tabellen oder andere Datenbankobjekte darauf verweisen. Syntax Beispiel sp_droptype {type} Im folgenden Beispiel wird ein benutzerdefinierter Datentyp gelscht.
EXEC sp_droptype city

Anmerkung Fhren Sie die gespeicherte Systemprozedur sp_help aus, um eine Liste der derzeit definierten Datentypen abzurufen.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Richtlinien fr das Festlegen von Datentypen


Thema
Stellen Sie einige der Richtlinien fr das Auswhlen von Datentypen vor.

Einstieg

Falls die Spaltenlnge variiert, verwenden Sie variable Datentypen Verwenden Sie tinyint auf geeignete Art und Weise Im Allgemeinen sollten Sie fr numerische Datentypen decimal verwenden Falls der Speicher grer als 8000 Byte ist, verwenden Sie text oder image Verwenden Sie money fr Whrungen Verwenden Sie nicht float oder real fr Primrschlssel

Bei der Auswahl der Datentypen sollte die Speichergre auf die Anforderungen abgestimmt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bercksichtigen Sie die folgenden Richtlinien zum Auswhlen von Datentypen und Abstimmen der Speichergre auf die Anforderungen: Falls die Spaltenlnge variiert, verwenden Sie einen der variablen Datentypen. Ist z. B. eine Liste mit Namen vorhanden, knnen Sie diese auf varchar anstatt auf char (fest) einstellen. Wenn Sie eine schnell wachsende Buchhandelskette mit vielen Standorten besitzen und Sie den tinyint-Datentyp fr die Buchladen-ID in der Datenbank angegeben haben, treten Probleme beim ffnen von Buchladen Nummer 256 auf. Bei numerischen Datentypen bieten die Gre und die erforderliche Genauigkeitsstufe Untersttzung bei der Auswahl. Im Allgemeinen sollten Sie den decimal-Datentyp verwenden. Falls der Speicher grer als 8000 Byte ist, verwenden Sie text oder image. Liegt der Speicher unter 8000 Byte, verwenden Sie binary oder char. Falls mglich, sollten Sie varchar verwenden, da dieser Datentyp mehr Funktionen als text und image bietet. Verwenden Sie den money-Datentyp fr Whrungen. Verwenden Sie nicht die annhernd numerischen Datentypen float und real als Primrschlssel. Da die Werte dieser Datentypen nicht genau sind, sind sie fr den Einsatz in Vergleichen nicht geeignet.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Erstellen von Tabellen


Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

Wie SQL Server Daten in Zeilen anordnet Wie SQL Server Daten vom Typ text, ntext und image organisiert Erstellen und Lschen einer Tabelle Hinzufgen und Lschen einer Spalte

In diesem Abschnitt erfahren Sie, wie alle Datentypen fr eine Tabelle definiert und wie Tabellen erstellt werden, wie Spalten erstellt und gelscht und wie Spaltenwerte generiert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Nachdem Sie alle Datentypen fr die Tabelle definiert haben, knnen Sie Tabellen erstellen, Spalten hinzufgen und lschen und Spaltenwerte generieren.

10

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Wie SQL Server Daten in Zeilen anordnet


Beschreiben Sie, wie Daten in Zeilen angeordnet werden.

Thema

Daten
feststehende feststehende Daten Daten

Einstieg

Es ist wichtig, die Elemente des Datenteils jeder Zeile zu kennen, um die Gre der Tabelle vorausplanen zu knnen.

Header Header

NB NB

VB VB

Variable Daten Variable Daten

4 Byte

NullBlock Variabler Block

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine Datenzeile besteht aus einem Zeilenheader und einem Datenteil. Es ist wichtig, die Elemente des Datenteils jeder Zeile zu kennen, um die Gre der Tabelle vorausplanen zu knnen.

Zeilenheader
Der 4 Byte groe Zeilenheader enthlt Informationen ber die Spalten in der Datenzeile, wie beispielsweise einen Verweis auf die Endposition der unvernderlichen Daten der Zeile und ob sich in der Zeile Spalten mit variabler Lnge befinden.

Datenteil
Der Datenteil einer Zeile kann die folgenden Elemente enthalten: Daten fester Lnge. Daten mit fester Lnge werden vor den Daten mit variabler Lnge auf einer Seite eingegeben. Eine leere Datenzeile mit fester Lnge nimmt ebensoviel Platz ein wie eine gefllte Datenzeile mit fester Lnge. Eine Tabelle, die nur aus Spalten mit fester Lnge besteht, enthlt die gleiche Anzahl an Zeilen auf einer Seite. Nullblock. Ein Nullblock ist ein Satz an Bytes mit variabler Lnge. Er besteht aus zwei Byte, mit denen die Anzahl der Spalten gespeichert wird, gefolgt von einem Null-Bitmap, das angibt, ob jede einzelne Spalte Null ist. Die Gre eines Null-Bitmaps ist gleich ein Bit pro Spalte, aufgerundet zum nchsten Byte. Eine bis acht Spalten erfordern eine 1-Byte-Bitmap. Neun bis sechzehn Spalten erfordern eine 2-Byte-Bitmap.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

11

Variabler Block. Ein variabler Block besteht aus zwei Byte, die angeben, wie viele Spalten mit variabler Lnge vorhanden sind. Ein weiterer 2-ByteBlock pro Spalte verweist auf das Ende jeder Spalte mit variabler Lnge. Der variable Block wird ausgelassen, wenn es keine Spalten mit variabler Lnge gibt. Daten mit variabler Lnge. Daten mit variabler Lnge werden nach dem variablen Block auf der Seite eingegeben. Eine leere Datenzeile mit variabler Lnge bentigt keinen Platz. Eine Tabelle mit Spalten variabler Lnge kann einige lange Zeilen oder viele kurze Zeilen aufweisen. Tipp Sofern mglich, sollte die Zeilenlnge kompakt gehalten werden, damit mehr Zeilen auf eine Seite passen. Auf diese Weise wird die Eingabe/Ausgabe (E/A) verringert und die Puffercache-Trefferquote erhht.

12

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Wie SQL Server Daten vom Typ text, ntext und image organisiert
Thema
Datenzeile
TextTextZeiger

Stellen Sie die drei Datentypen vor, die in der Zeilenorganisation eine Ausnahme darstellen.

Einstieg

Datentypen mit variabler Lnge werden in der Regel als eine Seitenauflistung und nicht in Datenzeilen gespeichert.

Stammstruktur Stammstruktur

Zwischenknoten Zwischenknoten

Zwischenknoten Zwischenknoten

Block 1 Block 1

Block 2 Block 2

Block 1 Block 1

Block 2 Block 2

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Datentypen mit variabler Lnge knnen als eine Seitenauflistung oder in Datenzeilen gespeichert werden. Hierbei handelt es sich um die folgenden Datentypen: Den text-Datentyp, der bis zu 2.147.483.647 Zeichen enthalten kann. Der Nicht-Unicode-Datentyp text kann nicht fr Variablen oder Parameter in gespeicherten Prozeduren verwendet werden. Den ntext-Datentyp, der bis maximal 2 -1 (1.073.741.823) Zeichen oder 2 -1 Byte enthalten kann, was einer Gre von 2.147.483.647 Byte an Unicodedaten variabler Lnge entspricht. Das SQL-92-Synonym fr ntext ist national text. Den image-Datentyp, der 0 bis 2.147.483.647 Byte an Binrdaten enthalten kann. Da die Datentypen text, ntext und image in der Regel recht gro sind, speichert SQL Server diese Datentypen auerhalb der Zeilen. Ein 16-Byte-Zeiger in der Datenzeile verweist auf eine Stammstruktur, die die Daten enthlt. Die textStammstruktur bildet den Stammknoten des B-Baumes, der auf die Datenblcke verweist. Wenn mehr als 32 Kilobyte (KB) an Daten vorhanden sind, werden in dem B-Baum zwischen dem Stammknoten und den Datenblcken Zwischenknoten hinzugefgt. Dies ermglicht ein schnelles Navigieren im B-Baum beginnend in der Mitte einer Zeichenfolge. Bei geringer bis mittlerer Gre des Inhalts von text, ntext und image bietet SQL Server die Option, die Werte in der Datenzeile anstatt in einer separaten B-Baumstruktur zu speichern. Dies knnen Sie mit der Option text in row angeben. Sie knnen auch einen Grenzwert fr die Option festlegen; der Bereich liegt zwischen 24 und 7.000 Byte. Sie knnen die Option text in row fr eine Tabelle aktivieren, indem Sie die gespeicherte Systemprozedur sp_tableoption verwenden.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

13

Beispiel

In diesem Beispiel wird die Option text in row mit der gespeicherten Systemprozedur sp_tableoption aktiviert, und es wird angegeben, dass bis zu 1.000 text-, ntext- oder image-Zeichen auf der Datenseite gespeichert werden sollen.
EXEC sp_tableoption N'Employees', 'text in row', '1000'

Anmerkung Wenn Sie die Option aktivieren, jedoch keinen Wert angeben, wird der Standardwert von 256 Byte verwendet. Mit dem Standardwert wird sichergestellt, dass kleinere Werte und Textverweise in den Datenzeilen gespeichert werden knnen.

14

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Erstellen und Lschen einer Tabelle


Erlutern Sie, wie Tabellen erstellt und gelscht werden.

Thema

Erstellen einer Tabelle


Spaltenname Spaltenname Datentyp Datentyp CREATE TABLE dbo.Categories CREATE TABLE dbo.Categories (CategoryID int IDENTITY (CategoryID int IDENTITY (1,1) (1,1) CategoryName nvarchar(15) CategoryName nvarchar(15) Description ntext Description ntext Picture image Picture image NULL oder NULLoder oder NOT NULL NOT NULL NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL, NULL, NULL) NULL)

Einstieg

Beim Erstellen einer Tabelle mssen Sie den Tabellennamen, die Spaltennamen und die Datentypen angeben.

Sortieren von Spalten Angeben von NULL oder NOT NULL Berechnete Spalten Lschen einer Tabelle
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Beim Erstellen einer Tabelle mssen Sie den Tabellennamen, die Spaltennamen und die Spaltendatentypen angeben. Spaltennamen mssen innerhalb einer gegebenen Tabelle eindeutig sein. Die gleichen Spaltennamen knnen jedoch in unterschiedlichen Tabellen derselben Datenbank verwendet werden. Fr jede Spalte muss ein Datentyp angegeben werden.

Fhren Sie den Kursteilnehmern vor, wie eine Tabelle mit SQL Server Enterprise Manager erstellt wird.

Erstellen einer Tabelle


Wenn Sie in SQL Server Tabellen erstellen, sollten Sie die nachstehenden Aspekte bercksichtigen. Bei der Tabellenerstellung gelten die folgenden Maximalwerte: Zwei Milliarden Tabellen pro Datenbank. 1.024 Spalten pro Tabelle. 8.060 Byte pro Zeile (diese ungefhre maximale Lnge gilt nicht fr die Datentypen image, text und ntext).

Sortieren von Spalten


SQL Server untersttzt das Speichern von Objekten mit unterschiedlichen Sortierungen in der gleichen Datenbank. Auf der Spaltenebene knnen unterschiedliche SQL Server-Sortierungen angegeben werden, sodass jeder Spalte in einer Tabelle eine andere Sortierung zugewiesen werden kann.

Angeben von NULL oder NOT NULL


In der Tabellendefinition knnen Sie angeben, ob NULL-Werte in den einzelnen Spalten zulssig sind. Falls Sie NULL oder NOT NULL nicht angeben, stellt SQL Server die NULL- oder NOT NULL-Merkmale auf Basis des Standardwertes auf Sitzungs- oder Datenbankebene bereit. Diese Standardwerte knnen sich jedoch ndern, sodass Sie sich nicht auf die Werte verlassen sollten. SQL Server verwendet standardmig den Wert NOT NULL.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

15

Teilsyntax

CREATE TABLE table_name column_name data type [COLLATE<collation_name>] [NULL | NOT NULL] | column_name AS computed_column_expression [,.n] Im folgenden Beispiel wird die dbo.CategoriesNew-Tabelle erstellt, indem Folgendes angegeben wird: Die Spalten der Tabelle, ein Datentyp fr jede Spalte und ob die Spalte NULL-Werte zulsst.
CREATE TABLE dbo.CategoriesNew (CategoryID int IDENTITY (1, 1) CategoryName nvarchar(15) Beschreibung ntext Picture image

Beispiel

NOT NULL, NOT NULL, NULL, NULL)

Anmerkung Zum Anzeigen von Tabelleneigenschaften klicken Sie mit der rechten Maustaste auf eine Tabelle in SQL Server Enterprise Manager oder fhren die gespeicherte Systemprozedur sp_help und anschlieend einen Bildlauf nach rechts aus.

Berechnete Spalten
Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physisch in der Tabelle gespeichert ist. SQL Server verwendet eine von Ihnen erstellte Formel, um diesen Spaltenwert unter Verwendung von anderen Spalten in der gleichen Tabelle zu berechnen. Mit der Verwendung des Namens einer berechneten Spalte in einer Abfrage kann die Abfragesyntax vereinfacht werden.

Lschen einer Tabelle


Durch Lschen einer Tabelle werden die Tabellendefinition und alle Daten sowie die Berechtigungen fr die Tabelle entfernt. Bevor Sie eine Tabelle lschen knnen, sollten Sie alle Abhngigkeiten zwischen der Tabelle und anderen Objekten entfernen. Zum Anzeigen vorhandener Abhngigkeiten fhren Sie die gespeicherte Systemprozedur sp_depends aus. Syntax DROP TABLE table_name [,n]

16

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Hinzufgen und Lschen einer Spalte


Thema
Zeigen Sie den Kursteilnehmern, wie Spalten hinzugefgt und gelscht werden.

ALTER TABLE CategoriesNew Hinzu- ALTER TABLE CategoriesNew ADD Commission money null ADD Commission money null fgen
Customer_name Sales_amount Customer_name Sales_amount Sales_date Sales_date Customer ID Customer ID Commission Commission

Einstieg

Falls sich die Anforderungen ndern, mssen Sie mglicherweise Tabellen ndern, indem Sie Spalten hinzufgen oder lschen.

Lschen ALTER TABLE CategoriesNew ALTER TABLE CategoriesNew DROP COLUMN Sales_date DROP COLUMN Sales_date

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zwei Mglichkeiten zum ndern von Tabellen sind das Hinzufgen und Lschen von Spalten. Teilsyntax ALTER TABLE table {| [ALTER COLUMN column_name ] |{ ADD { < column_definition > ::= column_name data_type { [ NULL | NOT NULL ] | DROP column column_name} [,n]

Hinzufgen einer Spalte


Die Informationen, die Sie beim Hinzufgen einer Spalte angeben, hneln den Informationen, die Sie beim Erstellen einer Tabelle angeben. Beispiel In diesem Beispiel wird eine Spalte hinzugefgt, die NULL-Werte zulsst.
ALTER TABLE CategoriesNew ADD Commission money null

Lschen einer Spalte


Gelschte Spalten knnen nicht wiederhergestellt werden. Daher sollten Sie sich sicher sein, dass eine Spalte auch wirklich gelscht werden soll, bevor Sie diesen Schritt durchfhren. Beispiel In diesem Beispiel wird eine Spalte aus einer Tabelle gelscht.
ALTER TABLE CategoriesNew DROP COLUMN Sales_date

Anmerkung Alle auf einer Spalte basierenden Indizes und Einschrnkungen mssen entfernt werden, bevor die Spalte gelscht werden kann.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

17

Generieren von Spaltenwerten


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Verwenden der IDENTITY-Eigenschaft Verwenden der NEWID-Funktion und des uniqueidentifier-Datentyps

In diesem Abschnitt wird beschrieben, wie Spaltenwerte generiert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Es gibt mehrere Features, mit denen Sie Spaltenwerte generieren knnen: Die IDENTITY-Eigenschaft, die NEWID-Funktion und der uniqueidentifierDatentyp.

18

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Verwenden der IDENTITY-Eigenschaft


Erlutern Sie, wie die IDENTITY-Eigenschaft verwendet wird.

Thema

Anforderungen fr das Verwenden der IDENTITY-Eigenschaft Es ist nur eine Identittsspalte pro Tabelle zulssig Verwenden mit den Datentypen integer, numeric und decimal Abrufen von Informationen ber die IDENTITY-Eigenschaft Verwenden von IDENT_SEED und IDENT_INCR fr Definitionsinformationen Verwenden von @@identity zur Bestimmung des aktuellsten Wertes Verwalten der IDENTITY-Eigenschaft

Einstieg

Eine Identittsspalte wird hufig fr primre Schlsselwerte verwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Mit der IDENTITY-Eigenschaft knnen Sie Spalten (Identittsspalten) mit vom System generierten sequenziellen Werten erstellen, die jede in eine Tabelle eingefgte Zeile kennzeichnen. Eine Identittsspalte wird hufig fr primre Schlsselwerte verwendet. Die automatische Bereitstellung von Schlsselwerten durch SQL Server kann zu einer Verringerung der Kosten und einer Verbesserung der Leistung beitragen. Die Programmierung wird vereinfacht, primre Schlsselwerte werden kurz gehalten und die Hufigkeit von Engpssen durch Transaktionen von Benutzern wird verringert. CREATE TABLE table (column_name data_type [ IDENTITY [(seed, increment)]] NOT NULL ) Bei Verwendung der IDENTITY-Eigenschaft sollten Sie die folgenden Anforderungen bercksichtigen: Es ist nur eine Identittsspalte pro Tabelle zulssig. Identittsspalten mssen vom Datentyp integer (int, bigint, smallint oder tinyint), numeric oder decimal sein. Die Datentypen numeric und decimal mssen mit 0 Dezimalstellen angegeben werden. Sie kann nicht aktualisiert werden. Sie knnen das IDENTITYCOL-Schlsselwort anstelle des Spaltennamens in einer Abfrage verwenden. Auf diese Weise knnen Sie auf die Spalte in der Tabelle verweisen, die ber die IDENTITY-Eigenschaft verfgt, ohne den Spaltennamen kennen zu mssen. NULL-Werte sind nicht zulssig.

Falls Sie nicht die automatische Vergrerung verwenden, muss eine Abfrage zum Suchen des nchsten Wertes ausgefhrt werden.

Teilsyntax

Um zu ermitteln, welcher Datentyp zur Definition der Spalte mit Hilfe der IDENTITY-Eigenschaft verwendet werden soll, versuchen Sie, die Anzahl der in der Tabelle enthaltenen Zeilen zu schtzen.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

19

Es bestehen mehrere Mglichkeiten, um Informationen ber die IDENTITYEigenschaft abzurufen: Zwei Systemfunktionen geben Informationen ber die Definition einer Identittsspalte zurck: IDENT_SEED (gibt den Ausgangswert zurck) und IDENT_INCR (gibt den Schrittweitenwert zurck). Sie knnen Daten aus Identittsspalten mit Hilfe der globalen Variable @@identity abrufen, die den Wert der letzten Zeile ermittelt, die whrend einer Sitzung in eine Identittsspalte eingefgt wurde. SCOPE_IDENTITY gibt den letzten IDENTITY-Wert zurck, der in eine IDENTITY-Spalte im selben Bereich eingefgt wurde. Ein Bereich ist eine gespeicherte Prozedur, ein Trigger, eine Funktion oder ein Batch. IDENT_CURRENT gibt den letzten IDENTITY-Wert zurck, der fr eine angegebene Tabelle in einer beliebigen Sitzung und in einem beliebigen Bereich generiert wurde. Es bestehen mehrere Mglichkeiten zum Verwalten der IDENTITYEigenschaft: Sie knnen gestatten, dass explizite Werte in die Identittsspalte einer Tabelle eingefgt werden, indem Sie die Option IDENTITY_INSERT aktivieren. Wenn IDENTITY_INSERT aktiviert ist, mssen INSERTAnweisungen einen Wert liefern. Um den aktuellen IDENTITY-Wert einer Tabelle zu prfen und gegebenenfalls zu korrigieren, knnen Sie die DBCC CHECKIDENT-Anweisung verwenden. DBCC CHECKIDENT ermglicht Ihnen, den aktuellen IDENTITY-Wert mit dem Maximalwert in der Identittsspalte zu vergleichen. Anmerkung Die IDENTITY-Eigenschaft erzwingt keine Eindeutigkeit. Sie knnen Eindeutigkeit erzwingen, indem Sie einen eindeutigen Index erstellen. Beispiel In diesem Beispiel wird eine Tabelle mit zwei Spalten, StudentId und Name, erstellt. Die IDENTITY-Eigenschaft erhht automatisch den Wert in jeder Zeile, die zur StudentId-Spalte hinzugefgt wird. Der Ausgangswert wird auf 100 festgelegt, der Schrittweitenwert auf 5. Die Werte in den Spalten wren 100, 105, 110, 115 usw. Durch die Verwendung des Schrittweitenwertes 5 knnen Sie Datenstze zu einem spteren Zeitpunkt zwischen den Werten einfgen.
CREATE TABLE Class (StudentID int IDENTITY(100, 5) NOT NULL, Name varchar(16))

20

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Verwenden der NEWID-Funktion und des uniqueidentifierDatentyps


Thema
Beschreiben Sie, wie diese Features eingesetzt werden.

Einstieg

Diese Funktionen werden zusammen verwendet Gewhrleisten von globaler Eindeutigkeit der Werte Verwenden mit der DEFAULT-Einschrnkung
CREATE TABLE Customer CREATE TABLE Customer (CustID uniqueidentifier NOT NULL DEFAULT NEWID(), (CustID uniqueidentifier NOT NULL DEFAULT NEWID(), CustName char(30) NOT NULL) CustName char(30) NOT NULL)

Der uniqueidentifierDatentyp und die NEWIDFunktion sind zwei Features, die zusammen eingesetzt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Der uniqueidentifier-Datentyp und die NEWID-Funktion sind zwei Features, die zusammen eingesetzt werden. Verwenden Sie diese Features, wenn Daten aus zahlreichen Tabellen in einer greren Tabelle sortiert werden und die Eindeutigkeit zwischen allen Datenstzen aufrecht erhalten werden muss: Der uniqueidentifier-Datentyp speichert eine eindeutige ID als binre 16-Byte-Zeichenfolge. Dieser Datentyp wird zum Speichern eines global eindeutigen Bezeichners (Global Unique Identifier, GUID) verwendet. Die NEWID-Funktion erstellt eine eindeutige ID, die eine GUID mit Hilfe des uniqueidentifier-Datentyps speichern kann. Im Gegensatz zur IDENTITY-Eigenschaft generiert der uniqueidentifierDatentyp nicht automatisch neue IDs fr eingefgte Zeilen. Um neue uniqueidentifier-Werte zu erhalten, mssen Sie eine Tabelle mit einer DEFAULT-Einschrnkung definieren, mit der die NEWID-Funktion angegeben wird. Wenn Sie eine INSERT-Anweisung verwenden, mssen Sie ebenfalls die NEWID-Funktion angeben. Beispiel In diesem Beispiel wird die Kunden-ID-Spalte (CustID) der Customer-Tabelle mit einem uniqueidentifier-Datentyp mit dem von der NEWID-Funktion generierten Standardwert erstellt. Fr jede neue und vorhandene Zeile wird ein eindeutiger Wert fr die CustId-Spalte generiert.
CREATE TABLE Customer (CustID uniqueidentifier NOT NULL DEFAULT NEWID(), CustName char(30) NOT NULL)

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

21

Generieren von Skripts


Beschreiben Sie, wie eine Skriptdatei generiert wird.

Thema

Generieren eines Schemas als Transact-SQL-Skript Verwalten eines Sicherungsskripts Erstellen oder Aktualisieren von DatenbankEntwicklungsskripts Erstellen einer Test- oder Entwicklungsumgebung Schulung von neuen Mitarbeitern Was erstellt werden kann Eine ganze Datenbank in einer einzigen Skriptdatei Nur-Tabellen-Schema Tabellen- und Indexschema

Einstieg

Beim Erstellen von Objekten in einer Datenbank sollten alle Objektdefinitionen in einer Skriptdatei gespeichert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Beim Erstellen von Objekten in einer Datenbank sollten alle Objektdefinitionen in einer Skriptdatei gespeichert werden.

Fhren Sie den Kursteilnehmern vor, wie mit Hilfe der Northwind-Datenbank ein Skript erstellt wird.

Generieren eines Schemas als Transact-SQL-Skript


Mit Hilfe von SQL Server Enterprise Manager knnen Sie eine vorhandene Datenbankstruktur (Schema) dokumentieren, indem Sie das Schema als ein oder mehrere Transact SQL-Skripts generieren. Diese Transact SQL-Skripts enthalten Beschreibungen der Anweisungen, die zur Erstellung der Datenbank und ihrer Objekte verwendet wurden. Die als Transact-SQL-Skripts generierten Schemas knnen fr folgende Zwecke eingesetzt werden: Verwalten eines Sicherungsskripts, mit dessen Hilfe ein Benutzer alle Benutzer, Gruppen, Benutzernamen und Berechtigungen erneut erstellen kann. Erstellen oder Aktualisieren von Datenbankentwicklungsskripts. Erstellen einer Test- oder Entwicklungsumgebung aus einem vorhandenen Schema. Schulung von neuen Mitarbeitern.

Was erstellt werden kann


Sie knnen Folgendes erstellen: Eine ganze Datenbank in einer einzelnen Skriptdatei. Nur-Tabellen-Schema fr eine, mehrere oder alle Tabellen in einer Datenbank, das in einer oder mehreren Skriptdateien gespeichert wird. Tabellen- und Indexschema, das in einer Skriptdatei gespeichert wird, gespeicherte Prozeduren, die in einer anderen Skriptdatei gespeichert werden, sowie Standards und Regeln, die wiederum in einer anderen Skriptdatei gespeichert werden.

22

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Empfohlene Methoden
Erlutern Sie die empfohlenen Methoden zum Erstellen von Datentypen und Tabellen.

Thema

Legen Sie die geeigneten Datentypen und Datentypgren fest Legen Sie die geeigneten Datentypen und Datentypgren fest Geben Sie immer die Spalteneigenschaften in CREATE TABLE an Geben Sie immer die Spalteneigenschaften in CREATE TABLE an Generieren Sie Skripts, mit deren Hilfe Sie die Datenbank und Generieren Sie Skripts, mit deren Hilfe Sie die Datenbank und ihre Objekte erneut erstellen knnen ihre Objekte erneut erstellen knnen

Einstieg

Im Folgenden sind die empfohlenen Methoden zum Erstellen von Datentypen und Tabellen aufgefhrt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden untersttzen Sie beim Erstellen von Datentypen und Tabellen: Geben Sie die geeigneten Datentypen und Datentypgren an. Wenn Sie eine CREATE TABLE-Anweisung schreiben, geben Sie immer die Spalteneigenschaften an. Generieren Sie nach dem Erstellen einer Datenbank und der Datenbankobjekte ein Skript, mit dessen Hilfe Sie die Datenbank und ihre Objekte erneut erstellen knnen.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

23

bungseinheit A: Erstellen von Datentypen und Tabellen


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen Sie benutzerdefinierte Datentypen, Tabellen, fgen Spalten hinzu lschen sie und generieren Skripts.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von benutzerdefinierten Datentypen. Erstellen von Tabellen. Hinzufgen und Lschen von Spalten. Erstellen von Transact-SQL-Skripts von einer Datenbank.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L04 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L04\Answers befinden.

Einrichten der bungseinheit


Damit Sie diese bungseinheit bearbeiten knnen, muss eine der folgenden Voraussetzungen erfllt sein: Die vorhergehende bungseinheit muss durchgearbeitet worden sein. Die Batchdatei C:\Moc\2328A\Batches\Restore04.cmd muss ausgefhrt worden sein. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr die bungseinheit Voraussetzung ist.

24

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

25

bung 1 Erstellen benutzerdefinierter Datentypen


In dieser bung erstellen Sie benutzerdefinierte Datentypen fr die ClassNorthwind-Datenbank. So fhren Sie ein Skript aus, das einen benutzerdefinierten Datentyp erstellt In diesem Verfahren fhren Sie ein Skript aus, mit dessen Hilfe ein benutzerdefinierter Datentyp in der ClassNorthwind-Datenbank erstellt wird. 1. Melden Sie sich an der Schulungsraumdomne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihren Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglieder der lokalen Microsoft Windows 2000-Gruppe Administratoren ist. Allen Mitgliedern dieser Gruppe ist automatisch die SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen und berprfen Sie die Skriptdatei Creatyp1.sql im Verzeichnis C:\Moc\2328A\Labfiles\L04. Mit diesem Skript wird ein neuer Datentyp mit Namen postalcode erstellt, der bis zu 10 Byte Zeichendaten enthalten und auch NULL sein kann. 5. Fhren Sie Creatyp1.sql aus. 6. ffnen und berprfen Sie die Skriptdatei Vertype.sql im Verzeichnis C:\Moc\2328A\Labfiles\L04, und fhren Sie sie aus. berprfen Sie, ob der Datentyp erstellt wurde.

26

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

So erstellen Sie benutzerdefinierte Datentypen In diesem Verfahren erstellen Sie Anweisungen, mit denen benutzerdefinierte Datentypen in der ClassNorthwind-Datenbank erstellt werden, und fhren die Anweisungen dann aus. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich im Verzeichnis C:\Moc\2328A\Labfiles\L04\Answers\Creatyp2.sql. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Schreiben Sie Anweisungen zum Erstellen der in der folgenden Tabelle beschriebenen benutzerdefinierten Datentypen, und fhren Sie diese Anweisungen aus.
Datentyp City Region Country Beschreibung der Daten Bis zu 15 Byte Zeichendaten, die NULL sein knnen Bis zu 15 Byte Zeichendaten, die NULL sein knnen Bis zu 15 Byte Zeichendaten, die NULL sein knnen

EXEC sp_addtype city, 'nvarchar(15)', NULL EXEC sp_addtype region, 'nvarchar(15)', NULL EXEC sp_addtype country, 'varchar(15)', NULL

3. ffnen Sie Vertype.sql, und fhren Sie das Skript aus, um zu berprfen, ob die Datentypen erstellt wurden.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

27

bung 2 Erstellen von Tabellen in der ClassNorthwind-Datenbank


In dieser bung erstellen Sie alle Tabellen fr die ClassNorthwind-Datenbank. So fhren Sie ein Skript aus, das eine Tabelle erstellt In diesem Verfahren fhren Sie ein Skript aus, das die Employees-Tabelle in der ClassNorthwind-Datenbank erstellt. 1. ffnen und berprfen Sie die Skriptdatei Creatab1.sql im Verzeichnis C:\Moc\2328A\Labfiles\L04. Dieses Skript erstellt die Employees-Tabelle in der ClassNorthwindDatenbank. 2. Fhren Sie Creatab1.sql aus. So erstellen Sie eine Tabelle mit Hilfe von Anweisungen In diesem Verfahren schreiben Sie eine Anweisung, die die Suppliers-Tabelle in der ClassNorthwind-Datenbank erstellt, und fhren diese aus. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\Moc\2328A\Labfiles\L04\Answers\Creatab2.sql. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Schreiben Sie eine Anweisung zum Erstellen der Suppliers-Tabelle, wobei Sie die folgenden Spaltennamen und ihre jeweiligen Datentypen definieren. Fhren Sie dann die Anweisung aus.

28

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

Stellen Sie sicher, dass die Spalten SupplierID und CompanyName keine NULL-Werte, alle anderen Spalten hingegen NULL-Werte zulassen.
Spaltenname SupplierID CompanyName ContactName ContactTitle Adresse City Region PostalCode Country Phone Fax HomePage Datentyp int nvarchar (40) nvarchar (30) nvarchar (30) nvarchar (60) city region postalcode country nvarchar (24) nvarchar (24) ntext NULL-Werte zulssig Nein Nein Ja Ja Ja Ja Ja Ja Ja Ja Ja Ja IDENTITYEigenschaft Anfangswert = 1 Schrittweite = 1 Nein Nein Nein Nein Nein Nein Nein Nein Nein Nein Nein

CREATE TABLE Suppliers (SupplierID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax HomePage int IDENTITY(1,1) NOT NULL, NOT NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)

nvarchar (40) nvarchar (30) nvarchar (30) nvarchar (60) city region postalcode country nvarchar (24) nvarchar (24) ntext

Welche Datentypen sind benutzerdefiniert? City, region, postalcode und country. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

29

So erstellen Sie eine Tabelle mit SQL Server Enterprise Manager In diesem Verfahren verwenden Sie SQL Server Enterprise Manager zum Erstellen der Customers-Tabelle in der ClassNorthwind-Datenbank. 1. ffnen Sie SQL Server Enterprise Manager. 2. Erweitern Sie Microsoft SQL Servers, erweitern Sie SQL Server-Gruppe, erweitern Sie Ihren Server, und erweitern Sie anschlieend Datenbanken. 3. Klicken Sie mit der rechten Maustaste auf ClassNorthwind, zeigen Sie auf Neu, und klicken Sie dann auf Tabelle. 4. Erstellen Sie die Customers-Tabelle anhand der Angaben in der nachstehenden Tabelle, und definieren Sie die Spaltennamen sowie die entsprechenden Datentypen. Stellen Sie sicher, dass die Spalten CustomerID und CompanyName keine NULL-Werte zulassen. Stellen Sie sicher, dass alle anderen Spalten NULLWerte zulassen.
Spaltenname CustomerID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax Datentyp nchar (5) nvarchar (40) nvarchar (40) nvarchar (30) nvarchar (60) city region postalcode country nvarchar (24) nvarchar (24) NULL-Werte zulssig? Nein Nein Ja Ja Ja Ja Ja Ja Ja Ja Ja

5. Speichern Sie die neue Tabelle als Customers, und schlieen Sie das Fenster Neue Tabelle. So fhren Sie ein Skript aus, das alle Tabellen in der ClassNorthwind-Datenbank erstellt In diesem Verfahren fhren Sie ein Skript aus, das alle Tabellen in der ClassNorthwind-Datenbank erstellt. 1. Wechseln Sie zu SQL Query Analyzer. 2. ffnen und berprfen Sie die Skriptdatei Creatab3.sql im Verzeichnis C:\Moc\2328A\Labfiles\L04, und fhren Sie sie aus. Dieses Skript erstellt alle Tabellen in der ClassNorthwind-Datenbank. Es lscht zunchst alle zuvor erstellten Tabellen.

30

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

bung 3 Hinzufgen und Lschen von Spalten


In dieser bung fgen Sie mit der ALTER TABLE-Anweisung Spalten zu einer Tabelle hinzu und lschen Spalten aus einer Tabelle in der ClassNorthwind-Datenbank. So fgen Sie eine Spalte zu einer Tabelle hinzu In diesem Verfahren schreiben Sie eine Anweisung, die eine Spalte zur Employees-Tabelle in der ClassNorthwind-Datenbank hinzufgt, und fhren diese aus. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\Moc\2328A\Labfiles\L04\Answers\Addcol.sql. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Schreiben Sie eine Anweisung zum Hinzufgen einer Spalte zur Employees-Tabelle, und fhren Sie diese aus. Die Spalte soll den Namen Age erhalten, den tinyint-Datentyp verwenden und NULL-Werte zulassen.
ALTER TABLE Employees ADD Age tinyint NULL GO

3. Fhren Sie die gespeicherte Systemprozedur sp_help fr die EmployeesTabelle aus, um zu berprfen, ob die Age-Spalte wie angegeben definiert wurde. Beachten Sie, dass die Age-Spalte als letzte Spalte in der Tabelle angezeigt wird.
EXEC sp_help Employees GO

So lschen Sie eine Spalte aus einer Tabelle Nachdem Sie mit den Benutzern die Clientanforderungen durchgegangen sind, haben Sie festgestellt, dass die Age-Spalte nicht bentigt wird. In diesem Verfahren schreiben Sie eine Anweisung, die die Age-Spalte aus der EmployeesTabelle in der ClassNorthwind-Datenbank lscht, und fhren diese aus. Ein vollstndiges Transact-SQL-Skript fr dieses Verfahren befindet sich in C:\Moc\2328A\Labfiles\L04\Answers\Dropcol.sql. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Schreiben Sie eine Anweisung, die die Age-Spalte aus der EmployeesTabelle lscht, und fhren Sie diese aus.
ALTER TABLE Employees DROP COLUMN Age GO

3. Fhren Sie die gespeicherte Systemprozedur sp_help fr die EmployeesTabelle aus, um zu berprfen, ob die Age-Spalte gelscht wurde.
EXEC sp_help Employees GO

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

31

bung 4 Generieren von Transact-SQL-Skripts


In dieser bung erstellen Sie mit Hilfe von SQL Server Enterprise Manager Transact-SQL-Skripts von Objekten, die Sie in der ClassNorthwindDatenbank erstellt haben. So generieren Sie Skripts zum erneuten Erstellen von Objekten In diesem Verfahren generieren Sie mit Hilfe von SQL Server Enterprise Manager ein Transact-SQL-Skript, mit dem alle Objekte neu erstellt werden knnen, die Sie in der ClassNorthwind-Datenbank erstellt haben. 1. Wechseln Sie zu SQL Server Enterprise Manager. 2. Erweitern Sie Microsoft SQL Servers, erweitern Sie SQL Server-Gruppe, erweitern Sie Ihren Server, und erweitern Sie anschlieend Datenbanken. 3. Klicken Sie mit der rechten Maustaste auf ClassNorthwind, zeigen Sie auf Alle Tasks, und klicken Sie dann auf SQL-Skript generieren. 4. Klicken Sie auf der Registerkarte Allgemein auf Alle anzeigen. 5. Aktivieren Sie die Kontrollkstchen Alle Tabellen und Alle benutzerdefinierten Datentypen, und klicken Sie auf OK. 6. Speichern Sie diese Skriptdatei als L04.sql. 7. ffnen und berprfen Sie das generierte Skript.

32

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

bung 5 Fllen der ClassNorthwind-Datenbank mit Daten


In dieser bung fhren Sie mehrere Skripts aus, um die ClassNorthwindDatenbank mit Daten zu fllen. So fllen Sie die ClassNorthwind-Datenbank mit Daten In diesem Verfahren fhren Sie Skripts aus, die Beispieldaten generieren und die ClassNorthwind-Datenbank damit fllen. 1. Wechseln Sie zu SQL Query Analyzer. 2. ffnen und berprfen Sie die Skriptdatei Loaddata.sql im Verzeichnis C:\Moc\2328A\Labfiles\L04. 3. Fhren Sie Loaddata.sql aus. Dieser Vorgang kann einige Minuten beanspruchen. berprfen Sie die Ausgabe im Ergebnisbereich.

Unterrichtseinheit 4: Erstellen von Datentypen und Tabellen

33

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Erstellen von Datentypen Erstellen von Tabellen Generieren von Spaltenwerten Generieren von Skripts

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Kann ein in einer Datenbank verwendeter benutzerdefinierter Datentyp in einer anderen Datenbank von SQL Server verwendet werden? Nein. Benutzerdefinierte Datentypen sind auf eine einzelne Datenbank beschrnkt. Sie knnen einen entsprechenden Datentyp in einer anderen Datenbank erstellen, oder Sie knnen benutzerdefinierte Datentypen in der model-Datenbank erstellen.

2. Sie entwerfen gerade eine Datenbank, in der Informationen ber Millionen von unterschiedlichen Produkten gespeichert werden sollen. Sie mchten den Speicherplatz minimieren, der zum Speichern der Produktinformationen bentigt wird. Jedes Produkt verfgt ber eine Beschreibungszeile in der products-Tabelle. Gelegentlich erfordert eine Produktbeschreibung bis zu 200 Zeichen, in der Regel werden jedoch nur 50 Zeichen bentigt. Welchen Datentyp wrden Sie verwenden? Sie verwenden den Datentyp varchar(200), um die Zeilen kompakt zu halten und um hiermit gleichzeitig auch die gelegentlich auftretenden Produktbeschreibungen mit bis zu 200 Byte zu ermglichen.

3. Sie mssen ein Skript ausfhren, das mit SQL Server Enterprise Manager erstellt wurde. Wie gehen Sie hierbei vor? Sie ffnen das Skript mit SQL Query Analyser oder osql und fhren es aus.

This page is intentionally left blank.

Unterrichtseinheit 5: Implementieren der Datenintegritt


Inhalt bersicht Datenintegrittstypen Erzwingen der Datenintegritt Definieren von Einschrnkungen Einschrnkungstypen Deaktivieren von Einschrnkungen Verwenden von Standardwerten und Regeln Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt Empfohlene Methoden bungseinheit A: Implementieren der Datenintegritt Lernzielkontrolle 1 2 3 4 10 20 25 27 29 30 41

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 5: Implementieren der Datenintegritt

iii

Hinweise fr den Kursleiter


Prsentation: 45 Minuten bungseinheit: 30 Minuten Diese Unterrichtseinheit bietet den Kursteilnehmern eine Einfhrung in die Konzepte der Datenintegritt, einschlielich der Methoden, die zum Erzwingen der Datenintegritt verfgbar sind. Im Anschluss folgen eine Einfhrung zu Einschrnkungen, die die zentrale Methode zum Sicherstellen der Datenintegritt darstellen, sowie eine Beschreibung der unterschiedlichen Einschrnkungstypen. In der Unterrichtseinheit werden die Erstellung und die Implementierung von Einschrnkungen sowie die Verfahren, um Einschrnkungen ggf. zu deaktivieren, detailliert erlutert. Die Unterrichtseinheit behandelt weiterhin Standardwerte und Regeln, die eine alternative Methode zum Erzwingen der Datenintegritt bereitstellen, obwohl der Schwerpunkt auf den Einschrnkungen liegt. Die Unterrichtseinheit endet mit einem Vergleich der unterschiedlichen Methoden zum Erzwingen der Datenintegritt. In der bungseinheit definieren die Kursteilnehmer DEFAULT-, CHECK-, PRIMARY KEY- und FOREIGN KEY-Einschrnkungen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Datenintegrittstypen. Beschreiben der Methoden zum Erzwingen der Datenintegritt. Bestimmen der geeigneten Einschrnkung und Erstellen von Einschrnkungen. Definieren und Verwenden von DEFAULT-, CHECK-, PRIMARY KEY-, UNIQUE- und FOREIGN KEY-Einschrnkungen. Deaktivieren der Einschrnkungsberprfung. Beschreiben und Verwenden von Standardwerten und Regeln. Bestimmen der geeigneten Methoden zum Erzwingen der Datenintegritt.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_05.ppt Die Beispieldatei C:\Moc\2328A\Demo\D05_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 5: Implementieren der Datenintegritt

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Datenintegrittstypen Dieses Thema dient als Wiederholung fr Kursteilnehmer mit umfangreichen Vorkenntnissen und als Einfhrung fr Kursteilnehmer, die ber weniger Erfahrung verfgen. Es umfasst eine Definition des Begriffs Datenintegritt und beschreibt die unterschiedlichen Datenintegrittstypen. Die einzelnen Themen sollten einen allgemein gltigen Charakter haben. Erzwingen der Datenintegritt Dieses Thema beschreibt die beiden Methoden zum Erzwingen der Datenintegritt: deklarative Datenintegritt und prozedurale Datenintegritt. Weisen Sie darauf hin, dass in dieser Unterrichtseinheit nur die Features der deklarativen Methode - Einschrnkungen, Standardwerte und Regeln - behandelt werden. Definieren von Einschrnkungen Heben Sie hervor, dass Einschrnkungen die bevorzugte Methode zum Erzwingen der Datenintegritt darstellen, das sie ANSI-kompatibel sind, und beschreiben Sie, wie Einschrnkungen verwendet werden knnen. Geben Sie eine Einfhrung zu den unterschiedlichen Einschrnkungstypen. Einschrnkungstypen Dieser Abschnitt beschreibt die Einschrnkungstypen. Fr jede Einschrnkung werden die Syntax, Beispiele sowie Aspekte aufgefhrt, die bei der Verwendung bercksichtigt werden sollten. Achten Sie darauf, dass Sie die Bedeutung der Indizes beschreiben, die beim Definieren von Einschrnkungen erstellt werden. Deaktivieren von Einschrnkungen Dieser Abschnitt beschreibt das Verfahren zum Deaktivieren der Einschrnkungsberprfung in Abhngigkeit davon, ob Sie eine neue Einschrnkung erstellen oder eine vorhandene Einschrnkung deaktivieren. Verwenden von Standardwerten und Regeln Dieser Abschnitt behandelt das Erstellen und Implementieren von Standardwerten und Regeln zum Erzwingen der Datenintegritt. Sie sollten jedoch unbedingt darauf hinweisen, dass die Verwendung von Einschrnkungen der Verwendung von Standardwerten und Regeln vorzuziehen ist, da Standardwerte und Regeln nicht ANSI-kompatibel sind. Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt Dieser Abschnitt vergleicht die Methoden zum Erzwingen der Datenintegritt im Hinblick auf Funktionalitt und Kosten. Weisen Sie darauf hin, dass Trigger das ndern von Daten ermglichen, bevor die Integritt berprft wurde, sodass ihre Verwendung, falls Probleme auftreten, sehr ressourcenintensiv sein kann. Trigger sollten nur verwendet werden, wenn Einschrnkungen allein nicht die erforderliche Funktionalitt bereitstellen.

Unterrichtseinheit 5: Implementieren der Datenintegritt

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheit fr diese Unterrichtseinheit.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit in dieser Unterrichtseinheit muss die ClassNorthwindDatenbank in den fr diese bungseinheit erforderlichen Zustand zurckversetzt werden. Damit Kursteilnehmercomputer diese Anforderung erfllen, mssen Sie eine der folgenden Aktionen durchfhren: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore05.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore05.cmd ausfhren, um sicherzustellen, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 5: Implementieren der Datenintegritt

This page is intentionally left blank.

Unterrichtseinheit 5: Implementieren der Datenintegritt

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Datenintegrittstypen Erzwingen der Datenintegritt Definieren von Einschrnkungen Einschrnkungstypen Deaktivieren von Einschrnkungen Verwenden von Standardwerten und Regeln Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt

Einstieg

Diese Unterrichtseinheit beschreibt die unterschiedlichen Typen der Datenintegritt sowie die Funktionen, mit denen diese sichergestellt wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit beginnt mit einer Einfhrung in die Konzepte der Datenintegritt, einschlielich der Methoden, die zum Erzwingen der Datenintegritt verfgbar sind. Im Anschluss folgen eine Einfhrung zu Einschrnkungen, die die zentrale Methode zum Sicherstellen der Datenintegritt darstellen, sowie eine Beschreibung der unterschiedlichen Einschrnkungstypen. In der Unterrichtseinheit werden die Erstellung und die Implementierung von Einschrnkungen sowie die Verfahren, um Einschrnkungen ggf. zu deaktivieren, detailliert erlutert. Die Unterrichtseinheit behandelt weiterhin Standardwerte und Regeln, die eine alternative Methode zum Erzwingen der Datenintegritt bereitstellen, obwohl der Schwerpunkt auf den Einschrnkungen liegt. Die Unterrichtseinheit endet mit einem Vergleich der unterschiedlichen Methoden zum Erzwingen der Datenintegritt. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Datenintegrittstypen. Beschreiben der Methoden zum Erzwingen der Datenintegritt. Bestimmen der geeigneten Einschrnkung und Erstellen von Einschrnkungen. Definieren und Verwenden von DEFAULT-, CHECK-, PRIMARY KEY-, UNIQUE- und FOREIGN KEY-Einschrnkungen. Deaktivieren der Einschrnkungsberprfung. Beschreiben und Verwenden von Standardwerten und Regeln. Bestimmen der geeigneten Methoden zum Erzwingen der Datenintegritt.

Unterrichtseinheit 5: Implementieren der Datenintegritt

Datenintegrittstypen
Geben Sie eine Einfhrung in die verschiedenen Typen der Datenintegritt.

Thema

Domnenintegritt (Spalten)

Einstieg

Ein wichtiger Schritt bei der Planung einer Datenbank ist die Entscheidung, wie die Datenintegritt am besten sichergestellt wird. Datenintegritt lsst sich in die folgenden drei Kategorien unterteilen.

Entittsintegritt (Zeilen)

Referenzielle Integritt (zwischen Tabellen)

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein wichtiger Schritt bei der Planung einer Datenbank ist die Entscheidung, wie die Datenintegritt am besten sichergestellt wird. Datenintegritt bezeichnet die Konsistenz und Genauigkeit der Daten, die in einer Datenbank gespeichert sind. Es gibt die folgenden Datenintegrittstypen. Methodischer Hinweis
Die hier angesprochenen Datenintegrittstypen sind Bestandteil des grundlegenden Entwurfs relationaler Datenbanken. Die einzelnen Themen sollten einen allgemein gltigen Charakter haben. Geben Sie eventuell ein Beispiel aus der NorthwindDatenbank.

Domnenintegritt
Die Domnen- oder Spaltenintegritt gibt eine Menge von Datenwerten an, die fr eine Spalte gltig sind, und legt fest, ob Nullwerte zulssig sind. Die Domnenintegritt wird oft durch die Verwendung der Gltigkeitsberprfung erzwungen. Sie kann jedoch auch durch die Einschrnkung der Datentypen, des Formats oder des fr eine Spalte zulssigen Wertebereichs erzwungen werden.

Entittsintegritt
Bei der Entitts- oder Tabellenintegritt bentigen alle Zeilen einer Spalte einen eindeutigen Bezeichner, der als Primrschlsselwert bezeichnet wird. Ob der Primrschlsselwert gendert oder die gesamte Zeile gelscht werden kann, hngt von der Ebene der Integritt ab, die zwischen dem Primrschlssel und sonstigen Tabellen erforderlich ist.

Referenzielle Integritt
Die referenzielle Integritt gewhrleistet, dass die Beziehungen zwischen den Primrschlsseln (in der Tabelle, auf die verwiesen wird) und den Fremdschlsseln (in den verweisenden Tabellen) stets aufrechterhalten werden. Es kann weder eine Zeile in einer Tabelle, auf die verwiesen wird, gelscht werden, noch kann der Primrschlssel gendert werden, wenn ein Fremdschlssel auf diese Zeile verweist, es sei denn, die CASCADE-Aktion ist zulssig. Sie knnen Beziehungen, die auf der referenziellen Integritt basieren, innerhalb derselben Tabelle oder zwischen separaten Tabellen definieren.

Unterrichtseinheit 5: Implementieren der Datenintegritt

Erzwingen der Datenintegritt


Erlutern Sie, wie SQL Server die Datenintegritt implementiert.

Thema

Deklarative Datenintegritt Kriterien werden in den Objektdefinitionen definiert Automatisches Erzwingen durch SQL Server Implementierung mit Hilfe von Einschrnkungen, Standardwerten und Regeln Prozedurale Datenintegritt Kriterien werden in Skripten definiert Erzwingen durch Skripte Implementierung durch Trigger und gespeicherte Prozeduren

Einstieg

Es gibt zwei Methoden, um die Datenintegritt zu erzwingen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Es gibt zwei Methoden, um die Datenintegritt zu erzwingen: deklarative Datenintegritt oder prozedurale Datenintegritt.

Deklarative Datenintegritt
Bei der deklarativen Integritt definieren Sie die Kriterien, die die Daten als Teil einer Objektdefinition erfllen mssen. Microsoft SQL Server 2000 stellt dann automatisch sicher, dass die Daten diesen Kriterien entsprechen. Die bevorzugte Methode zur Implementierung der grundlegenden Datenintegritt ist die Verwendung der deklarativen Integritt. Bercksichtigen Sie bei der deklarativen Methode die folgenden Punkte: Die deklarative Integritt wird als Teil der Datenbankdefinition deklariert, indem Sie deklarative Einschrnkungen verwenden, die direkt in Tabellen und Spalten definiert werden. Implementieren Sie die deklarative Integritt mit Hilfe von Einschrnkungen, Standardwerten und Regeln. Methodischer Hinweis

Weisen Sie darauf hin, dass diese Unterrichtseinheit nur die Funktionen der deklarativen Integritt behandelt: Einschrnkungen, Standardwerte und Regeln. Trigger und gespeicherte Prozeduren werden in spteren Unterrichtseinheiten behandelt.

Prozedurale Datenintegritt
Bei der prozeduralen Integritt erstellen Sie Skripts, die die Kriterien definieren, die von den Daten erfllt werden mssen, und die gleichzeitig die Einhaltung dieser Kriterien erzwingen. Sie sollten die prozedurale Integritt nur fr kompliziertere Geschftslogik und Ausnahmen verwenden. Verwenden Sie die prozedurale Integritt beispielsweise fr kaskadierende Lschvorgnge. Bercksichtigen Sie bei der prozeduralen Integritt die folgenden Punkte: Die Implementierung der prozeduralen Integritt auf dem Client oder dem Server kann mit Hilfe anderer Programmiersprachen und -tools erfolgen. Implementieren Sie die prozedurale Integritt mit Hilfe von Triggern und gespeicherten Prozeduren.

Unterrichtseinheit 5: Implementieren der Datenintegritt

Definieren von Einschrnkungen


Thema
Beschreiben Sie, wie die Datenintegritt mit Hilfe von Einschrnkungen erzwungen werden kann.

Bestimmen des geeigneten Einschrnkungstyps Erstellen von Einschrnkungen berlegungen zur Verwendung von Einschrnkungen

Einstieg

Einschrnkungen sind die bevorzugte Methode zum Erzwingen der Datenintegritt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Einschrnkungen sind die bevorzugte Methode zum Erzwingen der Datenintegritt. In diesem Abschnitt wird beschrieben, wie Sie den geeigneten Einschrnkungstyp bestimmen, welchen Datenintegrittstyp die unterschiedlichen Einschrnkungen erzwingen und wie Sie Einschrnkungen definieren.

Unterrichtseinheit 5: Implementieren der Datenintegritt

Bestimmen des geeigneten Einschrnkungstyps


Thema
Stellen Sie die unterschiedlichen Einschrnkungstypen vor, und erlutern Sie, wie diese Einschrnkungen verwendet werden, um die Datenintegritt zu implementieren.

Integrittstyp Integrittstyp
Domne Domne Entitt Entitt Referenziell Referenziell

Einschrnkungstyp Einschrnkungstyp
DEFAULT DEFAULT CHECK CHECK REFERENTIAL REFERENTIAL PRIMARY KEY PRIMARY KEY UNIQUE UNIQUE FOREIGN KEY FOREIGN KEY CHECK CHECK

Einstieg

Mit Hilfe unterschiedlicher Einschrnkungstypen wird sichergestellt, dass gltige Datenwerte in Spalten eingegeben und Beziehungen zwischen Tabellen aufrechterhalten werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Kernpunkt Einschrnkungen sind eine ANSI-kompatible Methode zum Erzwingen der Datenintegritt. Jeder Datenintegrittstyp (Domnen-, Entitts- und referenzielle Integritt) wird mit ganz bestimmten Einschrnkungstypen erzwungen. Einschrnkungen gewhrleisten, dass gltige Datenwerte in Spalten eingegeben und Beziehungen zwischen Tabellen aufrechterhalten werden. In der folgenden Tabelle sind die unterschiedlichen Einschrnkungstypen beschrieben.
Integrittstyp Domne Einschrnkungstyp DEFAULT Beschreibung Diese Einschrnkung gibt den Wert an, der fr die Spalte verwendet wird, wenn eine INSERTAnweisung keine explizite Angabe eines Wertes enthlt. Diese Einschrnkung gibt an, welche Datenwerte in einer Spalte gltig sind. Diese Einschrnkung gibt die Datenwerte an, die basierend auf Werten in einer Spalte einer anderen Tabelle aktualisiert werden knnen. Diese Einschrnkung identifiziert jede Zeile eindeutig. Auf diese Weise wird sichergestellt, dass die Benutzer keine doppelten Werte eingeben und dass ein Index erstellt wird, um die Leistung zu verbessern. NULL-Werte sind nicht zulssig. Diese Einschrnkung verhindert die doppelte Verwendung von alternativen (nicht primren) Schlsseln und gewhrleistet, dass ein Index erstellt wird, um die Leistung zu verbessern. NULL-Werte sind zulssig.

Heben Sie hervor, dass Einschrnkungen ANSIkompatibel sind.

CHECK REFERENTIAL

Entitt

PRIMARY KEY

UNIQUE

Unterrichtseinheit 5: Implementieren der Datenintegritt (Fortsetzung) Integrittstyp Referenziell Einschrnkungstyp FOREIGN KEY Beschreibung Diese Einschrnkung definiert eine oder mehrere Spalten, deren Werte mit dem Primrschlssel derselben oder einer anderen Tabelle bereinstimmen. Diese Einschrnkung gibt die Datenwerte an, die basierend auf Werten in anderen Spalten derselben Tabelle fr die Spalte zulssig sind.

CHECK

Unterrichtseinheit 5: Implementieren der Datenintegritt

Erstellen von Einschrnkungen


Stellen Sie die Syntax fr die Definition von Einschrnkungen vor.

Thema

Verwenden von CREATE TABLE oder ALTER TABLE Kann Einschrnkungen zu einer Tabelle hinzufgen, die bereits Daten enthlt Kann Einschrnkungen auf einzelne oder mehrere Spalten definieren Fr einzelne Spalten heien sie Einschrnkung auf Spaltenebene Fr mehrere Spalten heien sie Einschrnkung auf Tabellenebene

Einstieg

Einschrnkungen werden mit den Anweisungen CREATE TABLE oder ALTER TABLE definiert.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Einschrnkungen werden mit den Anweisungen CREATE TABLE oder ALTER TABLE erstellt. Methodischer Hinweis Sie knnen Einschrnkungen zu einer Tabelle hinzufgen, die bereits Daten enthlt, und Einschrnkungen fr einzelne oder mehrere Spalten definieren: Wenn die Einschrnkung fr eine einzelne Spalte gilt, wird sie als Einschrnkung auf Spaltenebene bezeichnet. Wenn eine Einschrnkung auf mehrere Spalten verweist, wird sie als Einschrnkung auf Tabellenebene bezeichnet, und zwar auch dann, wenn sie nicht auf alle Spalten der Tabelle verweist. CREATE TABLE table_name ( { < column_definition > | < table_constraint > } [ ,...n ]) < column_definition > ::= { column_name data_type } [ [ DEFAULT constant_expression ] [ < column_constraint > ] [ ,..n] < column_constraint > ::= [ CONSTRAINT constraint_name ] | [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] ] | [ [ FOREIGN KEY ] REFERENCES ref_table [ ( ref_column ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ]] | CHECK ( logical_expression ) }

Weisen Sie darauf hin, dass sich der Begriff Einschrnkung auf Tabellenebene auf jede Einschrnkung bezieht, die mehrere Spalten einbezieht.

Teilsyntax

Weisen Sie darauf hin, dass sich die Syntax aus einem Teil fr Einschrnkungen auf Spaltenebene und einem Teil fr Einschrnkungen Tabellenebene zusammensetzt. Raten Sie den Kursteilnehmern, zunchst die Basistabelle zu erstellen und die Einschrnkungen erst spter hinzuzufgen. Dies vereinfacht die Definition der Tabelle.

Methodische Hinweise

Unterrichtseinheit 5: Implementieren der Datenintegritt

< table_constraint > ::= [ CONSTRAINT constraint_name ] { [ { PRIMARY KEY | UNIQUE } [CLUSTERED | NONCLUSTERED] { ( column [ ASC | DESC ] [ ,...n ] ) } ] | FOREIGN KEY [ ( column [ ,...n ] ) ] REFERENCES ref_table [ ( ref_column [ ,...n ] ) ] [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] | CHECK ( search_conditions ) } Beispiel Dieses Beispiel erstellt die Products-Tabelle, definiert Spalten und definiert Einschrnkungen sowohl auf Spalten- als auch auf Tabellenebene.

USE Northwind CREATE TABLE dbo.Products ( ProductID int IDENTITY (1,1) NOT NULL, ProductName nvarchar (40) NOT NULL, SupplierID int NULL, CategoryID int NULL, QuantityPerUnit nvarchar (20) NULL, UnitPrice money NULL CONSTRAINT UnitsInStock smallint NULL CONSTRAINT UnitsOnOrder smallint NULL CONSTRAINT ReorderLevel smallint NULL CONSTRAINT Discontinued bit NOT NULL CONSTRAINT

DF_Products_UnitPrice DEFAULT(0), DF_Products_UnitsInStock DEFAULT(0), DF_Products_UnitsOnOrder DEFAULT(0), DF_Products_ReorderLevel DEFAULT(0), DF_Products_Discontinued DEFAULT(0),

CONSTRAINT PK_Products PRIMARY KEY CLUSTERED (ProductID), CONSTRAINT FK_Products_Categories FOREIGN REFERENCES dbo.Categories (CategoryID) CONSTRAINT FK_Products_Suppliers FOREIGN REFERENCES dbo.Suppliers (SupplierID) CONSTRAINT CONSTRAINT CONSTRAINT CONSTRAINT ) GO CK_Products_UnitPrice CK_ReorderLevel CK_UnitsInStock CK_UnitsOnOrder CHECK CHECK CHECK CHECK KEY (CategoryID) ON UPDATE CASCADE, KEY (SupplierID) ON DELETE CASCADE, 0), >= 0), >= 0), >= 0)

(UnitPrice >= (ReorderLevel (UnitsInStock (UnitsOnOrder

Unterrichtseinheit 5: Implementieren der Datenintegritt

berlegungen zur Verwendung von Einschrnkungen


Thema
Benennen Sie einige der Aspekte, die bei der Verwendung von Einschrnkungen bercksichtigt werden sollten.

Kann gendert werden, ohne die Tabelle neu erstellen zu mssen Erfordert Fehlerberprfung in Anwendungen und Transaktionen berprft vorhandene Daten

Einstieg

Bercksichtigen Sie die folgenden Punkte, wenn Sie Einschrnkungen implementieren oder ndern.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Zeigen Sie, dass SQL Server komplizierte, vom System generierte Einschrnkungsnamen erstellt.

Bercksichtigen Sie die folgenden Punkte, wenn Sie Einschrnkungen implementieren oder ndern: Sie knnen Einschrnkungen erstellen, ndern und lschen, ohne dass Sie eine Tabelle lschen und neu erstellen mssen. Sie mssen Programmlogik zur Fehlerberprfung in Anwendungen und Transaktionen einbinden, um zu testen, ob gegen eine Einschrnkung verstoen wurde. Wenn Sie eine Einschrnkung zu einer Tabelle hinzufgen, berprft SQL Server die vorhandenen Daten. Beim Erstellen von Einschrnkungen sollten Sie Namen fr die Einschrnkungen angeben, da SQL Server komplizierte, vom System generierte Namen verwendet. Die Namen mssen fr den Datenbank-Objektbesitzer eindeutig sein und den Regeln fr SQL Server-Bezeichner entsprechen. Hilfe zu Einschrnkungen erhalten Sie, wenn Sie die gespeicherten Systemprozeduren sp_helpconstraint oder sp_help ausfhren oder Informationsschemasichten abfragen, wie zum Beispiel check_constraints, referential_constraints und table_constraints. Die folgenden Systemtabellen speichern Einschrnkungsdefinitionen: syscomments, sysreferences und sysconstraints.

10

Unterrichtseinheit 5: Implementieren der Datenintegritt

Einschrnkungstypen
Beschreiben Sie die Einschrnkungstypen.

Thema

Einstieg

DEFAULT-Einschrnkungen CHECK-Einschrnkungen PRIMARY KEY-Einschrnkungen UNIQUE-Einschrnkungen FOREIGN KEY-Einschrnkungen Kaskadierende referenzielle Integritt

Dieser Abschnitt beschreibt die Einschrnkungstypen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Dieser Abschnitt beschreibt die Einschrnkungstypen. Fr jede Einschrnkung werden die Syntax, Beispiele sowie Aspekte aufgefhrt, die bei der Verwendung bercksichtigt werden sollten.

Unterrichtseinheit 5: Implementieren der Datenintegritt

11

DEFAULT-Einschrnkungen
Geben Sie eine Einfhrung zur DEFAULT-Einschrnkung.

Thema

Gilt nur fr die INSERT-Anweisung Nur eine DEFAULT-Einschrnkung pro Spalte Kann nicht mit der Identity-Eigenschaft oder mit dem Datentyp rowversion verwendet werden Ermglicht die Angabe einiger vom System bereitgestellter Werte
USE Northwind USE Northwind ALTER TABLE dbo.Customers ALTER TABLE dbo.Customers ADD ADD CONSTRAINT DF_contactname DEFAULT 'UNKNOWN' CONSTRAINT DF_contactname DEFAULT 'UNKNOWN' FOR ContactName FOR ContactName

Einstieg

Die DEFAULTEinschrnkung erzwingt die Domnenintegritt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine DEFAULT-Einschrnkung gibt einen Wert in eine Spalte ein, wenn eine INSERT-Anweisung keinen entsprechenden Wert angibt. DEFAULTEinschrnkungen erzwingen die Domnenintegritt. Teilsyntax Beispiel [CONSTRAINT constraint_name] DEFAULT constant_expression In diesem Beispiel wird eine DEFAULT-Einschrnkung hinzugefgt, die den Wert UNKNOWN in die dbo.Customers-Tabelle einfgt, wenn kein Name eingegeben wird.
USE Northwind ALTER TABLE dbo.Customers ADD CONSTRAINT DF_contactname DEFAULT 'UNKNOWN' FOR ContactName

Wenn Sie eine DEFAULT-Einschrnkung verwenden, sollten Sie die folgenden Punkte bercksichtigen: Die Einschrnkung berprft die in der Tabelle enthaltenen Daten. Die Einschrnkung gilt nur fr INSERT-Anweisungen. Pro Spalte kann nur eine DEFAULT-Einschrnkung definiert werden. Die Einschrnkung kann nicht fr Spalten mit der Identity-Eigenschaft oder fr Spalten des Datentyps rowversion verwendet werden. Die Einschrnkung ermglicht die Angabe einiger vom System bereitgestellter Werte - USER, CURRENT_USER, SESSION_USER, SYSTEM_USER oder CURRENT_TIMESTAMP - anstelle von benutzerdefinierten Werten. Diese vom System bereitgestellten Werte knnen hilfreich sein, um eine Liste der Benutzer zu erstellen, die Daten eingefgt haben.

12

Unterrichtseinheit 5: Implementieren der Datenintegritt

CHECK-Einschrnkungen
Geben Sie eine Einfhrung zur CHECK-Einschrnkung.

Thema

Einstieg

Wird mit der INSERT- und UPDATE-Anweisung verwendet Kann auf andere Spalten derselben Tabelle verweisen Kann nicht: Mit dem Datentyp rowversion verwendet werden Unterabfragen enthalten
USE Northwind USE Northwind ALTER TABLE dbo.Employees ALTER TABLE dbo.Employees ADD ADD CONSTRAINT CK_birthdate CONSTRAINT CK_birthdate CHECK (BirthDate > '01-01-1900' AND BirthDate < CHECK (BirthDate > '01-01-1900' AND BirthDate < getdate()) getdate())

Eine CHECK-Einschrnkung beschrnkt die Daten, die in eine Spalte eingegeben werden knnen, auf bestimmte Werte.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine CHECK-Einschrnkung beschrnkt die Daten, die Benutzer in eine Spalte eingeben knnen, auf bestimmte Werte. CHECK-Einschrnkungen sind vergleichbar mit WHERE-Klauseln, da Sie die Bedingungen festlegen knnen, unter denen Daten akzeptiert werden. Teilsyntax Beispiel [CONSTRAINT constraint_name] CHECK (logical_expression) In diesem Beispiel wird eine CHECK-Einschrnkung hinzugefgt, um sicherzustellen, dass ein Geburtsdatum innerhalb des gltigen Datumsbereichs liegt.
USE Northwind ALTER TABLE dbo.Employees ADD CONSTRAINT CK_birthdate CHECK (BirthDate > '01-01-1900' AND BirthDate < getdate())

Wenn Sie eine CHECK-Einschrnkung verwenden, sollten Sie die folgenden Punkte bercksichtigen: Die Daten werden bei jeder Ausfhrung einer INSERT- oder UPDATEAnweisung berprft. Die Einschrnkung kann auf andere Spalten in derselben Tabelle verweisen. Die salary-Spalte knnte beispielsweise auf einen Wert in der job_gradeSpalte verweisen. Die Einschrnkung kann fr Spalten des Datentyps rowversion nicht verwendet werden. Die Einschrnkung kann keine Unterabfragen enthalten. Wenn Daten vorliegen, die zu einer Verletzung der CHECK-Einschrnkung fhren, knnen Sie die DBCC CHECKCONSTRAINTS-Anweisung verwenden, um die entsprechenden Zeilen zurckzugeben.

Unterrichtseinheit 5: Implementieren der Datenintegritt

13

PRIMARY KEY-Einschrnkungen
Geben Sie eine Einfhrung zur PRIMARY KEY-Einschrnkung.

Thema

Pro Tabelle nur eine PRIMARY KEY-Einschrnkung Werte mssen eindeutig sein NULL-Werte sind nicht zulssig Erstellt einen eindeutigen Index fr angegebene Spalten
USE Northwind USE Northwind ALTER TABLE dbo.Customers ALTER TABLE dbo.Customers ADD ADD CONSTRAINT PK_Customers CONSTRAINT PK_Customers PRIMARY KEY NONCLUSTERED (CustomerID) PRIMARY KEY NONCLUSTERED (CustomerID)

Einstieg

PRIMARY KEY-Einschrnkungen erzwingen die Entittsintegritt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine PRIMARY KEY-Einschrnkung definiert einen Primrschlssel in einer Tabelle, der eine Zeile eindeutig identifiziert. Dieser Einschrnkungstyp erzwingt die Entittsintegritt. Teilsyntax [CONSTRAINT constraint_name] PRIMARY KEY [CLUSTERED | NONCLUSTERED] { ( column[,...n] ) } In diesem Beispiel wird eine Einschrnkung hinzugefgt, die angibt, dass die Kunden-ID der Primrschlssel der dbo.Customers-Tabelle ist, und bestimmt, dass ein gruppierter Index erstellt wird, um die Einschrnkung zu erzwingen.
USE Northwind ALTER TABLE dbo.Customers ADD CONSTRAINT PK_Customers PRIMARY KEY NONCLUSTERED (CustomerID)

Beispiel

Kernpunkte

Die PRIMARY KEYEinschrnkung ist immer eindeutig und lsst keine NULL-Werte zu. Die PRIMARY KEYEinschrnkung erstellt immer einen Index.

Wenn Sie eine PRIMARY KEY-Einschrnkung verwenden, sollten Sie die folgenden Punkte bercksichtigen: Pro Tabelle kann nur eine PRIMARY KEY-Einschrnkung definiert werden. Die eingegebenen Werte mssen eindeutig sein.

14

Unterrichtseinheit 5: Implementieren der Datenintegritt

NULL-Werte sind nicht zulssig. Die Einschrnkung erstellt einen eindeutigen Index fr die angegebenen Spalten. Sie haben die Auswahl zwischen einem gruppierten und einem nicht gruppierten Index (standardmig wird ein gruppierter Index erstellt, falls ein solcher Index noch nicht vorhanden ist). Anmerkung Der fr eine PRIMARY KEY-Einschrnkung erstellte Index kann nicht direkt gelscht werden. Er wird gelscht, sobald Sie die Einschrnkung lschen.

Unterrichtseinheit 5: Implementieren der Datenintegritt

15

UNIQUE-Einschrnkungen
Geben Sie eine Einfhrung zu UNIQUE-Einschrnkungen.

Thema

NULL-Werte sind zulssig Mehrere UNIQUE-Einschrnkungen auf einer Tabelle sind zulssig Knnen fr eine oder mehrere Spalten definiert werden Erzwungen mit einem eindeutigen Index
USE Northwind USE Northwind ALTER TABLE dbo.Suppliers ALTER TABLE dbo.Suppliers ADD ADD CONSTRAINT U_CompanyName CONSTRAINT U_CompanyName UNIQUE NONCLUSTERED (CompanyName) UNIQUE NONCLUSTERED (CompanyName)

Einstieg

Eine UNIQUE-Einschrnkung gibt an, dass zwei Zeilen einer Spalte nicht denselben Wert enthalten knnen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine UNIQUE-Einschrnkung gibt an, dass zwei Zeilen einer Spalte nicht denselben Wert enthalten knnen. Diese Einschrnkung erzwingt die Entittsintegritt mit Hilfe eines eindeutigen Indexes. Eine UNIQUE-Einschrnkung ist hilfreich, wenn bereits ein Primrschlssel vorhanden ist, wie z. B. eine Angestellten-ID, Sie jedoch sicherstellen mchten, dass andere Bezeichner, wie z. B. die Fhrerscheinnummer des Angestellten, ebenfalls eindeutig sind. Teilsyntax [CONSTRAINT constraint_name] UNIQUE [CLUSTERED | NONCLUSTERED] { ( column[,...n] ) } In diesem Beispiel wird eine UNIQUE-Einschrnkung fr den Firmennamen in der dbo.Suppliers-Tabelle erstellt.
USE Northwind ALTER TABLE dbo.Suppliers ADD CONSTRAINT U_CompanyName UNIQUE NONCLUSTERED (CompanyName)

Beispiel

Wenn Sie eine UNIQUE-Einschrnkung verwenden, sollten Sie die folgenden Punkte bercksichtigen: Die Einschrnkung kann einen einzigen NULL-Wert zulassen. Fr eine Tabelle knnen mehrere UNIQUE-Einschrnkungen definiert werden. Die UNIQUE-Einschrnkung kann auf eine oder mehrere Spalten angewendet werden, die eindeutige Werte aufweisen mssen, jedoch nicht der Primrschlssel der Tabelle sind. Die UNIQUE-Einschrnkung wird erzwungen, indem ein eindeutiger Index fr die angegebene(n) Spalte(n) erstellt wird.

16

Unterrichtseinheit 5: Implementieren der Datenintegritt

FOREIGN KEY-Einschrnkungen
Geben Sie eine Einfhrung zur FOREIGN KEY-Einschrnkung.

Thema

Muss auf eine PRIMARY KEY- oder UNIQUE-Einschrnkung verweisen Stellt referenzielle Integritt fr einzelne oder mehrere Spalten bereit Erstellt nicht automatisch einen Index Anwender mssen SELECT- oder REFERENCESBerechtigungen fr referenzierte Tabelle haben Innerhalb einer Tabelle kann nur die REFERENCES-Klausel verwendet werden
USE Northwind USE Northwind ALTER TABLE dbo.Orders ALTER TABLE dbo.Orders ADD CONSTRAINT FK_Orders_Customers ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) FOREIGN KEY (CustomerID) REFERENCES dbo.Customers(CustomerID) REFERENCES dbo.Customers(CustomerID)

Einstieg

Eine FOREIGN KEY-Einschrnkung erzwingt die referenzielle Integritt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine FOREIGN KEY-Einschrnkung erzwingt die referenzielle Integritt. Eine FOREIGN KEY-Einschrnkung definiert einen Verweis auf eine Spalte mit einer PRIMARY KEY- oder UNIQUE-Einschrnkung in derselben oder einer anderen Tabelle. Teilsyntax [CONSTRAINT constraint_name] [FOREIGN KEY] [(column[,n])] REFERENCES ref_table [(ref_column [,n])]. In diesem Beispiel wird mit einer FOREIGN KEY-Einschrnkung sichergestellt, dass jeder Kunden-ID in der dbo.Orders-Tabelle eine gltige ID in der dbo-Customers-Tabelle zugeordnet ist.
USE Northwind ALTER TABLE dbo.Orders ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES dbo.Customers(CustomerID)

Beispiel

Wenn Sie eine FOREIGN KEY-Einschrnkung verwenden, sollten Sie die folgenden Punkte und Richtlinien bercksichtigen: Die Einschrnkung ermglicht die referenzielle Integritt fr einzelne oder mehrere Spalten. Die Anzahl der Spalten und Datentypen, die in der FOREIGN KEY-Anweisung angegeben werden, muss mit der Anzahl der Spalten und Datentypen in der REFERENCES-Klausel bereinstimmen. Im Gegensatz zu PRIMARY KEY- oder UNIQUE-Einschrnkungen werden durch FOREIGN KEY-Einschrnkungen nicht automatisch Indizes erstellt. Wenn Sie jedoch viele Verknpfungen in der Datenbank verwenden mchten, sollten Sie fr die FOREIGN KEY-Einschrnkung einen Index erstellen, um die Verknpfungsleistung zu verbessern.

Unterrichtseinheit 5: Implementieren der Datenintegritt

17

Zum ndern von Daten bentigen die Benutzer SELECT- oder REFERENCES-Berechtigungen fr andere Tabellen, auf die mit einer FOREIGN KEY-Einschrnkung verwiesen wird. Sie knnen nur die REFERENCES-Klausel ohne die FOREIGN KEYKlausel verwenden, wenn Sie auf eine Spalte in derselben Tabelle verweisen.

18

Unterrichtseinheit 5: Implementieren der Datenintegritt

Kaskadierende referenzielle Integritt


Thema
Erlutern Sie, wie die referenzielle Integritt kaskadiert werden kann.

NO ACTION
Kunden Kunden CustomerID (PK) 1

CASCADE
1

Kunden Kunden CustomerID (PK)

Einstieg

Durch die kaskadierende referenzielle Integritt werden nderungen an der Datenbank automatisch weitergegeben.

INSERT new INSERT new CustomerID CustomerID


2 Bestellungen Bestellungen CustomerID (FK)

UPDATE CustomerID UPDATE CustomerID CASCADE


Bestellungen Bestellungen CustomerID (FK)

UPDATE old UPDATE old CustomerID to new CustomerID to new CustomerID CustomerID
Kunden Kunden CustomerID (PK) 3

DELETE old DELETE old CustomerID CustomerID

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die FOREIGN KEY-Einschrnkung umfasst die Option CASCADE, die es ermglicht, dass nderungen an einem Spaltenwert, der eine UNIQUE- oder PRIMARY KEY-Einschrnkung definiert, automatisch an den Fremdschlsselwert weitergegeben werden. Dieser Vorgang wird als kaskadierende referenzielle Integritt bezeichnet. Die REFERENCES-Klausel der Anweisungen CREATE TABLE und ALTER TABLE untersttzt ON DELETE- und ON UPDATE-Klauseln. Diese Klauseln ermglichen es Ihnen, die Option CASCADE oder NO ACTION anzugeben. Teilsyntax [CONSTRAINT constraint_name] [FOREIGN KEY] [(column[,n])] REFERENCES ref_table [(ref_column [,n])]. [ ON DELETE { CASCADE | NO ACTION } ] [ ON UPDATE { CASCADE | NO ACTION } ] NO ACTION gibt an, dass jeder Versuch, einen Schlssel zu lschen oder zu aktualisieren, auf den durch einen Fremdschlssel in anderen Tabellen verwiesen wird, einen Fehler auslst und fr die nderung ein Rollback ausgefhrt wird. NO ACTION ist die Standardeinstellung. Wenn CASCADE definiert wurde und in der bergeordneten Tabelle eine Zeile gendert wird, wird anschlieend die entsprechende Zeile in der verweisenden Tabelle gendert. In der Northwind-Datenbank besteht z. B. eine referenzielle Beziehung zwischen der Orders-Tabelle und der Customers-Tabelle, die sich so ausdrckt, dass der Orders.CustomerID-Fremdschlssel auf den Customers.CustomerID-Primrschlssel verweist.

Unterrichtseinheit 5: Implementieren der Datenintegritt

19

Wenn eine UPDATE-Anweisung auf der CustomerID-Spalte in der Customers-Tabelle ausgefhrt wird und eine ON UPDATE CASCADE-Aktion fr Orders.CustomerID angegeben wird, sucht SQL Server nach einer oder mehreren abhngigen Zeilen in der Orders-Tabelle. Falls solche Zeilen vorhanden sind, werden sowohl die abhngigen Zeilen in der Orders-Tabelle als auch die Zeile in der Customers-Tabelle aktualisiert, auf die verwiesen wurde. Wenn Sie die Option CASCADE anwenden, sollten Sie die folgenden Punkte bercksichtigen: CASCADE und NO ACTION knnen fr Tabellen kombiniert werden, zwischen denen referenzielle Beziehungen bestehen. Falls SQL Server die Option NO ACTION vorfindet, beendet es die Ausfhrung und fhrt fr die entsprechenden CASCADE-Aktionen einen Rollback durch. Wenn eine DELETE-Anweisung eine Kombination aus CASCADE- und NO ACTION-Aktionen verursacht, werden alle CASCADE-Aktionen angewendet, bevor SQL Server bezglich NO ACTION prft. CASCADE kann nicht fr Fremdschlssel- oder Primrschlsselspalten angegeben werden, die mit einer rowversion-Spalte definiert wurden.

20

Unterrichtseinheit 5: Implementieren der Datenintegritt

Deaktivieren von Einschrnkungen


Beschreiben Sie die Verfahren zum Deaktivieren von Einschrnkungen.

Thema

Einstieg

Deaktivieren der Einschrnkungsberprfung fr vorhandene Daten Deaktivieren der Einschrnkungsberprfung beim Laden neuer Daten

Aus Leistungsgrnden kann es mitunter empfehlenswert sein, Einschrnkungen zu deaktivieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Aus Leistungsgrnden kann es mitunter empfehlenswert sein, Einschrnkungen zu deaktivieren. So ist es beispielsweise effizienter, die Verarbeitung umfangreicher Batchoperationen zu ermglichen, bevor Einschrnkungen aktiviert werden. Dieser Abschnitt beschreibt das Verfahren zum Deaktivieren der Einschrnkungsberprfung in Abhngigkeit davon, ob Sie eine neue Einschrnkung erstellen oder eine vorhandene Einschrnkung deaktivieren.

Unterrichtseinheit 5: Implementieren der Datenintegritt

21

Deaktivieren der Einschrnkungsberprfung fr vorhandene Daten


Erlutern Sie, wie Einschrnkungen deaktiviert werden.

Thema

Verwenden fr CHECK- und FOREIGN KEYEinschrnkungen Verwenden der Option WITH NOCHECK beim Hinzufgen einer neuen Einschrnkung Verwenden der Option WITH NOCHECK, wenn bestehende Daten nicht verndert werden Kann bestehende Daten verndern, bevor eine Einschrnkung hinzugefgt wird
USE Northwind USE Northwind ALTER TABLE dbo.Employees ALTER TABLE dbo.Employees WITH NOCHECK WITH NOCHECK ADD CONSTRAINT FK_Employees_Employees ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees(EmployeeID) REFERENCES dbo.Employees(EmployeeID)

Einstieg

Wenn Sie eine Einschrnkung zu einer Tabelle hinzufgen, knnen Sie die Einschrnkungsberprfung deaktivieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie eine Einschrnkung fr eine Tabelle definieren, die bereits Daten enthlt, berprft SQL Server automatisch die vorhandenen Daten, um sicherzustellen, dass sie die Anforderungen der Einschrnkung erfllen. Wenn Sie eine Einschrnkung zu einer Tabelle hinzufgen, knnen Sie jedoch die Einschrnkungsberprfung fr vorhandene Daten deaktivieren. Wenn Sie die Einschrnkungsberprfung fr vorhandene Daten deaktivieren, sollten Sie die folgenden Richtlinien bercksichtigen: Nur CHECK- und FOREIGN KEY-Einschrnkungen knnen deaktiviert werden. Andere Einschrnkungen mssen gelscht und dann erneut hinzugefgt werden. Um die Einschrnkungsberprfung beim Hinzufgen einer CHECK- oder FOREIGN KEY-Einschrnkung zu einer Tabelle zu deaktivieren, die bereits Daten enthlt, verwenden Sie die Option WITH NOCHECK in der ALTER TABLE-Anweisung. Verwenden Sie die Option WITH NOCHECK, wenn vorhandene Daten nicht gendert werden. Wenn Daten aktualisiert werden, mssen sie CHECK-Einschrnkungen entsprechen. Vergewissern Sie sich, dass die Deaktivierung der Einschrnkungsberprfung wirklich angebracht ist. Sie knnen eine Abfrage ausfhren, um die vorhandenen Daten zu ndern, bevor Sie sich entscheiden, eine Einschrnkung hinzuzufgen.

22

Unterrichtseinheit 5: Implementieren der Datenintegritt

Teilsyntax

ALTER TABLE table [WITH CHECKWITH NOCHECK] ADD CONSTRAINT constraint [FOREIGN KEY] [(column[,n])] REFERENCES ref_table [(ref_col [,n])] [CHECK (search_conditions)]

Beispiel

In diesem Beispiel fgen Sie eine FOREIGN KEY-Einschrnkung hinzu, durch die berprft wird, ob alle Angestellten einem gltigen Vorgesetzten zugeordnet sind. Zum Zeitpunkt der Erstellung der Einschrnkung wird sie fr die vorhandenen Daten nicht erzwungen.
USE Northwind ALTER TABLE dbo.Employees WITH NOCHECK ADD CONSTRAINT FK_Employees_Employees FOREIGN KEY (ReportsTo) REFERENCES dbo.Employees(EmployeeID)

Methodischer Hinweis

Fr dieses Beispiel muss die EmployeeID-Spalte in der Employees-Tabelle als Primrschlssel definiert sein.

Unterrichtseinheit 5: Implementieren der Datenintegritt

23

Deaktivieren der Einschrnkungsberprfung beim Laden neuer Daten


Beschreiben Sie, wie die Einschrnkungsberprfung beim Laden neuer Daten deaktiviert wird.

Thema

Verwenden fr CHECK- und FOREIGN KEYEinschrnkungen Verwenden, wenn: Daten den Einschrnkungen entsprechen Sie neue Daten laden, die nicht den Einschrnkungen entsprechen
USE Northwind USE Northwind ALTER TABLE dbo.Employees ALTER TABLE dbo.Employees NOCHECK NOCHECK CONSTRAINT FK_Employees_Employees CONSTRAINT FK_Employees_Employees

Einstieg

Diese Funktion ist nur fr CHECK- und FOREIGN KEY-Einschrnkungen verfgbar.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Fr vorhandene CHECK- und FOREIGN KEY-Einschrnkungen kann die Einschrnkungsberprfung deaktiviert werden, damit Daten, die Sie in der Tabelle ndern oder zur Tabelle hinzufgen, nicht im Hinblick auf Einhaltung der Einschrnkung berprft werden. Um den fr die Einschrnkungsberprfung erforderlichen Aufwand zu vermeiden, sollten Sie Einschrnkungen in den folgenden Situationen deaktivieren: Sie haben bereits sichergestellt, dass die Daten den Einschrnkungen entsprechen. Sie mchten Daten laden, die nicht den Einschrnkungen entsprechen. Spter knnen Sie Abfragen ausfhren, um die Daten zu ndern, und dann die Einschrnkungen wieder aktivieren. Wichtig Die Deaktivierung von Einschrnkungen fr eine Tabelle wirkt sich nicht auf Einschrnkungen in anderen Tabellen aus, die auf die ursprngliche Tabelle verweisen. Aktualisierungen an einer Tabelle knnen weiterhin zu Fehlern aufgrund von Einschrnkungsverletzungen fhren. Fr die Aktivierung einer deaktivierten Einschrnkung muss eine weitere ALTER TABLE-Anweisung ausgefhrt werden, die eine CHECK- oder CHECK ALL-Klausel enthlt. Teilsyntax ALTER TABLE table {CHECK | NOCHECK} CONSTRAINT {ALL | constraint[,...n]} In diesem Beispiel wird die Einschrnkung FK_Employees_Employees deaktiviert. Sie kann erneut aktiviert werden, indem Sie eine weitere ALTER TABLE-Anweisung mit der CHECK-Klausel ausfhren.

Beispiel

24

Unterrichtseinheit 5: Implementieren der Datenintegritt


USE Northwind ALTER TABLE dbo.Employees NOCHECK CONSTRAINT FK_Employees_Employees

Um zu ermitteln, ob eine Einschrnkung fr eine Tabelle aktiviert oder deaktiviert ist, knnen Sie die gespeicherte Systemprozedur sp_help ausfhren oder die CnstIsDisabled-Eigenschaft in der OBJECTPROPERTY-Funktion verwenden.

Unterrichtseinheit 5: Implementieren der Datenintegritt

25

Verwenden von Standardwerten und Regeln


Beschreiben Sie, wie Standardwerte und Regeln erstellt werden.

Thema

Als unabhngige Objekte gilt fr Standardwerte und Regeln: Sie werden einmal definiert Sie knnen an eine oder mehrere Spalten oder benutzerdefinierte Datentypen gebunden werden
CREATE DEFAULT phone_no_default CREATE DEFAULT phone_no_default AS '(000)000-0000' AS '(000)000-0000' GO GO EXEC sp_bindefault phone_no_default, EXEC sp_bindefault phone_no_default, 'Customers.Phone' 'Customers.Phone' CREATE RULE regioncode_rule CREATE RULE regioncode_rule AS @regioncode IN ('IA', 'IL', 'KS', 'MO') AS @regioncode IN ('IA', 'IL', 'KS', 'MO') GO GO EXEC sp_bindrule regioncode_rule, EXEC sp_bindrule regioncode_rule, 'Customers.Region' 'Customers.Region'

Einstieg

Standardwerte und Regeln sind zwei weitere Methoden, um die Datenintegritt zu erzwingen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Standardwerte und Regeln sind Objekte, die an eine oder mehrere Spalten oder benutzerdefinierte Datentypen gebunden werden knnen. Auf diese Weise knnen sie einmal definiert und dann wiederholt verwendet werden. Ein Nachteil der Verwendung von Standardwerten und Regeln ist, dass sie nicht ANSI-kompatibel sind.

Erstellen eines Standardwertes


Wenn Sie bei der Eingabe von Daten einen Wert nicht angeben, wird durch einen Standardwert ein Wert fr die Spalte angegeben, an die das Objekt gebunden ist. Bevor Sie Standardwerte erstellen, sollten Sie die folgenden Punkte bercksichtigen: Kernpunkt
Es ist nicht mglich, eine DEFAULT-Einschrnkung fr eine Spalte mit einem benutzerdefinierten Datentyp zu verwenden, wenn an den Datentyp oder die Spalte bereits ein Standardwert gebunden ist.

Der Standardwert wird von smtlichen Regeln berprft, die an die Spalte und an die Datentypen gebunden sind. Der Standardwert muss jede CHECK-Einschrnkungen einhalten, die fr die Spalte definiert wurden. Es ist nicht mglich, eine DEFAULT-Einschrnkung fr eine Spalte zu erstellen, die mit einem benutzerdefinierten Datentyp definiert wurde, wenn bereits ein Standardwert an den Datentyp oder die Spalte gebunden wurde. CREATE DEFAULT default AS constant_expression

Syntax

Binden eines Standardwertes


Nachdem Sie einen Standardwert erstellt haben, mssen Sie ihn mit Hilfe der gespeicherten Systemprozedur sp_bindefault an eine Spalte oder einen benutzerdefinierten Datentyp binden. Mit Hilfe der gespeicherten Systemprozedur sp_unbindefault knnen Sie die Bindung eines Standardwertes aufheben.

26

Unterrichtseinheit 5: Implementieren der Datenintegritt

Beispiel

In diesem Beispiel wird eine Platzhalter-Telefonnummer im entsprechenden Format eingefgt, bis die eigentliche Telefonnummer eingegeben wird.
USE Northwind GO CREATE DEFAULT phone_no_default AS '(000)000-0000' GO EXEC sp_bindefault phone_no_default, 'Customers.Phone'

Erstellen einer Regel


Regeln geben die zulssigen Werte an, die in einer Spalte eingegeben werden knnen. Durch Regeln wird sichergestellt, dass Daten innerhalb eines angegebenen Wertebereichs liegen, einem bestimmten Muster entsprechen oder mit Eintrgen in einer angegebenen Liste bereinstimmen. Bercksichtigen Sie bei Regeln die folgenden Punkte: Eine Regeldefinition kann alle Ausdrcke enthalten, die in einer WHEREKlausel zulssig sind. Es kann nur je eine Regel an eine Spalte oder einen benutzerdefinierten Datentyp gebunden werden. Syntax CREATE RULE rule AS condition_expression

Binden einer Regel


Nachdem Sie eine Regel erstellt haben, mssen Sie sie mit Hilfe der gespeicherten Systemprozedur sp_bindrule an eine Spalte oder einen benutzerdefinierten Datentyp binden. Mit Hilfe der gespeicherten Systemprozedur sp_unbindrule knnen Sie die Bindung einer Regel aufheben. Beispiel In diesem Beispiel stellt die Regel sicher, dass nur die angegebenen Abkrzungen fr Staaten zulssig sind.
USE Northwind GO CREATE RULE regioncode_rule AS @regioncode IN ('IA', 'IL', 'KS', 'MO') GO EXEC sp_bindrule regioncode_rule, 'Customers.Region'

Lschen eines Standardwertes oder einer Regel


Durch die DROP-Anweisung wird ein Standardwert oder eine Regel aus der Datenbank entfernt. Syntax Syntax DROP DEFAULT default [,...n] DROP RULE rule [, ...n]

Unterrichtseinheit 5: Implementieren der Datenintegritt

27

Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt


Thema
Zeigen Sie die Vorteile und Nachteile verschiedener Datenintegrittskomponenten auf.

DatenintegrittsDatenintegrittsDatenintegrittskomponente komponente Einschrnkungen Einschrnkungen

LeistungsLeistungsLeistungsFunktionalitt einbuen einbu Funktionalitt einbuen Mittel Mittel Niedrig Niedrig Hoch Hoch Mittel-Hoch Mittel-Hoch Niedrig Niedrig

Zeitpunkt der Zeitpunkt der berprfung berpr berprfung Vor Vor Vor Vor Nach Nach Vor Vor

Einstieg

Bei der Entscheidung fr eine Methode zum Erzwingen der Datenintegritt sollten Sie die Funktionalitt und mgliche Leistungseinbuen bercksichtigen.

Standardwerte und Standardwerte und Niedrig Niedrig Regeln Regeln Triggers Triggers Datentypen, Datentypen, NULL/NOT NULL NULL/NOT NULL Hoch Hoch Niedrig Niedrig

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Kernpunkte Bei der Entscheidung fr eine Methode zum Erzwingen der Datenintegritt sollten Sie die Funktionalitt und mgliche Leistungseinbuen bercksichtigen: Fr die grundlegende Integrittslogik, z. B. beim Erzwingen gltiger Werte und fr die Aufrechterhaltung der Beziehungen zwischen den Tabellen, empfiehlt sich die deklarative Integritt. Fr die Verwaltung komplexer redundanter Daten, die nicht Teil einer Primrschlssel- oder Fremdschlsselbeziehung sind, mssen Sie Trigger oder gespeicherte Prozeduren verwenden. Trigger werden jedoch erst bei Auftreten einer nderung ausgelst, sodass die berprfung im Hinblick auf Fehler erst nach Abschluss der Anweisung erfolgt. Wenn ein Trigger eine Verletzung feststellt, mssen die nderungen rckgngig gemacht werden.
Zeitpunkt der berprfung (vor oder nach der nderung) Vor

Verwenden Sie nach Mglichkeit Einschrnkungen. Standardwerte und Regeln sollten verwendet werden, wenn unabhngige Objekte erforderlich sind. Verwenden Sie Trigger nur dann, wenn eine komplexe Geschftslogik bentigt wird.

Datenintegrittskomponente Einschrnkungen

Auswirkung Einschrnkungen werden in Tabellen definiert und berprfen die Daten, bevor eine Transaktion ausgefhrt wird, was eine bessere Leistung zur Folge hat. Standardwerte und Regeln implementieren die Datenintegritt als separate Objekte, die mit einer oder mehreren Tabellen verknpft werden knnen.

Funktionalitt Mittel

Leistungseinbuen Niedrig

Standardwerte und Regeln

Niedrig

Niedrig

Vor

28

Unterrichtseinheit 5: Implementieren der Datenintegritt

(Fortsetzung) Zeitpunkt der berprfung (vor oder nach der nderung) Nach (auer bei INSTEAD OFTriggern)

Datenintegrittskomponente Trigger

Auswirkung Trigger bieten zustzliche Funktionalitt, wie z. B. kaskadierende und komplexe Anwendungslogik. Fr alle nderungen muss ein Rollback ausgefhrt werden. Diese Komponenten bieten die niedrigste Ebene der Datenintegritt. Sie werden fr jede einzelne Spalte implementiert, wenn die Tabelle erstellt wird. Die Daten werden berprft, bevor eine Transaktion beginnt.

Funktionalitt Hoch

Leistungseinbuen Mittel-Hoch

Datentypen, NULL/NOT NULL

Niedrig

Niedrig

Vor

Unterrichtseinheit 5: Implementieren der Datenintegritt

29

Empfohlene Methoden
Stellen Sie die empfohlenen Methoden fr die Implementierung der Datenintegritt vor.

Thema

Verwenden Sie Einschrnkungen, da sie ANSI-kompatibel sind Verwenden Sie Einschrnkungen, da sie ANSI-kompatibel sind Verwenden Sie die kaskadierende referenzielle Integritt Verwenden Sie die kaskadierende referenzielle Integritt anstelle von Triggern anstelle von Triggern

Einstieg

Die folgenden empfohlenen Methoden helfen Ihnen bei der Implementierung der Datenintegritt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden sollen Ihnen bei der Implementierung der Datenintegritt helfen: Verwenden Sie Einschrnkungen, da sie ANSI-kompatibel sind und von Entwicklungstools von Drittanbietern untersttzt werden. Verwenden Sie die kaskadierende referenzielle Integritt anstelle von Triggern. Weitere Informationen zu den folgenden Themen finden Sie in der SQL ServerOnlinedokumentation.
Thema Entwickeln von Datenbanken Gruppierte und nicht gruppierte Indizes Kaskadierende referenzielle Integritt Trigger Suchbegriff Datenintegritt "Erstellen eines Indexes" "Kaskadierende Einschrnkungen der referenziellen Integritt" Trigger

30

Unterrichtseinheit 5: Implementieren der Datenintegritt

bungseinheit A: Implementieren der Datenintegritt


Thema
Geben Sie eine Einfhrung in die bungseinheit.

Einstieg

In dieser bungseinheit fgen Sie DEFAULT-, CHECK-, PRIMARY KEYund FOREIGN KEY-Einschrnkungen zu bestimmten Tabellen hinzu.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Definieren und Verwenden von DEFAULT- und CHECK-Einschrnkungen, um die Domnenintegritt zu erzwingen. Definieren und Verwenden von PRIMARY KEY- und FOREIGN KEYEinschrnkungen, um die Entittsintegritt und die referenzielle Integritt zu erzwingen. Erstellen und Verwenden von Microsoft SQL Server 2000-Standardwerten und Regeln.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L05 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L05\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore05.cmd. Durch diese Befehlsdatei wird die ClassNorthwind-Datenbank in dem Zustand wiederhergestellt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 5: Implementieren der Datenintegritt

31

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

32

Unterrichtseinheit 5: Implementieren der Datenintegritt

bung 1 Definieren von DEFAULT-Einschrnkungen


In dieser bung fgen Sie eine DEFAULT-Einschrnkung zur EmployeesTabelle der ClassNorthwind-Datenbank hinzu. So definieren Sie eine DEFAULT-Einschrnkung In diesem Verfahren fhren Sie ein Skript aus, das einen Standardwert fr die Region-Spalte in der Employees-Tabelle erstellt. Anschlieend ndern Sie dieses Skript, um das Standardgebiet zu ndern. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich ggf. unter Verwendung der Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Microsoft Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der SQL Server-Rolle sysadmin zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen Sie C:\Moc\2328A\Labfiles\L05\DefConst.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript erstellt eine DEFAULT-Einschrnkung, die NY (New York) als Standardwert fr die Region-Spalte in der Employees-Tabelle hinzufgt. 5. Fhren Sie sp_helpconstraint Tabellenname und sp_help Einschrnkungsname aus, um Informationen zu der soeben erstellten DEFAULT-Einschrnkung anzuzeigen.
EXEC SP_HELPCONSTRAINT Employees EXEC SP_HELP DF_Region

Unterrichtseinheit 5: Implementieren der Datenintegritt

33

6. ndern Sie C:\Moc\2328A\Labfiles\L05\DefConst.sql so, dass die in Schritt 4 erstellte DEFAULT-Einschrnkung durch eine Einschrnkung ersetzt wird, die WA (Washington) als Standardwert fr die Region-Spalte der Employees-Tabelle festlegt. L05\Answers\DefCons2.sql enthlt ein fertiges Skript fr diesen Schritt.
USE ClassNorthwind GO ALTER TABLE Employees DROP CONSTRAINT DF_Region GO ALTER TABLE Employees ADD CONSTRAINT DF_Region DEFAULT 'WA' FOR Region GO

34

Unterrichtseinheit 5: Implementieren der Datenintegritt

bung 2 Definieren von CHECK-Einschrnkungen


In dieser bung fgen Sie zwei CHECK-Einschrnkungen zu den Tabellen in der ClassNorthwind-Datenbank hinzu. So definieren Sie eine CHECK-Einschrnkung In diesem Verfahren fhren Sie ein Skript aus, um eine Einschrnkung fr eine Anrede zur Employees-Tabelle hinzuzufgen. Anschlieend schreiben Sie eine Anweisung, die eine Einschrnkung fr das Geburtsdatum zur EmployeesTabelle hinzufgt, und fhren die Anweisung aus. Zum Schluss schreiben Sie eine Anweisung, um die neuen Einschrnkungen zu testen, und fhren die Anweisung aus. 1. ffnen Sie C:\Moc\2328A\Labfiles\L05\ChkConst.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript fgt eine CHECK-Einschrnkung fr die Anrede zur Employees-Tabelle der ClassNorthwind-Datenbank hinzu. 2. Schreiben Sie eine Anweisung, die die Einschrnkung CK_BirthDate zur BirthDate-Spalte der Employees-Tabelle hinzufgt, und fhren Sie die Anweisung aus. Der Wert in der BirthDate-Spalte muss einem Datum entsprechen, das vor dem heutigen Datum liegt. C:\Moc\2328A\Labfiles\L05\Answers\BirthDate.sql enthlt ein fertiges Skript fr diesen Schritt.
USE ClassNorthwind ALTER TABLE Employees ADD CONSTRAINT CK_BirthDate CHECK (BirthDate < GETDATE()) GO

Unterrichtseinheit 5: Implementieren der Datenintegritt

35

3. Fhren Sie Anweisungen aus, die alle Einschrnkungen verletzen. Verwenden Sie die folgenden Beispiele als Vorlage.
USE ClassNorthwind GO UPDATE Employees SET TitleOfCourtesy = 'None' WHERE EmployeeID = 1 GO UPDATE Employees SET BirthDate = (GETDATE()+1) WHERE EmployeeID = 1 GO

Was geschieht? In allen Fllen wird der Befehl mit der Meldung unterbrochen, dass die UPDATE-Anweisung einen Konflikt mit der Einschrnkung verursacht hat. ____________________________________________________________ ____________________________________________________________ 4. Fhren Sie sp_helpconstraint Tabellenname und sp_help Einschrnkungsname aus, um Informationen zu den soeben erstellten CHECKEinschrnkungen anzuzeigen.
EXEC SP_HELPCONSTRAINT GO Employees

EXEC SP_HELP CK_TitleOfCourtesy GO EXEC SP_HELP CK_BirthDate GO

36

Unterrichtseinheit 5: Implementieren der Datenintegritt

bung 3 Definieren von PRIMARY KEY-Einschrnkungen


In dieser bung fgen Sie PRIMARY KEY-Einschrnkungen zu allen Tabellen der ClassNorthwind-Datenbank hinzu. So definieren Sie eine PRIMARY KEY-Einschrnkung In diesem Verfahren fhren Sie zunchst ein Skript aus, das einen Primrschlssel fr die Employees-Tabelle erstellt. Anschlieend schreiben Sie eine Anweisung, um eine PRIMARY KEY-Einschrnkung fr die CustomersTabelle zu erstellen. Zum Schluss fhren Sie ein Skript aus, das PRIMARY KEY-Einschrnkungen zu den anderen Tabellen in der ClassNorthwindDatenbank hinzufgt. 1. ffnen Sie C:\Moc\2328A\Labfiles\L05\Prikey1.sql. Sehen Sie sich den Inhalt der Datei an, und fhren Sie sie aus, um eine PRIMARY KEYEinschrnkung fr die Employees-Tabelle in der ClassNorthwindDatenbank zu erstellen. 2. Schreiben Sie eine Anweisung, die eine PRIMARY KEY-Einschrnkung mit der Bezeichnung PK_Customers zur CustomerID-Spalte der Customers-Spalte hinzufgt, und fhren Sie die Anweisung aus. C:\Moc\2328A\Labfiles\L05\Answers\PriTitle.sql enthlt ein fertiges Skript fr diesen Schritt.
USE ClassNorthwind ALTER TABLE Customers ADD CONSTRAINT PK_Customers PRIMARY KEY NONCLUSTERED (CustomerID) GO

Wie wirkt sich die Erstellung einer PRIMARY KEY-Einschrnkung auf nicht gruppierte Indizes aus, die mit der Tabelle verknpft sind? Eine PRIMARY KEY-Einschrnkung erstellt automatisch einen gruppierten Index, und die Erstellung eines gruppierten Indexes fhrt wiederum dazu, dass alle nicht gruppierten Indizes automatisch neu erstellt werden. ____________________________________________________________ ____________________________________________________________ 3. ffnen Sie die Datei C:\Moc\2328A\Labfiles\L05\PriKey2.sql. Sehen Sie sich den Inhalt der Datei an, und fhren Sie sie aus, um PRIMARY KEYEinschrnkungen fr die verbleibenden Tabellen in der ClassNorthwindDatenbank zu erstellen.

Unterrichtseinheit 5: Implementieren der Datenintegritt

37

4. Fhren Sie die gespeicherte Systemprozedur sp_helpconstraint aus, um Informationen zu der PRIMARY KEY-Einschrnkung anzuzeigen, die Sie fr die orders-Tabelle erstellt haben. Fhren Sie auerdem die gespeicherte Systemprozedur sp_help fr die Einschrnkung in PK_Employees der ClassNorthwind-Datenbank aus.
EXEC SP_HELPCONSTRAINT orders GO EXEC SP_HELP PK_Employees GO

38

Unterrichtseinheit 5: Implementieren der Datenintegritt

bung 4 Definieren von FOREIGN KEY-Einschrnkungen


In dieser bung fgen Sie FOREIGN KEY-Einschrnkungen zu Tabellen der ClassNorthwind-Datenbank hinzu. So definieren Sie eine FOREIGN KEY-Einschrnkung In diesem Verfahren fhren Sie zunchst ein Skript aus, das einen Fremdschlssel fr die Orders-Tabelle erstellt. Anschlieend schreiben Sie eine Anweisung, um eine FOREIGN KEY-Einschrnkung fr die Orders-Tabelle zu erstellen. Zum Schluss fhren Sie ein Skript aus, das FOREIGN KEYEinschrnkungen zu den anderen Tabellen in der ClassNorthwind-Datenbank hinzufgt. 1. ffnen Sie die Datei C:\Moc\2328A\Labfiles\L05\ForKey1.sql. Sehen Sie sich den Inhalt der Datei an, und fhren Sie sie aus, um eine FOREIGN KEY-Einschrnkung fr die Orders-Tabelle zu erstellen. Warum war es nicht notwendig, eine DROP INDEX-Anweisung auszufhren? Beim Erstellen einer FOREIGN KEY-Einschrnkung wird nicht automatisch ein Index erzeugt. ____________________________________________________________ ____________________________________________________________ Verhindert die FOREIGN KEY-Einschrnkung, dass die Tabelle, auf die verwiesen wird, gelscht oder abgeschnitten wird? Ja. Es ist nicht mglich, eine Tabelle zu lschen, auf die von einer FOREIGN KEY-Einschrnkung verwiesen wird. Das Abschneiden einer Tabelle, auf die von einer FOREIGN KEY-Einschrnkung verwiesen wird, wrde ebenfalls die Einschrnkung verletzen, da die Primrschlssel, auf die sie verweist, nicht mehr vorhanden wren. ____________________________________________________________ ____________________________________________________________ 2. Schreiben Sie eine Anweisung, die eine FOREIGN KEY-Einschrnkung mit der Bezeichnung FK_Products_Categories zur CategoryID-Spalte der Products-Tabelle hinzufgt, wobei die Einschrnkung auf die CategoryIDSpalte in der Categories-Tabelle verweist. Fhren Sie die Anweisung aus. Geben Sie eine Option an, die nicht berprft, ob die vorhandenen Daten der neuen Einschrnkung entsprechen. C:\Moc\2328A\Labfiles\L05\Answers\ForeignKeyProd.sql enthlt ein fertiges Skript fr diesen Schritt.
USE ClassNorthwind ALTER TABLE dbo.Products WITH NOCHECK ADD CONSTRAINT FK_Products_Categories FOREIGN KEY(CategoryID) REFERENCES dbo.Categories(CategoryID) GO

Unterrichtseinheit 5: Implementieren der Datenintegritt

39

3. ffnen Sie die Datei C:\Moc\2328A\Labfiles\L05\ForKey2.sql. Sehen Sie sich den Inhalt der Datei an, und fhren Sie sie aus, um die verbleibenden FOREIGN KEY-Einschrnkungen in der ClassNorthwind-Datenbank zu erstellen. 4. Fhren Sie sp_helpconstraint Tabellenname aus, um Informationen zu einigen der zuvor erstellten FOREIGN KEY-Einschrnkungen anzuzeigen. Sie knnen fr diesen Schritt die folgenden Tabellen mit FOREIGN KEYEinschrnkungen verwenden: Products, Orders, Order Details, Suppliers und Employees.
USE Northwind GO EXEC SP_HELPCONSTRAINT GO EXEC SP_HELPCONSTRAINT GO ..

Products Employees

40

Unterrichtseinheit 5: Implementieren der Datenintegritt

Wenn Sie noch Zeit haben Erstellen von Standardwerten und Regeln
In dieser bung fgen Sie Standardwerte und Regeln zur ClassNorthwindDatenbank hinzu. So erstellen Sie einen Standardwert In diesem Verfahren fhren Sie ein Skript aus, um einen Standardwert zu erstellen und an eine Spalte zu binden. Anschlieend berprfen Sie, ob der Standardwert ordnungsgem funktioniert. 1. ffnen Sie C:\Moc\2328A\Labfiles\L05\CreaDefa.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript erstellt einen Standardwert und bindet ihn an die Suppliers.Country-Spalte. Der Standardwert ist Singapore. 2. Fhren Sie eine Anweisung aus, die einen neuen Datensatz einfgt, um zu berprfen, ob der Standardwert ordnungsgem funktioniert. Das folgende Beispiel veranschaulicht die Vorgehensweise fr die Suppliers-Tabelle. Sie knnen das Beispiel ndern und einen Firmennamen Ihrer Wahl verwenden.
USE ClassNorthwind INSERT Suppliers (CompanyName) VALUES ('Karl''s Bakery') GO

3. Schreiben Sie eine Anweisung, die die Suppliers-Tabelle abfragt, um die Ergebnisse anzuzeigen, und fhren Sie die Anweisung aus. Im folgenden Beispiel wird davon ausgegangen, dass Sie die Daten aus dem vorherigen Schritt verwenden.
USE ClassNorthwind SELECT * FROM Suppliers WHERE Country = 'Singapore' GO

So erstellen Sie eine Regel In diesem Verfahren fhren Sie ein Skript aus, um eine Regel zu erstellen und an eine Spalte zu binden. Anschlieend berprfen Sie, ob die Regel ordnungsgem funktioniert. 1. ffnen Sie C:\Moc\2328A\Labfiles\L05\CreaRule.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript erstellt eine Regel fr Pfade, die sicherstellt, dass die Pfade fr Angestelltenfotografien dem im Skript vorgegebenen Format entsprechen. 2. Fhren Sie die folgende UPDATE-Anweisung aus, um die Regel zu testen, indem Sie versuchen, die PhotoPath-Spalte mit einem ungltigen Pfad zu aktualisieren. Die Anweisung sollte fehlschlagen, da sie gegen die Regel fr den Pfad verstt.
USE ClassNorthwind UPDATE Employees SET PhotoPath = 'http://accweb/xemmployees/new.bmp' WHERE LastName = 'Fuller' GO

Unterrichtseinheit 5: Implementieren der Datenintegritt

41

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Datenintegrittstypen Erzwingen der Datenintegritt Definieren von Einschrnkungen Einschrnkungstypen Deaktivieren von Einschrnkungen Verwenden von Standardwerten und Regeln Auswhlen der geeigneten Methode zum Erzwingen der Datenintegritt

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Welche Art von Einschrnkung wrden Sie zum Country-Feld Ihrer Datenbank hinzufgen, um sicherzustellen, dass Ihre Niederlassung in Indonesien nur mit anderen indonesischen Firmen Geschfte macht? Eine CHECK-Einschrnkung (oder eine Regel).

2. Nach der Implementierung der Einschrnkung oder Regel aus Frage 1 beklagen sich die Mitarbeiter, die fr die Dateneingabe verantwortlich sind, dass sie das Wort Indonesia immer wieder eingeben mssen. Wie knnen Sie dieses Problem lsen? Mit Hilfe einer DEFAULT-Einschrnkung (oder eines Standardwertes).

42

Unterrichtseinheit 5: Implementieren der Datenintegritt

3. Ihr Unternehmen wurde umstrukturiert, und die Niederlassung in Indonesien wurde aufgelst. Die neue Niederlassung befindet sich in Malaysia und wickelt nun Geschfte mit zahlreichen anderen ostasiatischen Lndern ab. Derzeit gibt es 4,5 Millionen Verkaufsdatenstze, in denen das CountryFeld den Wert Indonesia enthlt. Wie mssen Sie vorgehen, um neue Lnder hinzufgen und gleichzeitig die Zeilen, die den Wert Indonesia enthalten, beibehalten zu knnen? ndern Sie die Tabelle, indem Sie die vorhandene Einschrnkung lschen und durch eine neue Einschrnkung ersetzen. Verwenden Sie beim Hinzufgen der Einschrnkung die Option WITH NOCHECK.

4. Ihr Auftragseingabesystem weist zwei Haupttabellen auf: Orders und Customers. Welche Datenintegrittskomponenten sollten Sie in Betracht ziehen, wenn Sie sicherstellen mchten, dass alle Auftrge und Kunden eindeutig identifiziert werden knnen? Wie wrden Sie die Beziehung zwischen den beiden Tabellen verwalten? Definieren Sie unbedingt eine PRIMARY KEY-Einschrnkung fr die Customers-Tabelle. Verwenden Sie eine FOREIGN KEY-Einschrnkung fr die Orders-Tabelle, um auf die Customers-Tabelle zu verweisen.

Unterrichtseinheit 6: Planen von Indizes


Inhalt bersicht Einfhrung in Indizes Indexarchitektur Abrufen von gespeicherten Daten durch SQL Server Verwaltung von Index- und Heapstrukturen durch SQL Server Entscheiden, welche Spalten indiziert werden Empfohlene Methoden bungseinheit A: Bestimmen der Indizes fr eine Tabelle Lernzielkontrolle 1 2 7 12 19 25 39 40 44

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 6: Planen von Indizes

iii

Hinweise fr den Kursleiter


Prsentation: 90 Minuten bungseinheit: 15 Minuten Diese Unterrichtseinheit gibt den Kursteilnehmern eine bersicht ber das Planen von Indizes. Es wird erlutert, wie Indizes die Datenbankleistung verbessern knnen. Auerdem wird beschrieben, wie Microsoft SQL Server 2000 gruppierte und nicht gruppierte Indizes speichert und wie SQL Server mit Hilfe von Indizes Zeilen abruft. Weiterhin wird gezeigt, wie SQL Server Indizes verwaltet. Abschlieend werden die Richtlinien beschrieben, mit deren Hilfe entschieden werden kann, welche Spalten indiziert werden sollen. In der bungseinheit untersuchen die Kursteilnehmer zwei Methoden zum Bestimmen der Indizes fr eine Tabelle. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben, warum und wann ein Index verwendet wird. Beschreiben, wie SQL Server gruppierte und nicht gruppierte Indizes verwendet. Beschreiben, wie die Indexarchitektur von SQL Server das Abrufen von Daten erleichtert. Beschreiben, wie SQL Server Indizes und Heaps verwaltet. Beschreiben der Bedeutung von Datenselektivitt, Datendichte und Datenverteilung bei der Entscheidung, welche Spalten indiziert werden sollen.

Unterlagen und Vorbereitung


Dieser Abschnitt beschreibt die erforderlichen Unterlagen und vorbereitenden Aufgaben, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_06.ppt Die Beispieldatei C:\Moc\2328A\Demo\D06_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 6: Planen von Indizes

Multimediaprsentation
In diesem Abschnitt werden Vorgehensweisen bei der Multimediaprsentation beschrieben, die nicht in den Randnotizen enthalten und nicht fr die Unterlagen der Kursteilnehmer geeignet sind.

SQL Server-Indexarchitektur
So bereiten Sie die Multimediaprsentation vor und starten sie Klicken Sie auf die Schaltflche auf der Folie, um die Multimediaprsentation zu starten. In dieser Multimediaprsentation wird die SQL Server-Indexarchitektur vorgestellt. Zu Beginn wird das Konzept des B-Baumes beschrieben (Balanced Tree, B-Tree). Anschlieend wird die Architektur eines gruppierten Indexes beschrieben, und es wird erlutert, wie Daten gespeichert werden und wie in einem gruppierten Index auf Daten zugegriffen wird. Im weiteren Verlauf wird die Architektur eines nicht gruppierten Indexes beschrieben, und es wird erklrt, inwiefern sie sich von der eines gruppierten Indexes unterscheidet. Dabei wird hervorgehoben, dass ein nicht gruppierter Index zwei unterschiedliche Strukturen aufweisen kann. Abschlieend wird vorgefhrt, wie mit Hilfe eines nicht gruppierten Indexes, der auf Basis eines Heaps erstellt wurde, und mit Hilfe eines nicht gruppierten Indexes, der auf Basis eines gruppierten Indexes erstellt wurde, auf Daten zugegriffen wird.

Sonstige Aktivitten
In diesem Abschnitt werden Verfahren bereitgestellt, mit denen interaktive Aktivitten zum Anzeigen und berprfen von Informationen implementiert werden, wie Spiele oder bungen mit Rollenspielen.

Anzeigen der PowerPoint-Animationen


Alle Animationen sind durch ein Hyperlinksymbol in der unteren linken Ecke der Folie gekennzeichnet. So zeigen Sie die Folie Suchen nach Zeilen ohne Indizes an Diese Folie zeigt, wie SQL Server Zeilen in einem Heap findet, wenn keine ntzlichen Indizes vorhanden sind. 1. Zeigen Sie die Folie mit dem Thema an, auf der die sysindexes-Tabelle, die IAM-Seite (Index Allocation Map) sowie Datenseiten sichtbar sind. Weisen Sie darauf hin, dass die Datenseiten in einem Heap gespeichert und keine nicht gruppierten Indizes vorhanden sind. 2. Fahren Sie mit der ersten Animation fort. Beschreiben Sie, wie die FirstIAM-Spalte der sysindexes-Tabelle SQL Server auf die IAM-Seite verweist. 3. Fahren Sie mit der letzten Animation fort. Sie zeigt, wie die IAM-Seite SQL Server zu den Blcken fhrt, die Daten fr die Tabelle enthalten. Besprechen Sie die IAM-Seite nicht im Detail. Weisen Sie darauf hin, dass Tabellenscans eine effiziente Methode darstellen, um alle Zeilen einer Tabelle zurckzugeben.

Unterrichtseinheit 6: Planen von Indizes

So zeigen Sie die Folie Suchen von Zeilen in einem Heap mit einem nicht gruppierten Index an Diese Folie zeigt, wie SQL Server mit Hilfe eines nicht gruppierten Indexes eines Heaps auf den Bereich von Nachnamen zwischen Masters und Rudd zugreift. 1. Zeigen Sie die Folie mit dem Thema an, auf der die Architektur eines nicht gruppierten Indexes eines Heaps und die SELECT-Anweisung angezeigt werden. 2. Fahren Sie mit der ersten Animation fort, bei der gezeigt wird, wie SQL Server den nicht gruppierten Index verwendet, um die Blattebene des Indexes mit dem Nachnamen Matey zu suchen. Die Indexzeile ist ausgewhlt. 3. Fahren Sie mit der nchsten Animation fort. Sie zeigt, wie SQL Server die Zeilen-ID verwendet, um den Nachnamen Matey in den Datenseiten zu suchen. 4. Fahren Sie mit der letzten Animation fort. Hier zeigt der Pfeil auf die nchsten Zeilen auf der Blattebene des Indexes und sucht mit Hilfe der Zeilen-ID die anderen Zeilen im Heap. Betonen Sie, dass die Zeilen-ID Zeilen, die identische Nachnamen wie z. B. Jones enthalten, eindeutig identifiziert. SQL Server gibt diese Zeilen als Reaktion auf die Abfrage zurck. So zeigen Sie die Folie Suchen von Zeilen in einem gruppierten Index an Diese Folie zeigt, wie SQL Server eine Zeile in einem gruppierten Index sucht, wobei mit der sysindexes-Tabelle begonnen wird. 1. Zeigen Sie die Folie mit dem Thema an, auf der die Architektur eines gruppierten Indexes und die SELECT-Anweisung angezeigt werden. 2. Fahren Sie mit der ersten und einzigen Animation fort, bei der eine Gruppe von Pfeilen den Pfad im Index anzeigt, den SQL Server durchluft, um die Zeile fr Ota zu suchen. Betonen Sie, dass die Blattebene des gruppierten Indexes nach dem Gruppierungsschlssel lastname sortiert ist.

vi

Unterrichtseinheit 6: Planen von Indizes

So zeigen Sie die Folie Suchen von Zeilen in einem gruppierten Index mit einem nicht gruppierten Index an Diese Folie zeigt, wie SQL Server mit Hilfe eines nicht gruppierten Indexes fr firstname und eines gruppierten Indexes fr lastname auf eine einzelne Zeile mit dem Vornamen Mike zugreift. 1. Zeigen Sie die Folie mit dem Thema an, auf der die Architektur eines nicht gruppierten Indexes fr einen gruppierten Index und die SELECT-Anweisung angezeigt werden. 2. Fahren Sie mit der ersten Animation fort, bei der eine Gruppe von Pfeilen den Pfad im gruppierten Index anzeigt, den SQL Server durchluft, um die Zeile mit dem Vornamen Mike zu suchen. 3. Fahren Sie mit der nchsten Animation fort, bei der eine Gruppe von Pfeilen zeigt, wie SQL Server den Gruppierungsschlssel mit dem Nachnamen Nash verwendet, um die Zeile im gruppierten Index zu suchen. Weisen Sie darauf hin, dass SQL Server zwei Indizes durchlaufen muss, um den Eintrag zu finden, dass jedoch Indexabrufe schnell durchgefhrt werden knnen und sich die oberen Ebenen des Indexes hufig im Arbeitsspeicher befinden. So zeigen Sie die Folie Seitenteilungen in einem Index an Diese Folie zeigt, wie und warum SQL Server eine Datenseite teilt. 1. Zeigen Sie die Folie mit dem Thema an. Lesen Sie die Transact-SQL-Anweisung, und zeigen Sie, wo die neue Zeile gespeichert wird. Weisen Sie darauf hin, dass es fr die Zeile keinen Platz gibt. 2. Fahren Sie mit der Folie fort, die die Seitenteilung zeigt. Weisen Sie darauf hin, dass eine neue Seite hinzugefgt und der Inhalt auf die alte und neue Seite aufgeteilt (geteilt) wurde. So zeigen Sie die Folie Vorwrtszeiger in einem Heap an Diese Folie zeigt, wie und warum SQL Server in einem Heap einen Vorwrtszeiger verwendet. 1. Zeigen Sie die Folie mit dem Thema an. Lesen Sie die Transact-SQL-Anweisung, und weisen Sie darauf hin, dass fr die Aktualisierung der Zeile fr Ota die Zeile grer werden muss. 2. Fahren Sie mit der nchsten Animation fort, bei der gezeigt wird, wie die Zeile mit Hilfe des Indexes gesucht werden kann. Betonen Sie, dass die Datenseite voll ist; fr eine grere Zeile ist kein Platz. 3. Fahren Sie mit der letzten Animation fort. Sie zeigt, wie die Zeile auf eine andere Seite verschoben wird. Erlutern Sie, wie der ursprngliche Speicherort einen Vorwrtszeiger fr den neuen Speicherort beibehlt. Weisen Sie darauf hin, dass der nicht gruppierte Index nach wie vor auf den ursprnglichen Speicherort verweist.

Unterrichtseinheit 6: Planen von Indizes

vii

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung in Indizes Beschreiben Sie, auf welche Art und Weise SQL Server Daten speichert und auf die Daten zugreift. Erlutern Sie anschlieend die Grnde, die fr und gegen das Erstellen von Indizes sprechen. Erklren Sie, wie SQL Server Indizes verwendet. Indexarchitektur Spielen Sie die Multimediaprsentation zur SQL Server-Indexarchitektur ab. Vermeiden Sie es, auf die Verwendung von Indizes im Detail einzugehen, da die verschiedenen Arten des Datenabrufs in nachfolgenden Abschnitten dieser Unterrichtseinheit behandelt werden. Erlutern Sie, wie SQL Server Heaps verwendet, und stellen Sie bestimmte Aspekte gruppierter und nicht gruppierter Indizes dar. Abrufen von gespeicherten Daten durch SQL Server Die Abbildungen in diesem Abschnitt stellen eine Wiederholung eines Groteils des in der Multimediaprsentation behandelten Inhalts dar. Die Zeit, die fr das Besprechen jeder Folie aufgewendet wird, sollte je nach Kenntnisstand der Kursteilnehmer variieren. Geben Sie den Kursteilnehmern eine Einfhrung in sysindexes. Weisen Sie darauf hin, dass die IAM-Seite fr Tabellen- oder Indexscans verwendet wird und der Stamm zum Durchfhren eines Drilldowns durch die Indizes verwendet wird. Unterscheiden Sie zwischen einem Heap und einer Tabelle mit einem gruppierten Index. Stellen Sie sicher, dass die Kursteilnehmer verstehen, wie ein nicht gruppierter Index entweder den gruppierten Index oder die Zeilen-ID (Row ID, RID) eines Heaps verwendet. Betonen Sie, dass ein krzerer Wert fr einen gruppierten Index einen effizienteren nicht gruppierten Index bildet, dass jedoch gruppierte Indizes hauptschlich im Hinblick auf den Bereich von erwarteten Abfragen ausgewhlt werden. Verwaltung von Index- und Heapstrukturen durch SQL Server Stellen Sie sicher, dass die Kursteilnehmer verstehen, warum Seiten geteilt werden. Betonen Sie, dass fr Seitenteilungen normalerweise keine Indexverwaltung erforderlich ist. Gehen Sie auf Vorwrtszeiger ein, und heben Sie hervor, dass es mit ihrer Hilfe weniger hufig notwendig ist, nicht gruppierte Indizes zu aktualisieren. Wiederholen Sie die Kernpunkte in Bezug auf Aktualisierungen und Lschungen. Entscheiden, welche Spalten indiziert werden Wiederholen Sie Grundlegendes zu Indizes, um deutlich zu machen, wie wichtig es ist, ntzliche Indizes zu erstellen. Wiederholen Sie z. B. Grundlegendes zu den Daten und zum Schreiben von Abfragen, die eine Suche begrenzen. Erklren Sie dann, wie wichtig es ist, die entsprechenden zu indizierenden Spalten auszuwhlen, da sich die Datenselektivitt, die Datendichte und die Datenverteilung die Art und Weise beeinflussen, wie der Abfrageoptimierer auf Daten zugreift.

viii

Unterrichtseinheit 6: Planen von Indizes

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Im folgenden Abschnitt wird die Anforderung zum Einrichten der bungseinheit dieser Unterrichtseinheit beschrieben.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit dieser Unterrichtseinheit muss sich die credit-Datenbank in den fr diese bungseinheit erforderlichen Zustand zurckversetzt werden. Damit Kursteilnehmercomputer diese Anforderung erfllen, mssen Sie eine der folgenden Aktionen durchfhren: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\RestoreCredit.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\RestoreCredit.cmd ausfhren, um sicherzustellen, dass die erste bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

Unterrichtseinheit 6: Planen von Indizes

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung in Indizes Indexarchitektur Abrufen von gespeicherten Daten durch SQL Server Verwaltung von Index- und Heapstrukturen durch SQL Server Entscheiden, welche Spalten indiziert werden

Einstieg

In dieser Unterrichtseinheit lernen Sie, wann und warum Sie Indizes erstellen und welche verschiedenen Indextypen es gibt. Sie erfahren, wie SQL Server Indizes verwendet und verwaltet und wie Sie den fr Ihre Zwecke geeigneten Index planen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit vermittelt eine bersicht ber die Planung von Indizes. Es wird erlutert, wie Indizes die Datenbankleistung verbessern knnen. Es wird beschrieben, wie Microsoft SQL Server 2000 gruppierte und nicht gruppierte Indizes speichert und wie SQL Server Zeilen mit Hilfe von Indizes abruft. Auerdem erfahren Sie, wie SQL Server Indizes verwaltet. Die Unterrichtseinheit schliet mit Richtlinien fr die Entscheidung ber die zu indizierenden Spalten. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben, warum und wann ein Index verwendet wird. Beschreiben, wie SQL Server gruppierte und nicht gruppierte Indizes verwendet. Beschreiben, wie die Indexarchitektur von SQL Server das Abrufen von Daten erleichtert. Beschreiben, wie SQL Server Indizes und Heaps verwaltet. Beschreiben der Bedeutung von Datenselektivitt, Datendichte und Datenverteilung bei der Entscheidung, welche Spalten indiziert werden sollen.

Unterrichtseinheit 6: Planen von Indizes

Einfhrung in Indizes
Geben Sie eine Einfhrung in Indizes.

Thema

Einstieg

Datenspeicherung und Datenzugriff in SQL Server Grnde fr die Indexerstellung

In diesem Abschnitt wird beschrieben, warum und wann ein Index verwendet wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Durch Verwenden von Indizes kann die Datenbankleistung erheblich verbessert werden. In diesem Abschnitt werden die grundlegenden Indexkonzepte vorgestellt, und es wird erlutert, wann und warum Indizes verwendet werden.

Unterrichtseinheit 6: Planen von Indizes

Datenspeicherung und Datenzugriff in SQL Server


Erlutern Sie, wie SQL Server Daten speichert und auf die Daten zugreift.

Thema

Art der Datenspeicherung


Zeilen werden in Datenseiten gespeichert Ein Heap besteht aus mehreren Datenseiten fr eine Tabelle

Einstieg

Um zu verstehen, wie SQL Server auf Daten zugreift, mssen Sie wissen, wie diese Daten gespeichert werden.

Datenzugriff
Alle Datenseiten einer Tabelle werden durchsucht Verwenden eines Indexes, der auf Daten auf einer Seite zeigt
Datenseiten
Seite 4
Con Funk White ... ... ... ... ... ... ...

Seite 5
Rudd White Barr
... ... ... ... ... ... ...

Seite 6
Akhtar Funk Smith Martin ...
... ... ... ... ...

Seite 7
Smith Ota Jones
... ... ... ... ... ... ...

Seite 8
Martin Phua Jones Smith ...
... ... ... ... ...

Seite 9
Ganio Jones Hall
... ... ... ... ... ... ...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Um zu verstehen, wie SQL Server auf Daten zugreift, mssen Sie wissen, wie diese Daten gespeichert werden. Methodischer Hinweis Anmerkung Auf den Datenseiten der Folie sind zwar nur die Nachnamen zu sehen, es werden dort jedoch die vollstndigen Zeilen gespeichert.

Weisen Sie darauf hin, dass auf den Datenseiten der Folie zwar nur die Nachnamen zu sehen sind, dort aber die vollstndigen Zeilen gespeichert werden.

Art der Datenspeicherung


Ein Heap besteht aus mehreren Datenseiten, die die Zeilen einer Tabelle enthalten: Jede Datenseite enthlt 8 KB Daten. Eine Gruppe von acht aufeinander folgenden Seiten wird als Block bezeichnet. Die Datenzeilen werden nicht in einer bestimmten Reihenfolge gespeichert, und es gibt auch keine bestimmte Reihenfolge fr die Datenseiten. Die Datenseiten sind nicht in einer verknpften Liste verknpft. Wenn einer Seite Zeilen hinzugefgt werden und diese Seite voll ist, wird die Datenseite geteilt.

Unterrichtseinheit 6: Planen von Indizes

Datenzugriff
SQL Server verwendet zwei Methoden fr den Zugriff auf Daten: Alle Datenseiten einer Tabelle werden durchsucht - dieses Verfahren wird als Tabellenscan bezeichnet. Bei einem Tabellenscan geht SQL Server folgendermaen vor: Der Scan beginnt am Anfang der Tabelle. Seite fr Seite werden alle Zeilen der Tabelle gescannt. Die Zeilen, die den Abfragekriterien entsprechen, werden extrahiert. Es werden Indizes verwendet. Bei der Verwendung eines Indexes geht SQL Server folgendermaen vor: Die Indexarchitektur wird nach den Zeilen durchsucht, die von der Abfrage angefordert werden. Es werden nur die Zeilen extrahiert, die den Abfragekriterien entsprechen. Zunchst stellt SQL Server fest, ob ein Index vorhanden ist. Anschlieend ermittelt der Abfrageoptimierer - die Komponente, die den optimalen Ausfhrungsplan fr die Abfrage generiert -, mit welcher Methode am effizientesten auf die Daten zugegriffen werden kann: mit Hilfe eines Tabellenscans oder ber den Index.

Unterrichtseinheit 6: Planen von Indizes

Grnde fr die Indexerstellung


Erlutern Sie die Grnde, die fr und gegen das Erstellen von Indizes sprechen.

Thema

Grnde fr die Erstellung eines Indexes Beschleunigt die Datenabfrage Erzwingt die Eindeutigkeit der Zeilen Grnde gegen die Erstellung eines Indexes Belegt Festplattenspeicher Verursacht einen gewissen Verwaltungsaufwand

Einstieg

Die Erstellung eines Indexes ist nicht zwingend erforderlich. Erlutern Sie die Grnde, die fr die Erstellung eines Indexes sprechen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie ber die Erstellung eines Indexes nachdenken, sollten Sie zwei Faktoren bercksichtigen, um sicherzustellen, dass der Index effizienter als ein Tabellenscan ist: die Art der Daten in der Tabelle und die Art der Abfragen fr die Tabelle.

Grnde fr die Erstellung eines Indexes


Die Verwendung von Indizes beschleunigt die Datenabfrage. Wenn kein Index vorhanden ist, mssen Sie beispielsweise ein ganzes Textbuch Seite fr Seite durchgehen, um die gesuchten Informationen zu finden. SQL Server verwendet Indizes, um auf die Position einer Zeile in einer Datenseite zu verweisen, sodass nicht alle Datenseiten einer Tabelle durchsucht werden mssen. Bercksichtigen Sie in Zusammenhang mit der Verwendung von Indizes die folgenden Aspekte und Richtlinien: Indizes beschleunigen im Allgemeinen die Ausfhrung von Abfragen, bei denen Tabellen verknpft oder Sortier- bzw. Gruppierfunktionen angewendet werden. Sofern bei der Indexerstellung Eindeutigkeit definiert wurde, wird bei der Verwendung von Indizes die Eindeutigkeit der Zeilen vorausgesetzt. Indizes werden in aufsteigend sortierter Reihenfolge erstellt und verwaltet. Indizes sollten vor allem fr Spalten mit hoher Selektivitt erstellt werden, also fr Spalten oder Kombinationen von Spalten, die berwiegend eindeutige Daten enthalten.

Unterrichtseinheit 6: Planen von Indizes

Stellen Sie folgende Frage: Sind Indizes erforderlich?

Methodischer Hinweis

Grnde gegen die Erstellung eines Indexes


Indizes sind ntzlich, aber sie belegen Festplattenspeicher und verursachen Verwaltungsaufwand sowie entsprechende Kosten. Bercksichtigen Sie in Zusammenhang mit der Verwendung von Indizes die folgenden Aspekte und Richtlinien: Wenn Sie Daten in einer indizierten Spalte ndern, werden die zugehrigen Indizes von SQL Server aktualisiert. Die Verwaltung von Indizes erfordert Zeit und Ressourcen. Erstellen Sie deshalb nur dann einen Index, wenn Sie ihn regelmig verwenden werden. Bei Spalten, die sehr viele doppelte Daten enthalten, bieten Indizes nur wenige Vorteile.

Antwort: Nein. Auch ohne Index knnen Daten abgefragt und gendert werden. Der Zugriff auf Daten dauert jedoch wesentlich lnger.

Unterrichtseinheit 6: Planen von Indizes

Indexarchitektur
Geben Sie eine bersicht ber die Architektur gruppierter und nicht gruppierter Indizes.

Thema

Multimediaprsentation: SQL Server-Indexarchitektur Verwenden von Heaps Verwenden gruppierter Indizes Verwenden nicht gruppierter Indizes

Einstieg

In diesem Abschnitt wird beschrieben, wie SQL Server gruppierte und nicht gruppierte Indizes verwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Gruppierte und nicht gruppierte Indizes weisen eine unterschiedliche Architektur auf. Eine genaue Kenntnis dieser Unterschiede wird Ihnen bei der Erstellung des jeweils effektivsten Indextyps helfen.

Unterrichtseinheit 6: Planen von Indizes

Multimediaprsentation: SQL Server-Indexarchitektur


Geben Sie eine bersicht ber die SQL Server-Indexarchitektur.

Thema

Einstieg

In einer Multimediaprsentation wird die SQL Server-Indexarchitektur vorgestellt.

Methodischer Hinweis
Aktivieren Sie in Microsoft Windows Media Player im Men Ansicht die Option Beschreibung, um die Untertitel der Prsentation anzuzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In der Multimediaprsentation werden die folgenden Konzepte vorgestellt:

Gruppierte Indizes
In einem gruppierten Index ist die Blattebene die aktuelle Datenseite. Daten werden in aufsteigender Reihenfolge physisch in einer Datenseite gespeichert. Die Reihenfolge der Werte innerhalb der Indexseiten ist ebenfalls aufsteigend.

Nicht gruppierte Indizes, die auf Basis eines Heaps erstellt wurden
Wenn ein nicht gruppierter Index auf Basis eines Heaps erstellt wird, verwendet SQL Server Zeilen-IDs innerhalb der Indexseiten, die auf die Zeilen in den Datenseiten verweisen. Die Zeilen-IDs enthalten Informationen zum Speicherort der Daten.

Nicht gruppierte Indizes, die auf Basis eines gruppierten Indexes erstellt wurden
Wenn ein nicht gruppierter Index auf Basis einer Tabelle mit einem gruppierten Index erstellt wird, verwendet SQL Server einen Gruppierungsschlssel innerhalb der Indexseiten, die auf den gruppierten Index verweisen. Der Gruppierungsschlssel enthlt Informationen zum Speicherort der Daten.

Unterrichtseinheit 6: Planen von Indizes

Verwenden von Heaps


Erlutern Sie, wie SQL Server Heaps verwendet.

Thema

SQL Server: Verwendet IAM-Seiten (Index Allocation Map), die: Informationen enthalten ber den Speicherort der Blcke eines Heaps Den Heap durchsuchen, um verfgbaren Speicherplatz fr neu einzufgende Zeilen zu finden Datenseiten verbinden Gibt im Heap Speicherplatz fr neue Zeilen frei, wenn eine Zeile gelscht wird

Einstieg

Sofern fr eine Tabelle kein gruppierter Index definiert wurde, werden Datenseiten von SQL Server in einem Heap verwaltet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sofern fr eine Tabelle kein gruppierter Index definiert wurde, verwaltet SQL Server Datenseiten in einem Heap. Dabei geht SQL Server folgendermaen vor: SQL Server verwaltet Heaps mit Hilfe von IAM-Seiten (Index Allocation Map). IAM-Seiten haben folgende Funktionen: Sie enthalten Informationen ber den Speicherort der Blcke eines Heaps. Die sysindexes-Systemtabelle enthlt einen Zeiger auf die erste einem Heap zugeordnete IAM-Seite. Sie werden verwendet, um den Heap zu durchsuchen und verfgbaren Speicherplatz fr neu einzufgende Zeilen zu finden. Sie verbinden die Datenseiten. Die Datenseiten und die in ihnen enthaltenen Zeilen sind nicht in einer bestimmten Reihenfolge angeordnet und nicht miteinander verbunden. Die in den IAM-Seiten gespeicherte Verbindung ist die einzige logische Verbindung zwischen den Datenseiten. SQL Server gibt im Heap Speicherplatz fr neue Zeilen frei, wenn eine Zeile gelscht wird.

10

Unterrichtseinheit 6: Planen von Indizes

Verwenden gruppierter Indizes


Thema
Geben Sie eine bersicht ber gruppierte Indizes.

Einstieg

Gruppierte Indizes eignen sich fr Spalten, die hufig nach Schlsselwertebereichen durchsucht werden oder auf die in sortierter Reihenfolge zugegriffen wird.

Fr jede Tabelle kann es nur einen gruppierten Index geben Die physische Reihenfolge der Zeilen in der Tabelle ist mit der Reihenfolge der Zeilen im Index identisch Die Eindeutigkeit der Schlsselwerte wird explizit oder implizit aufrechterhalten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Gruppierte Indizes eignen sich fr Spalten, die hufig nach Schlsselwertebereichen durchsucht werden oder auf die in sortierter Reihenfolge zugegriffen wird. Bercksichtigen Sie bei der Erstellung eines gruppierten Indexes die folgenden Aspekte und Richtlinien: Fr jede Tabelle kann es nur einen gruppierten Index geben. Die physische Reihenfolge der Zeilen in der Tabelle ist mit der Reihenfolge der Zeilen im Index identisch. Sie sollten gruppierte Indizes vor nicht gruppierten Indizes erstellen, da ein gruppierter Index die physische Reihenfolge der Tabellenzeilen ndert. Die Zeilen werden in einer sequenziellen Reihenfolge sortiert und in dieser Reihenfolge verwaltet. Die Eindeutigkeit der Schlsselwerte wird explizit, mit Hilfe des Schlsselwortes UNIQUE, oder implizit, ber einen internen eindeutigen Bezeichner, aufrechterhalten. Diese eindeutigen Bezeichner sind intern in SQL Server festgelegt, und der Benutzer kann nicht darauf zugreifen. Die durchschnittliche Gre eines gruppierten Indexes betrgt etwa fnf Prozent der Tabellengre. Die Gre gruppierter Indizes kann jedoch in Abhngigkeit von der Gre der indizierten Spalte variieren. Wenn eine Zeile gelscht wird, wird der Speicherplatz freigegeben und steht fr eine neue Zeile zur Verfgung. Methodischer Hinweis
Stellen Sie folgende Frage: Welche Bedeutung hat der Wert 1,2? Antwort: 1 = Daten und 2 = Index. Es handelt sich bei diesen Werten um Schtzwerte.

Fragen Sie die Kursteilnehmer, nachdem Sie die im Bild aufgefhrten Punkte besprochen haben, welche Auswirkungen das Hinzufgen von Zeilen in einer Tabelle auf einen gruppierten Index hat. Stellen Sie folgende Frage: Warum knnen fr eine Tabelle nicht zwei gruppierte Indizes verwendet werden? Antwort: SQL Server kann pro Tabelle nur eine physische Zeilenreihenfolge speichern.

Whrend der Indexerstellung belegt SQL Server vorbergehend Speicherplatz der aktuellen Datenbank. Bei der Erstellung eines gruppierten Indexes wird ungefhr das 1,2-fache der Tabellengre als Arbeitsbereich bentigt. Der bei der Indexerstellung bentigte Festplattenspeicher wird anschlieend automatisch freigegeben. Anmerkung Stellen Sie sicher, dass in der Datenbank gengend Festplattenspeicher zur Verfgung steht, wenn Sie gruppierte Indizes erstellen.

Unterrichtseinheit 6: Planen von Indizes

11

Verwenden nicht gruppierter Indizes


Geben Sie eine bersicht ber nicht gruppierte Indizes.

Thema

Einstieg

Nicht gruppierte Indizes werden in SQL Server standardmig verwendet Vorhandene nicht gruppierte Indizes werden in folgenden Situationen automatisch erstellt: Ein vorhandener gruppierter Index wird gelscht Ein gruppierter Index wird erstellt Mit Hilfe der Option DROP_EXISTING werden die Spalten gendert, ber die der gruppierte Index definiert wird

Gruppierte Indizes sind dann sinnvoll, wenn die Benutzer unterschiedliche Methoden zur Datensuche verwenden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Nicht gruppierte Indizes sind dann sinnvoll, wenn die Benutzer unterschiedliche Methoden zur Datensuche verwenden. In einem Buch ber Grtnerei suchen Leser zum Beispiel hufig sowohl nach den populren als auch den lateinischen Namen von Pflanzen. Sie knnten in diesem Fall einen nicht gruppierten Index fr die Suche nach den lateinischen Namen und einen gruppierten Index fr die Suche nach den populren Namen erstellen. Bercksichtigen Sie bei der Erstellung eines nicht gruppierten Indexes die folgenden Aspekte und Richtlinien: Wenn kein Indextyp angegeben wird, wird automatisch ein nicht gruppierter Index erstellt. In folgenden Situationen werden vorhandene nicht gruppierte Indizes von SQL Server automatisch neu erstellt: Ein vorhandener gruppierter Index wird gelscht. Ein gruppierter Index wird erstellt. Mit Hilfe der Option DROP_EXISTING werden die Spalten gendert, ber die der gruppierte Index definiert wird. Die Reihenfolge der Seiten auf Blattebene eines nicht gruppierten Indexes unterscheidet sich von der physischen Reihenfolge in der Tabelle. Die Blattebene wird in aufsteigender Reihenfolge sortiert. Die Eindeutigkeit wird auf Blattebene mit Gruppierungsschlsseln oder Zeilen-IDs aufrechterhalten. Pro Tabelle kann es bis zu 249 nicht gruppierte Indizes geben. Nicht gruppierte Indizes eignen sich am besten fr Spalten, in denen die Datenselektivitt sehr hoch bis eindeutig ist. Erstellen Sie gruppierte Indizes vor nicht gruppierten Indizes. Die Zeilen-IDs bestimmen die logische Reihenfolge der Zeilen und setzen sich aus Datei-ID, Seitennummer und Zeilen-ID zusammen.

12

Unterrichtseinheit 6: Planen von Indizes

Abrufen von gespeicherten Daten durch SQL Server


Thema
Geben Sie eine bersicht ber die Verfahren zum Abrufen von Daten.

Verwenden der sysindexes-Tabelle durch SQL Server Suchen nach Zeilen ohne Indizes Suchen von Zeilen in einem Heap mit einem nicht gruppierten Index Suchen von Zeilen in einem gruppierten Index Suchen von Zeilen in einem gruppierten Index mit einem nicht gruppierten Index

Einstieg

In diesem Abschnitt wird beschrieben, wie die SQL Server-Indexarchitektur das Abrufen von Daten erleichtert.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Dieser Abschnitt enthlt eine Wiederholung von Informationen aus frheren Kursen. Sie knnen ihn zgig durcharbeiten, wenn die Kursteilnehmer mit der SELECT-Anweisung bereits vertraut sind.

Eine wichtige Voraussetzung fr das Erstellen von effizienten Datenbanken ist die Kenntnis darber, wie SQL Server gespeicherte Daten abruft. In diesem Abschnitt wird beschrieben, wie die SQL Server-Indexarchitektur das Abrufen von Daten erleichtert.

Unterrichtseinheit 6: Planen von Indizes

13

Verwenden der sysindexes-Tabelle durch SQL Server


Thema
Beschreiben Sie die Funktion der sysindexes-Tabelle bei einer Datensuche.

Beschreibt die Indizes


indid indid
0 0 1 1 2 to 250 2 to 250 255 255 Heap Heap Clustered Index Clustered Index Nonclustered Index Nonclustered Index text, ntext, or image text, ntext, or image

Object Type Object Type

Einstieg

Die sysindexes-Systemtabelle stellt den ersten Schritt einer Datensuche dar.

Speicherort fr IAM, First und Root des Indizes Anzahl der Seiten und Zeilen Verteilung der Daten
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die sysindexes-Systemtabelle ist ein zentraler Speicherort fr wichtige Informationen zu Tabellen und Indizes. Sie enthlt statistische Informationen, z. B. die Anzahl der Zeilen und Datenseiten in den einzelnen Tabellen. In ihr ist auerdem beschrieben, wie die in einer Datentabelle gespeicherten Informationen gesucht werden. Seitenzeiger in der sysindexes-Tabelle bilden das Stammverzeichnis fr alle Seitenauflistungen fr Tabellen und Indizes. Jede Tabelle verfgt ber eine Auflistung von Datenseiten; diese wird ergnzt durch weitere Auflistungen von Seiten, mit denen die Indizes implementiert werden, die fr die Tabelle definiert sind. Eine Zeile in sysindexes fr jede Tabelle und jeden Index wird durch die Kombination aus der Objekt-ID-Spalte (id) und der Index-ID-Spalte (indid) eindeutig identifiziert.

Die indid-Spalte
Im Folgenden wird beschrieben, wie die Spalten der sysindexes-Tabelle die Suche nach Datenseiten fr verschiedene Objekttypen untersttzen: Fr einen Heap gibt es in sysindexes eine Zeile mit dem Wert 0 in der indid-Spalte. Die FirstIAM-Spalte in sysindexes zeigt auf die Kette der IAM-Seiten fr die Auflistung der Datenseiten in der Tabelle. SQL Server muss die IAM-Seiten fr die Suche nach den Seiten in der Datenseitenauflistung verwenden, weil diese Seiten nicht miteinander verknpft sind. Fr einen gruppierten Index einer Tabelle gibt es in sysindexes eine Zeile mit dem Wert 1 in der indid-Spalte. Die root-Spalte in sysindexes zeigt auf den Anfang des B-Baumes des gespeicherten Indexes.

14

Unterrichtseinheit 6: Planen von Indizes

Fr jeden nicht gruppierten Index einer Tabelle gibt es in sysindexes eine Zeile mit einem Wert in der indid-Spalte. Der Wert fr die indid-Spalte fr einen nicht gruppierten Index liegt im Bereich von 2 bis 250. Die rootSpalte in sysindexes zeigt auf den Anfang des B-Baumes des nicht gruppierten Indexes.
Die sysindexes-Tabelle enthlt auch Informationen, die mit dem UPDATE STATISTICS-Befehl generiert werden.

Methodischer Hinweis

Fr jede Tabelle, die mindestens eine text-, ntext- oder image-Spalte enthlt, gibt es in sysindexes eine Zeile mit dem Wert 255 in der indidSpalte. Die FirstIAM-Spalte in sysindexes zeigt auf die Kette von IAMSeiten, die die text-, ntext- oder image-Seiten verwalten.

Unterrichtseinheit 6: Planen von Indizes

15

Suchen nach Zeilen ohne Indizes


Beschreiben Sie die Datensuche in einem Heap.

Thema

sysindexes id indid = 0 IAM

First IAM

Einstieg

Wenn eine Tabelle weder ber einen gespeicherten Index noch ber brauchbare nicht gespeicherte Indizes verfgt, verwendet SQL Server die IAM-Seite zum Starten eines Tabellenscans.

Extent

Bit Map

127 128 129 130

1 1 0 1

Heap

Extent 127 01 Con 01 Rudd 020101 Akhtar Funk 020101 Smith White Con Funk 03020201 Funk 02 BarrRudd White Akhtar Ota Smith 03 0201 White Smith 04030302 White... DurkinFunk 030302 Barr ... ... Jones... Ota Martin 050403 ... Smith... Lang ... 03 ... Jones... ... ... 04 Martin ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Extent 128 01 Dunn 01 Rudd 020101 Akhtar Randall 020101 Smith White Con Funk 03020201 Funk Ota Rudd Ota Smith 03020201 White Barr Akhtar Smith ... 04030302 White... 03 ...02 Funk SlichterOta Jones 03 Barr ... Martin 050403 ... Smith... LaBrie ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

Extent 129 01 Seattle 01 Rudd 020101 Akhtar Paris 020101 Smith White Con Funk Rudd 03020201 Funk TokyoAkhtar Ota 03020201 White Barr Smith Smith ... 04030302 White... 03 ...02 Funk Atlanta Ota Jones 03 Barr ... 0403 ... Smith... ... Martin ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

Extent 130 01 Graff 01 Rudd 020101 Akhtar Bacon 020101 Smith White Con Funk 03020201 Funk KochRudd Ota Smith 03020201 White Barr Akhtar 030302 White... 03 ...02 Funk ... Smith ... Jones 03 Barr ... Ota 0403 ... Smith... ... Martin ... 03 ... Jones... ... ... ... Martin ... ... 04 ... ... ... ... ... ... ... ... ... ... ... ...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Wenn es in einer Tabelle keinen Index gibt, muss SQL Server einen Tabellenscan zum Abrufen von Zeilen verwenden. SQL Server verwendet die sysindexes-Tabelle fr die Suche nach der IAM-Seite. Da die IAM-Seite eine Liste aller Seiten, die zu dieser Tabelle gehren, in Form einer Bitmap mit 8seitigen Blcken enthlt, kann SQL Server dann alle Datenseiten lesen. Das Starten einer Datensuche in einem Heap mit Hilfe einer IAM-Seite ist eine effiziente Methode fr einen Tabellenscan, eignet sich jedoch besonders gut, um nach einer geringen Anzahl von Zeilen in einer groen Tabelle zu suchen. Die Zeilen werden unsortiert zurckgegeben. Zunchst werden Sie mglicherweise in der Eingabereihenfolge zurckgegeben, diese Reihenfolge wird jedoch nicht beibehalten. Nach Lschvorgngen werden die Lcken durch neue Eingaben aufgefllt, wodurch die Reihenfolge unberechenbar wird.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie. Weisen Sie darauf hin, dass die IAM-Seite sich hufig im Arbeitsspeicher befindet und effiziente, dicht gepackte Informationen enthlt. Betonen Sie, dass bei einem fehlenden Index nur ber einen Tabellenscan Zeilen abgerufen werden knnen.

16

Unterrichtseinheit 6: Planen von Indizes

Suchen von Zeilen in einem Heap mit einem nicht gruppierten Index
Thema
sysindexes id indid = 2 root Nicht Nicht Nicht- gruppierter gruppierter Blattebene Index Index

Beschreiben Sie die Datensuche mit einem nicht gruppierten Index.

Einstieg

Zeiger spielen bei der Suche mit nicht gruppierten Indizes eine wichtige Rolle.

Akhtar Akhtar ... ... Martin Martin Seite 37 Seite 28 Seite 12 SELECT lastname,Root SELECT lastname, firstname firstname Akhtar Martin Akhtar Martin FROM member Ganio Smith Ganio Smith FROM member ... ... ... ... WHERE lastname

Seite 41 BETWEEN 51'Masters' AND 'Rudd' Seite Seite Seite 71 Blattebene BETWEEN 'Masters' 61 AND 'Rudd' Akhtar 4:706:01 Ganio 4:709:01 Martin 4:708:01 Smith 4:706:03 (SchlsselAkhtar 4:706:01 Ganio 4:709:01 Martin 4:708:01 Smith 4:706:03 Matey 4:706:04 Smith 4:708:04 Barr 4:705:03 Hall 4:709:04 Matey 4:706:04 Smith 4:708:04 Barr 4:705:03 Hall 4:709:04 wert) Con 4:704:01 Jones 4:709:02 Ota 4:707:02 Smith 4:707:01 Con 4:704:01 Jones 4:709:02 Ota 4:707:02 Smith 4:707:01 Ota Funk 4:706:02 Jones 4:708:03 Funk 4:706:02 Jones 4:708:03 Phua 4:708:02 White 4:704:03 Phua 4:708:02 White 4:704:03 Funk 4:704:02 Jones 4:707:03 Funk 4:704:02 Jones 4:707:03 Rudd 4:705:01 White 4:705:02 Rudd 4:705:01 White 4:705:02

WHERE lastname

Heap
Seite 704 01 ... Conn 02 ... Funk 03 ... White ... ... ... ... ... ... File ID #4 Seite 705 01 ... Rudd 02 ... White 03 ... Barr ... ... ... ... ... ... Seite 706 01 ... Akhtar 02 ... Funk 03 ... Smith 04 ... Matey ... ... ... Seite 707 01 ... Smith 02 ... 02 ... Ota 03 ... Jones ... ... ... ... ... ... Seite 808 01 ... Martin 02 ... Phua 02 03 ... Jones 04 ... Smith ... ... ... Seite 709 01 ... Ganio 02 ... Jones 03 ... Hall ... ... ... ... ... ...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Ein nicht gruppierter Index ist mit dem Index eines Textbuches vergleichbar. Die Daten und der Index sind an verschiedenen Orten gespeichert. Zeiger verweisen auf den Speicherort der indizierten Elemente in der zugrunde liegenden Tabelle. SQL Server-Indizes sind als B-Bume organisiert. Jede Seite in einem Index enthlt einen Seitenheader, gefolgt von den Indexzeilen. Jede Indexzeile enthlt einen Schlsselwert und einen Zeiger auf eine andere Seite oder eine Datenzeile. Jede Seite in einem Index wird als Indexknoten bezeichnet. Der oberste Knoten des B-Baumes wird als Stammknoten oder Stammebene bezeichnet. Der unterste Knoten wird als Blattknoten oder Blattebene bezeichnet. Alle Indexebenen zwischen dem Stamm- und den Blattknoten sind so genannte Zwischenebenen. Auf jeder Seite in den Zwischen- und untersten Schichten befindet sich ein Zeiger auf die vorhergehenden und die folgenden Seiten in einer doppelt verknpften Liste. In einer Tabelle, die nur ber einen nicht gruppierten Index verfgt, enthalten die Blattknoten Zeilenlokatoren mit Zeigern auf die Datenzeilen mit den Schlsselwerten. Jeder Zeiger (Zeilen-ID oder RID) besteht aus der Datei-ID, der Seitennummer und der Nummer der Zeile in der Seite. Beispiel
SELECT lastname, firstname FROM member WHERE lastname BETWEEN 'Masters' AND 'Rudd'

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie. Kursteilnehmer sollten mit der B-Baum-Struktur vertraut sein. Betonen Sie die Verwendung und Struktur der Zeiger.

Unterrichtseinheit 6: Planen von Indizes

17

Suchen von Zeilen in einem gruppierten Index


Thema
Beschreiben Sie die Datensuche mit einem gruppierten Index.
sysindexes Gruppierter Index gruppierter Index
Akhtar Akhtar Martin Martin Seite 140 - Root

id

indid = 1

root

Einstieg

Gruppierte Indizes sind in sequenzieller Reihenfolge nach ihren gruppierten Schlsseln sortiert.

Akhtar Akhtar SELECT lastname, firstname SELECT lastname, firstname Ganio FROMGanio member FROM member WHERE lastname = 'Ota' WHERE lastname = 'Ota' Seite 141 ... ... ... ... ... ... ... ... ... ... ... ...

Martin Martin Smith Smith Seite 145 ... ... ... ... ... ... ... ... ... ... ... ... Smith 1434 Smith 1434 Smith 5778 Smith 5778 Smith 7978 Smith 7978 White 2234 White 2234 White 1634 White 1634 ... ... ... ... Seite 130 ... ... ... ... ... ... ... ... ... ... ... ...

Akhtar 2334 Akhtar 2334 Barr 5678 Barr 5678 Con 2534 Con 2534 Funk 1334 Funk 1334 Funk 1534 Funk 1534 ... ... ... ... Seite 100

Ganio 7678 Ganio 7678 Hall 8078 Hall 8078 Jones 2434 Jones 2434 Jones 5978 Jones 5978 Jones 2634 Jones 2634 ... ... ... ... Seite 110

... ... ... ... ... ... ... ... ... ... ... ...

Martin 1234 Martin 1234 Martin 7778 Martin 7778 Ota 5878 Ota 5878 Phua 7878 Phua 7878 Rudd 6078 Rudd 6078 ... ... ... ... Seite 120

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Gruppierte und nicht gruppierte Indizes verwenden eine vergleichbare B-BaumStruktur. Es gibt jedoch folgende Unterschiede: Die Datenseiten eines gruppierten Indexes sind die Blattknoten der B-Baum-Struktur. Die Datenzeilen eines gruppierten Indexes werden in einer sequenziellen Reihenfolge nach ihrem gruppierten Schlssel sortiert und gespeichert. Ein gruppierter Index ist mit einem Telefonverzeichnis vergleichbar, in dem alle Zeilen von Kunden mit demselben Nachnamen an einer Stelle des Verzeichnisses zu einer Gruppe zusammengefasst sind. So wie die Organisation eines Telefonverzeichnisses jemandem die Suche erleichtert, genauso kann SQL Server eine Tabelle mit einem gruppierten Index schneller durchsuchen. Da ein gruppierter Index die Reihenfolge bestimmt, in der Zeilen in einer Tabelle gespeichert werden, kann es fr eine Tabelle immer nur einen gruppierten Index geben. Je krzer der Schlsselwert eines gruppierten Indexes, desto mehr Indexzeilen passen in eine Indexseite und desto weniger Ebenen mssen durchsucht werden. Dadurch wird die Anzahl der E/A-Vorgnge auf ein Minimum reduziert. Anmerkung Enthlt ein gruppierter Index doppelte Werte, muss SQL Server zwischen den Zeilen mit identischen Werten in der Schlsselspalte bzw. den Schlsselspalten unterscheiden knnen. Dies geschieht mit Hilfe einer 4 Byte langen Ganzzahl (uniqueidentifier-Wert) in einer zustzlichen systeminternen uniqueidentifier-Spalte. Beispiel
SELECT lastname, firstname FROM member WHERE lastname = 'Ota'

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie.

18

Unterrichtseinheit 6: Planen von Indizes

Suchen von Zeilen in einem gruppierten Index mit einem nicht gruppierten Index
Thema
sysindexes Nicht gruppierter Index auf dem Vornamen

id

indid = 2 Aaron Aaron ... ... Jose Jose

root
Nicht Blattebene

Beschreiben Sie die Datensuche, wenn beide Indextypen vorhanden sind.

Einstieg

Der sekundre Index wird dazu verwendet, die Suche in zustzlichen Spalten zu beschleunigen.
Gruppierter Index auf dem Nachnamen

Aaron Aaron Adam Adam Amie Amie

SELECT lastname, firstname, phone SELECT lastname, firstname, phone Deanna Nina Deanna Nina FROM FROM member member WHERE firstname = 'Mike' WHERE firstname = 'Mike'
Con Con Barr Barr Baldwin Baldwin Deanna Deanna Don Don Doug Doug Daum Daum Hall Hall Hampton Hampton Jose Jose Judy Judy Mike Mike

Aaron Aaron

Jose Jose

Blattebene Lugo Lugo Kaethler (gruppierter Kaethler SchlsselNash Nash wert)

Barr Barr Kim Kim Nagata Nagata OMelia OMelia Adam Adam Arlette Arlette Deanna Deanna Kim Kim Kobara Kobara LaBrie LaBrie Shane Shane Linda Linda Ryan Ryan Nagata Nagata Nash Nash Nixon Nixon Susanne Susanne Mike Mike Toby Toby

Barr Barr Cox Cox Daum Daum

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Wenn einer Tabelle mit einem gruppierten Index ein nicht gruppierter Index hinzugefgt wird, enthlt der Zeilenlokator jedes nicht gruppierten Indexes den Schlsselwert des gruppierten Indexes fr die Zeile. Wird fr dieselbe Tabelle sowohl ein gruppierter als auch ein nicht gruppierter Index verwendet, mssen die B-Baum-Strukturen beider Indizes bei der Datensuche durchsucht werden. Dadurch werden zustzliche E/A-Vorgnge generiert. Da der Schlsselwert eines gruppierten Indexes normalerweise lnger als die 8 Byte umfassende Zeilen-ID fr Heaps ist, knnen nicht gruppierte Indizes fr Tabellen mit einem gruppiertem Index erheblich lnger sein als nicht gruppierte Indizes fr Heaps. Wenn Sie kleine Schlsselwerte fr den gruppierten Index verwenden, knnen Sie kleinere und schnellere Indizes erstellen. Beispiel
SELECT lastname, firstname, phone_no FROM member WHERE firstname = 'Mike'

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie.

Unterrichtseinheit 6: Planen von Indizes

19

Verwaltung von Index- und Heapstrukturen durch SQL Server


Geben Sie eine bersicht ber die Verwaltung von Index- und Heapstrukturen durch SQL Server.

Thema

Seitenteilungen in einem Index Vorwrtszeiger in einem Heap Zeilenaktualisierung durch SQL Server Lschen von Zeilen durch SQL Server

Einstieg

In diesem Abschnitt wird beschrieben, wie SQL Server Indizes und Heaps verwaltet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird erlutert, wie SQL Server Indizes und Heaps verwaltet, wenn Zeilen eingefgt, aktualisiert und gelscht werden.

20

Unterrichtseinheit 6: Planen von Indizes

Seitenteilungen in einem Index


Thema
Beschreiben Sie das Konzept der Seitenteilung.
Indexseiten INSERT member (last name) INSERT member (last name) VALUES lastname = Jackson' VALUES lastname = Jackson' Nicht Blattebene

Einstieg

Das Einfgen einer Zeile in eine volle Seite kann eine Seitenteilung verursachen.

Akhtar Akhtar Martin Martin Akhtar Akhtar Ganio Ganio Jackson Lang Lang Smith Smith

Blattebene
Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Ganio Akhtar Ganio Akhtar Hall Barr Hall Barr Hart Barr Hart Barr Borm Borm Buhl Buhl Jackson Ganio Jackson Ganio Jones Hall Jones Hall Jones Hart Jones Hart Jones Jones Jones Jones Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith
(Schlsselwert)

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Ein gruppierter Index leitet eine eingefgte oder aktualisierte Zeile an eine bestimmte Seite weiter, die durch den gruppierten Schlsselwert festgelegt wird. Wenn in der Datenseite oder der Indexseite nicht mehr gengend Platz zur Aufnahme der Daten ist, wird in einem Vorgang, der als Seitenteilung bezeichnet wird, eine neue Seite hinzugefgt. Ungefhr die Hlfte der Daten verbleibt auf der alten Seite, und die andere Hlfte wird auf die neue Seite verschoben. Logisch folgt die neue Seite auf die ursprngliche Seite, physisch kann die neue Seite jedoch jeder vorhandenen Seite zugewiesen werden. Sind in einem Index sehr viele Seitenteilungen durchgefhrt worden, kann die Leistung durch ein Neuerstellen des Indexes verbessert werden. Anmerkung Wenn in einem gruppierten Index eine Seite geteilt wird, muss SQL Server die nicht gruppierten Indizes fr alle Zeilen, die auf die neue Seite verschoben wurden, nicht verwalten. Der Zeilenlokator identifiziert weiter den richtigen Speicherort im gruppierten Schlssel.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie.

Methodischer Hinweis

Weisen Sie darauf hin, dass der nicht gruppierte Index gendert werden muss, um Jackson hinzuzufgen, er aber nicht mit dem neuen Speicherort von Jones aktualisiert werden muss.

Unterrichtseinheit 6: Planen von Indizes

21

Vorwrtszeiger in einem Heap


Beschreiben Sie das Konzept des Vorwrtszeigers.

Thema

sysindexes

id

indid = 2
Akhtar Akhtar ... ... Martin Martin Seite 12 - Root

root
Nicht Nicht Nicht gruppierter gruppierter Blattebene Index Index

Einstieg

Seite 37

Seite 28

Wenn eine Zeile in einem Heap zu gro fr ihren ursprnglichen Speicherort wird, wird sie auf eine andere Seite verschoben.

Seite 41 Seite 51 Akhtar 4:706:01 Ganio 4:709:01 Akhtar 4:706:01 Ganio 4:709:01 Barr 4:705:03 Hall 4:709:04 Barr 4:705:03 Hall 4:709:04 Con 4:704:01 Jones 4:709:02 Con 4:704:01 Jones 4:709:02 Funk 4:706:02 Jones 4:708:03 Funk 4:706:02 Jones 4:708:03 Funk 4:704:02 Jones 4:707:03 Funk 4:704:02 Jones 4:707:03

Akhtar Martin Akhtar Martin UPDATE member UPDATE member Ganio Smith Ganio Smith SET Address = <something long> ... ... SET Address = <something long> ... ... WHERE lastname = 'Ota' WHERE lastname = 'Ota' Seite 61 Martin 4:708:01 Martin 4:708:01 Martin 4:706:04 Martin 4:706:04 Ota 4:707:02 Ota 4:707:02 Ota Phua 4:708:02 Phua 4:708:02 Rudd 4:705:01 Rudd 4:705:01

Seite 71 Blattebene Smith 4:706:03 (SchlsselSmith 4:706:03 Smith 4:708:04 Smith 4:708:04 wert) Smith 4:707:01 Smith 4:707:01 White 4:704:03 White 4:704:03 White 4:705:02 White 4:705:02

Heap
Seite 704 01 ... Conn 02 ... Funk 03 ... White ... ... ... ... ... ... File ID #4 Seite 705 01 ... Rudd 02 ... White 03 ... Barr ... ... ... ... ... ... Seite 706 01 ... Akhtar 02 ... Funk 03 ... Smith 04 ... Martin ... ... ... Seite 707 01 ... Smith 02 ... Ota 02 ... 03 ... Jones 04 ... Corets 05 ... Nash Seite 808 01 ... Martin 02 ... Phua 03 ... Jones 04 ... Smith ... ... ... Seite 709 01 ... Ganio 02 ... Jones 03 ... Hall ... ... ...Ota 04 ... ... ...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis In einem Heap gibt es keine Seitenteilungen. SQL Server verwendet eine andere Methode zur Behandlung von Aktualisierungen und Einfgungen, wenn Datenseiten voll sind.

Diese Folie enthlt Animationen. Im Abschnitt Hinweise fr den Kursleiter finden Sie Informationen zum Navigieren durch diese Folie.

Einfgung in einen Heap


Das Einfgen einer neuen Zeile in einen Heap kann keine Seitenteilung verursachen, weil eine neue Zeile berall eingefgt werden kann, wo gengend Platz ist.

Vorwrtszeiger
Wenn fr die Aktualisierung einer Zeile in einem Heap mehr Platz bentigt wird, als auf der betreffenden Seite verfgbar ist, wird die Zeile auf eine neue Datenseite verschoben. Am ursprnglichen Speicherort der Zeile bleibt ein Vorwrtszeiger stehen. Muss die Zeile mit dem Vorwrtszeiger erneut verschoben werden, wird der ursprngliche Zeiger gendert, sodass er auf den neuen Speicherort verweist. Durch den Vorwrtszeiger wird vermieden, dass nicht gruppierte Indizes gendert werden mssen. Wenn die verschobene Zeile aufgrund einer erneuten Aktualisierung so verkleinert wird, dass sie wieder an ihren ursprnglichen Platz passt, wird bei der Aktualisierung der Zeiger gelscht und der Datensatz wieder an seinem ursprnglichen Ort gespeichert.

Seitenteilungen in nicht gruppierten Indizes eines Heaps


Ein Einfgen oder Aktualisieren kann zwar in einem Heap keine Seitenteilung verursachen, wenn es in dem Heap jedoch einen nicht gruppierten Index gibt, kann es dort durch das Einfgen oder Aktualisieren zu einer Seitenteilung kommen.

22

Unterrichtseinheit 6: Planen von Indizes

Zeilenaktualisierung durch SQL Server


Beschreiben Sie die Auswirkungen einer Datenaktualisierung.

Thema

Einstieg

Viele Aktualisierungen haben keine Auswirkung auf die Struktur von Datenzeilen.

Aktualisierungen verursachen normalerweise keine Zeilenverschiebung Eine Aktualisierung kann ein Lschen mit anschlieendem Einfgen sein Batchaktualisierungen betreffen jeden Index nur einmal

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Viele Aktualisierungen haben keine Auswirkung auf die Struktur von Datenzeilen.

Aktualisierungen verursachen normalerweise keine Zeilenverschiebung


Aktualisierungen haben normalerweise nicht zur Folge, dass Zeilen verschoben werden mssen. Wenn der Datensatz durch die Aktualisierung nicht vergrert wird oder bei einer Vergrerung auf derselben Seite noch gengend Platz fr den Datensatz ist, ist keine Zeilenverschiebung erforderlich. Aktualisierungen generieren im Allgemeinen nur einen Protokolldatensatz.

Eine Aktualisierung kann ein Lschen mit anschlieendem Einfgen sein


Eine Aktualisierung, die eine Zeilenverschiebung verursacht, wird in folgenden Fllen wie ein Lschvorgang mit einem anschlieenden Einfgen protokolliert: Die Aktualisierung passt nicht auf eine Seite eines Heaps. Die Tabelle verfgt ber einen Aktualisierungstrigger. Die Tabelle ist fr eine Replikation markiert. Der Wert des Schlssels des gruppierten Indexes erfordert, dass die Zeile an einen anderen Speicherort verschoben wird. Wird ein Nachname zum Beispiel von Abercrombie in Yukish gendert, wird der Name in einem Telefonverzeichnis verschoben.

Batchaktualisierungen betreffen jeden Index nur einmal


Wenn mit einer einzigen SQL-Anweisung sehr viele Zeilen eingefgt, aktualisiert oder gelscht werden, werden die nderungen von SQL Server fr jeden Index vorsortiert, sodass die nderungen in der Reihenfolge des Indexes ausgefhrt werden. Diese Batchaktualisierung wird wesentlich schneller ausgefhrt als eine Reihe von Transact-SQL-Anweisungen fr denselben Vorgang.

Unterrichtseinheit 6: Planen von Indizes

23

Lschen von Zeilen durch SQL Server


Beschreiben Sie das Lschen von Zeilen.

Thema

Lschvorgnge erstellen Scheindatenstze Freigabe von Speicherbereich durch SQL Server Verkleinern von Dateien
Gruppierte Indexseiten werden als eine Einheit verschoben

Einstieg

Beim Lschen einer Zeile werden sowohl die Indexals auch die Datenseiten gendert.

Heapdatenstze werden einzeln verschoben

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Lschen von Zeilen wirkt sich sowohl auf die Index- als auch auf die Datenseiten aus.

Lschvorgnge erstellen Scheindatenstze


Zeilen, die aus der Blattebene eines Indexes gelscht werden, werden nicht sofort entfernt. Sie werden als ungltige Datenstze, so genannte Scheindatenstze markiert. Dieser Vorgang kann verhindern, dass benachbarte Datenstze gesperrt werden mssen. Er kann auerdem Sperrkonflikte fr ganze Datenbereiche verhindern. SQL Server startet regelmig einen speziellen Bereinigungsthread, der die Indizes nach vorhandenen Scheindatenstzen durchsucht und sie entfernt.

Freigabe von Speicherbereich durch SQL Server


Wenn die letzte Zeile einer Datenseite gelscht wird, wird die Speicherreservierung fr die gesamte Seite aufgehoben, es sei denn, es handelt sich um die letzte Seite in der Tabelle.

Lschen von Zeilen in einem Index


Nach dem Lschen einer Zeile kann der Speicherbereich in einem Index sofort von benachbarten Zeilen belegt werden, einige Lcken bleiben jedoch solange bestehen, bis der Index das nchste Mal neu erstellt wird.

Lschen von Zeilen in einem Heap


Gelschte Zeilen in einem Heap werden erst komprimiert, wenn der Speicherbereich fr eine Einfgung bentigt wird.

24

Unterrichtseinheit 6: Planen von Indizes

Methodischer Hinweis

Verkleinern von Dateien


Nachdem Datenstze gelscht wurden, kann eine Datei verkleinert werden. SQL Server verkleinert eine Datei, indem es Daten auf freie Seiten am Anfang der Datei verschiebt. Innerhalb eines Indexes verschiebt SQL Server ganze Seiten, sodass die Zeilen ihre korrekte sortierte Beziehung behalten. Seitenzeiger werden angepasst, damit die Verknpfung fr die verschobene Seite in der richtigen Reihenfolge in der Tabelle steht. Wenn es keinen gruppierten Index gibt, knnen einzelne Zeilen an jede beliebige freie Stelle in der Datei verschoben werden. Anmerkung Die Datenbankoption Automatisch verkleinern bietet die Mglichkeit, die Datenbank zu verkleinern, ohne dass ein manueller Eingriff erforderlich ist. Dies erfolgt fnf Minuten nach ihrem Start und anschlieend alle dreiig Minuten. Die Datei wird auf eine Gre verkleinert, bei der 25 Prozent der Datei aus nicht verwendetem Speicherplatz bestehen, oder auf die Gre, mit der die Datei erstellt wurde, je nachdem, welcher Wert grer ist.

Weisen Sie darauf hin, dass Zeilen in einem Heap sofort verschoben werden. Sie behalten nicht die Reihenfolge, in der sie eingefgt wurden.

Unterrichtseinheit 6: Planen von Indizes

25

Entscheiden, welche Spalten indiziert werden


Geben Sie eine bersicht ber die Themen dieses Abschnitts.

Thema

Verstehen der Daten Richtlinien fr die Indizierung Auswhlen des geeigneten gruppierten Indexes Untersttzen von Abfragen durch Indizierung Bestimmen der Selektivitt Bestimmen der Datendichte Bestimmen der Datenverteilung

Einstieg

Die Planung zweckmiger Indizes ist einer der wichtigsten Aspekte beim Optimieren der Abfrageleistung.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Planung zweckmiger Indizes ist einer der wichtigsten Aspekte beim Optimieren der Abfrageleistung. Dazu wird eine genaue Kenntnis der Indexstruktur und der Art und Weise der Datenverwendung vorausgesetzt.

26

Unterrichtseinheit 6: Planen von Indizes

Verstehen der Daten


Weisen Sie darauf hin, dass der erste Schritt beim Erstellen von Indizes darin besteht, die Daten und die Art des Zugriffs durch Benutzer zu kennen.

Thema

Der logische und physische Entwurf Die Dateneigenschaften Die Art der Verwendung der Daten
Die verschiedenen Arten der ausgefhrten Abfragen Die Hufigkeit von typischen Abfragen

Einstieg

Bevor Sie einen Index erstellen, sollten Sie sich zunchst ein genaues Wissen ber die Daten aneignen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bevor Sie einen Index erstellen, sollten Sie sich zunchst ein genaues Wissen ber die Daten aneignen; dazu gehren folgende Informationen: Der logische und physische Entwurf. Die Dateneigenschaften. Die Art der Verwendung der Daten. Um zweckmige und effektive Indizes zu entwerfen, mssen Sie die von Benutzern geschickten Abfragen analysieren. Eine schlechte Analyse der Art und Weise, wie Benutzer auf Daten zugreifen, hat eine langsame Verarbeitung von Abfragen oder sogar berflssige Sperren von Tabellen zur Folge. Sie sollten bei der Analyse des Datenzugriffs durch Benutzer zwei Punkte besonders beachten: Die verschiedenen Arten der ausgefhrten Abfragen. Die Hufigkeit von typischen Abfragen. Eine genaue Kenntnis der Datenanforderungen durch die Benutzer hilft Ihnen dabei zu entscheiden, welche Spalten indiziert und welche Indextypen erstellt werden sollten. Mglicherweise mssen Sie bei der einen Abfrage Geschwindigkeitsnachteile in Kauf nehmen, um bei einer anderen eine bessere Leistung zu erreichen.

Unterrichtseinheit 6: Planen von Indizes

27

Richtlinien fr die Indizierung


Erlutern Sie, welche berlegungen bei der Auswahl der zu indizierenden Spalten eine Rolle spielen.

Thema

Spalten, die indiziert werden sollten Primr- und Fremdschlssel Solche, die regelmig nach Bereichen durchsucht werden Solche, auf die regelmig in sortierter Reihenfolge zugegriffen wird Solche, die beim Aggregieren zu Gruppen zusammengefasst werden Spalten, die nicht indiziert werden sollten Solche, die nur selten in Abfragen referenziert werden Solche, die wenige eindeutige Werte enthalten Solche, die mit den Datentypen text, ntext oder image definiert sind

Einstieg

Beachten Sie bei der Indexerstellung auch die Umgebungsbedingungen, und bercksichtigen Sie, wie die Daten verteilt werden sollen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Fr welche Spalten ein Index erstellt werden sollte, ist von der jeweiligen Arbeitsumgebung sowie von den Eigenschaften und der Verwendung der Daten abhngig. Die Zweckmigkeit eines Indexes hngt unmittelbar damit zusammen, wie viel Prozent der Zeilen von einer Abfrage zurckgegeben werden. Ein geringer Prozentsatz bzw. eine hohe Selektivitt bedeuten eine grere Effizienz. Anmerkung Wenn Sie fr eine Spalte einen Index erstellen, wird diese Spalte als Indexspalte bezeichnet. Ein in einer Indexspalte enthaltener Wert wird als Schlsselwert bezeichnet. Methodischer Hinweis

Spalten, die indiziert werden sollten


Erstellen Sie Indizes fr Spalten, die hufig durchsucht werden, zum Beispiel fr: Primrschlssel Fremdschlssel oder Spalten, die hufig bei der Verknpfung von Tabellen verwendet werden. Spalten, die nach Schlsselwertebereichen durchsucht werden. Spalten, auf die in sortierter Reihenfolge zugegriffen wird. Spalten, die beim Aggregieren zu Gruppen zusammengefasst werden.

Stellen Sie folgende Frage: Knnen alle Spalten indiziert werden? Antwort: Ja, aber es wre nicht sehr effizient, alle Spalten zu indizieren. Stellen Sie folgende Frage: Kann eine einzige Spalte mehrfach indiziert werden? Antwort: Ja, aber das ist im Allgemeinen nicht effizient.

28

Unterrichtseinheit 6: Planen von Indizes

Spalten, die nicht indiziert werden sollten


Erstellen Sie fr folgende Spalten keinen Index: Spalten, die nur selten abgefragt werden. Spalten, die wenige eindeutige Werte enthalten. Beispielsweise wrde ein Index fr eine Spalte mit zwei Werten, wie mnnlich und weiblich, einen hohen Prozentsatz an Zeilen zurckgeben. Spalten, fr die der Datentyp text, ntext oder image definiert wurde. Spalten dieses Datentyps knnen nicht indiziert werden.

Unterrichtseinheit 6: Planen von Indizes

29

Auswhlen des geeigneten gruppierten Indexes


Erlutern Sie, wie der am besten geeignete Indextyp fr eine Datenbank bestimmt wird.

Thema

Hufig aktualisierte Tabellen


Ein gruppierter Index mit einer Identittsspalte behlt aktualisierte Seiten im Hauptspeicher

Einstieg

Bercksichtigen Sie bei der Auswahl des gruppierten Indexes, wie die Tabelle verwendet wird.

Sortieren
Ein gruppierter Index hlt die Daten vorsortiert

Spaltenlnge und Datentyp


Begrenzen Sie die Anzahl der Spalten Verringern Sie die Anzahl der Zeichen Verwenden Sie mglichst immer den kleinsten Datentyp

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Bercksichtigen Sie bei der Auswahl des gruppierten Indexes fr einzelne Tabellen, wie die jeweilige Tabelle verwendet wird.

Weisen Sie die Kursteilnehmer darauf hin, dass sie nicht automatisch den gruppierten Index fr den Primrschlssel verwenden sollen. Bercksichtigen Sie die Verwendung der Tabelle.

Hufig aktualisierte Tabellen


Prfen Sie beim Optimieren der Leistung fr Dateneingaben in einer hufig verwendeten Tabelle die Erstellung eines gruppierten Indexes fr eine Primrschlssel-Identittsspalte. Sie knnen die Geschwindigkeit erhhen, indem Sie fr Einfgungen standardmig einige Seiten am Ende der Tabelle verwenden. Durch den regelmigen Zugriff bleiben diese Seiten im Arbeitsspeicher.

Sortieren
Bei Tabellen, die hufig fr Berichte sortiert, fr Aggregationen gruppiert oder nach Datenbereichen durchsucht werden, ist ein gruppierter Index fr die Sortierspalte vorteilhaft. Die Verwendung eines gruppierten Indexes ist besonders geeignet, wenn viele Spalten der Tabelle zurckgegeben werden ein nicht gruppierter Index nicht praktikabel ist. Zum Beispiel ist bei einer Tabelle mit einer Versandliste ein gruppierter Index fr die Postleitzahl vorteilhaft, weil die Versandadressen in einer bestimmten Reihenfolge gedruckt und verwendet werden mssen.

30

Unterrichtseinheit 6: Planen von Indizes

Spaltenlnge und Datentyp


SQL Server verwendet den Wert des gruppierten Indexes als Zeilen-ID innerhalb der nicht gruppierten Indizes. Der Wert des gruppierte Indexes kann sich in einer Tabellenstruktur mehrfach wiederholen. Auf folgende Weise knnen Sie verhindern, dass umfangreiche gruppierte Indizes die ihnen zugeordneten nicht gruppierten Indizes vergrern und deren Verarbeitung verlangsamen: Begrenzen Sie die Anzahl der Spalten im gruppierten Index. Verringern Sie die durchschnittliche Anzahl der Zeichen, indem Sie den varchar-Datentyp statt dem char-Datentyp verwenden. Verwenden Sie mglichst immer den jeweils kleinsten Datentyp, z. B. tinyint statt int.

Unterrichtseinheit 6: Planen von Indizes

31

Untersttzen von Abfragen durch Indizierung


Erlutern Sie, warum es wichtig ist, die Suche einzuschrnken, und wie sie eingeschrnkt werden kann.

Thema

Verwenden von Suchargumenten Schreiben von guten Suchargumenten


Geben Sie in der Abfrage eine WHERE-Klausel an Stellen Sie sicher, dass die WHERE-Klausel die Zeilenanzahl begrenzt Stellen Sie sicher, dass es fr jede in der Abfrage referenzierte Tabelle einen Ausdruck gibt Verwenden Sie mglichst keine fhrenden Platzhalterzeichen

Einstieg

Die Abfrageleistung ist von der Qualitt Ihres Indexentwurfs und der Selektivitt Ihrer Abfragen abhngig. Schreiben Sie immer Abfragen, die eine Suche einschrnken.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Abfrageleistung ist davon abhngig, wie gut Sie Ihre Indizes entworfen haben. Ebenso wichtig ist es, dass Sie Ihre Abfragen mit einem Suchargument versehen, das die Vorteile einer indizierten Spalte nutzen kann.

Verwenden von Suchargumenten


Ein Suchargument schrnkt eine Suche auf eine exakte bereinstimmung, einen Wertebereich oder eine Kombination aus mindestens zwei Elementen, die durch einen AND-Operator verknpft sind, ein. Ein Suchargument enthlt einen konstanten Ausdruck, der mit Hilfe eines Operators auf eine Spalte angewendet wird. Durch die Verwendung von Suchargumenten beim Schreiben von Abfragen erhhen Sie die Wahrscheinlichkeit, dass der Abfrageoptimierer einen Index verwenden kann.

Schreiben von guten Suchargumenten


Ein Ausdruck, der eine Suche nicht einschrnkt, wird als Nicht-Suchargument betrachtet. In vielen Fllen empfiehlt es sich, Abfragen neu zu schreiben, um Nicht-Suchargumente in Suchargumente zu konvertieren. Sie haben folgende Mglichkeiten, die Suche einzuschrnken: Geben Sie in der Abfrage eine WHERE-Klausel an. Stellen Sie sicher, dass die WHERE-Klausel die Zeilenanzahl begrenzt. Stellen Sie sicher, dass es fr jede in der Abfrage referenzierte Tabelle einen Ausdruck gibt. Verwenden Sie mglichst keine fhrenden Platzhalterzeichen.

32

Unterrichtseinheit 6: Planen von Indizes

Die folgende Tabelle enthlt Beispiele fr gute Suchargumente:


Gute Suchargumente
WHERE cust_id = 47635 WHERE date BETWEEN '07/23/2000' AND '07/30/2000' WHERE lastname LIKE 'Gre%'

Abfrage Schrnkt die Suche ein, weil cust_id eindeutig ist. Schrnkt die Suche auf einen kleinen Datenbereich ein. Schrnkt die Suche auf Nachnamen ein, die mit den Buchstaben Gre beginnen.

Unterrichtseinheit 6: Planen von Indizes

33

Bestimmen der Selektivitt


Erlutern Sie das Konzept der Selektivitt.

Thema

Einstieg

Selektivitt ist ein Konzept und ein Begriff, der immer wieder in Verbindung mit Indizes verwendet wird.

member_no last_name first_name member_no last_name first_name 1000 11 Randall Joshua Anzahl der Kriterien erfllenden Zeilen Randall Joshua = 10000 = 10% 22 Flood Kathie Vollstndige Anzahl der Zeilen Flood Kathie in einer Tabelle .. SELECT * SELECT * .. FROM member FROM member WHERE member_no > 8999 .. WHERE member_no > 8999 10000 Anderson Bill Anderson Bill 10000

Hohe Selektivitt

member_no last_name first_name member_no last_name first_name 9000 11 Randall Joshua Anzahl der Kriterien erfllenden Zeilen Joshua Randall = 10000 = 90% 22 Flood Kathie Vollstndige Anzahl der Zeilen Flood Kathie in einer Tabelle .. SELECT * SELECT * .. FROM member FROM member WHERE member_no < 9001 .. WHERE member_no < 9001 10000 Anderson Bill Anderson Bill 10000

Niedrige Selektivitt

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Das Beispiel in der Folie kann fr die credit-Datenbank nicht ausgefhrt werden.

Selektivitt ist ein Konzept und ein Begriff, der immer wieder in Verbindung mit Indizes verwendet wird. Bei der Festlegung der zu indizierenden Spalten und der Auswahl des zu erstellenden Indextyps sollten Sie den Grad der Selektivitt der Datenwerte bercksichtigen.

Definieren der Selektivitt


Selektivitt leitet sich von dem Prozentsatz der Zeilen in einer Tabelle ab, auf die mit einer Abfrage zugegriffen oder die von einer Abfrage zurckgegeben werden. Der Abfrageoptimierer bestimmt die Selektivitt fr SELECT-, UPDATE- und DELETE-Anweisungen. Erstellen Sie Indizes in folgenden Fllen: Fr Spalten, die hufig in Verknpfungsvorgngen oder in der WHEREKlausel referenziert werden. Fr Daten mit einem hohen Grad an Selektivitt.

Hohe Selektivitt und niedrige Selektivitt


Hohe Selektivitt bedeutet, dass das Suchkriterium die Anzahl der zurckgegebenen Zeilen auf einen mglichst niedrigen Prozentsatz der mglichen Gesamtzeilenanzahl begrenzt. Hchste Selektivitt ist erreicht, wenn nur eine einzige Zeile zurckgegeben wird. Niedrige Selektivitt bedeutet, dass das Suchkriterium einen hohen Prozentsatz der Zeilen in der Tabelle zurckgibt.

Schtzen der Selektivitt


Sie knnen den Grad der Selektivitt einer Abfrage bestimmen, indem Sie die Anzahl der zurckgegebenen Zeilen relativ zur Gesamtanzahl der Zeilen in der Tabelle fr eine bestimmte Abfrage schtzen.

34

Unterrichtseinheit 6: Planen von Indizes

Beispiel 1

In diesem Beispiel gibt die Abfrage, unter der Voraussetzung, dass die member-Tabelle 10.000 Zeilen enthlt und die Mitgliedsnummern im Bereich von 1 bis 10.000 liegen (alles eindeutige Werte), eine einzige Zeile zurck.
SELECT * FROM member WHERE member_no = 8999

Beispiel 2

In diesem Beispiel gibt die Abfrage, unter der Voraussetzung, dass die member-Tabelle 10.000 Zeilen enthlt und die Mitgliedsnummern im Bereich von 1 bis 10.000 liegen (alles eindeutige Werte), 999 Zeilen zurck.
SELECT * FROM member WHERE member_no > 9001

Beispiel 3

In diesem Beispiel gibt die Abfrage, unter der Voraussetzung, dass die member-Tabelle 10.000 Zeilen enthlt und die Mitgliedsnummern im Bereich von 1 bis 10.000 liegen (alles eindeutige Werte), 9.000 Zeilen zurck.
SELECT * FROM member WHERE member_no < 9001

Unterrichtseinheit 6: Planen von Indizes

35

Bestimmen der Datendichte


Erlutern Sie das Konzept der Datendichte.

Thema

Einstieg

Das Konzept der Dichte steht in engem Zusammenhang mit dem der Selektivitt. Bei der Festlegung der zu indizierenden Spalten sollten Sie die Dichte der Daten berprfen.

last_name first_name last_name first_name Randall Joshua Randall Joshua .. .. .. Randall Randall Randall Randall .. .. .. Ota Ota .. .. .. Lani Lani Cynthia Cynthia Tristan Tristan

Hohe Dichte
SELECT * SELECT * FROM member FROM member WHERE last_name = WHERE last_name = Randall Randall

Niedrige Dichte
SELECT * SELECT * FROM member FROM member WHERE last_name = Ota WHERE last_name = Ota

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Das Beispiel in der Folie kann fr die credit-Datenbank nicht ausgefhrt werden.

Das Konzept der Dichte steht in engem Zusammenhang mit dem Konzept der Selektivitt. Bei der Festlegung der zu indizierenden Spalten sollten Sie die Dichte der Daten berprfen.

Definieren der Dichte


Die Dichte bezeichnet den durchschnittlichen Prozentsatz doppelter Zeilen in einem Index. Wenn die Selektivitt der Daten oder der Abfrage sehr niedrig ist, fhrt das zu einer sehr hohen Dichte. Ein Index mit sehr vielen doppelt vorkommenden Werten hat eine hohe Dichte. Ein Index fr die lastname-Spalte kann zum Beispiel eine sehr hohe Dichte haben. Ein eindeutiger Index hat dagegen eine niedrige Dichte. Das gilt zum Beispiel fr einen Index fr die Sozialversicherungsnummer, die Fhrerscheinnummer oder fr einen zusammengesetzten Index aus Vorund Nachname.

Bestimmen der Datendichte


Bercksichtigen Sie bei der Bestimmung der Datendichte, dass die Dichte eng mit den jeweiligen Datenelementen zusammenhngt. Die Dichte kann variieren. Betrachten wir zum Beispiel einen Index fr die lastname-Spalte. Datenelemente dieses Indexes sind fr einen weit verbreiteten Nachnamen wie Randall sehr dicht, whrend sie fr einen ungewhnlichen Nachnamen wie Ota eher niedrig ist.

36

Unterrichtseinheit 6: Planen von Indizes

Auswirkung der Dichte auf den Abfrageplan


Weil Daten nicht gleichmig verteilt sind, ist offen, ob der Abfrageoptimierer einen Index verwendet oder nicht. In dem in der Abbildung gezeigten Beispiel hat der Abfrageoptimierer zwei Mglichkeiten: Er kann einen Tabellenscan zum Abrufen des Nachnamens Randall verwenden. Er kann einen Index fr den Zugriff auf den Nachnamen Ota verwenden.

Unterrichtseinheit 6: Planen von Indizes

37

Bestimmen der Datenverteilung


Erlutern Sie das Konzept der Datenverteilung und die verschiedenen Methoden zum berprfen der Datenverteilung.

Thema

Standardverteilung der Werte

Anzahl der Nachnamen A-E F-J K-O P-U Nachname V-Z

Einstieg

Die Datenverteilung steht im Zusammenhang mit dem Konzept der Dichte. Bei der Bestimmung der Datendichte sollten Sie auch die Verteilung der Daten berprfen.

Gleichmige Verteilung der Werte

Anzahl der Nachnamen A-B C-F G-K L-N Nachname O-Z

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Datenverteilung steht im Zusammenhang mit dem Konzept der Dichte. Bei der Bestimmung der Datendichte sollten Sie auch die Verteilung der Daten berprfen.

Definieren der Datenverteilung


Die Datenverteilung zeigt die Datenmenge fr einen Datenbereich in einer bestimmten Tabelle und die Anzahl der Zeilen in diesem Bereich an. Wenn eine indizierte Spalte nur wenige eindeutige Werte enthlt, kann die Datenverteilung das Abrufen von Daten verlangsamen. Ein Telefonverzeichnis, das alphabetisch nach Nachnamen sortiert ist, kann zum Beispiel sehr viele Telefonteilnehmer mit den Nachnamen Randall oder Jones enthalten.

Standardverteilung oder gleichmige Verteilung


Bei einer Standardverteilung bleiben die Schlsselwertebereiche konstant, whrend sich die Anzahl pro Bereich ndert. Bei einer gleichmigen Verteilung kann der Abfrageoptimierer sehr leicht die Selektivitt einer Abfrage bestimmen, indem er die Anzahl der qualifizierten Zeilen als Prozentsatz der Gesamtzeilenanzahl in der Tabelle schtzt.

Beziehung zwischen Dichte und Datenverteilung


hnlich wie bei der Dichte knnen Datenelemente des Indexes in der Art und Weise, wie die Daten verteilt sind, variieren. Normalerweise sind Daten nicht gleichmig verteilt. Wenn die member-Tabelle zum Beispiel 10.000 Zeilen enthlt und die lastname-Spalte einen Index besitzt, sind die Nachnamen normalerweise nicht gleichmig verteilt.

38

Unterrichtseinheit 6: Planen von Indizes

Schtzen des Prozentsatzes der zurckgegebenen Zeilen


In vielen Fllen knnen Sie den Prozentsatz der Daten, die in einem Resultset zurckgegeben werden, schtzen. Ist das Kriterium zum Beispiel mnnlich/weiblich, kann fr das Resultset fr weiblich ein Satz von 50 % angenommen werden. Beim Schtzen des Prozentsatzes der Zeilen, die mit Werten wie Nachnamen, Stdtenamen oder anderen geografischen Daten zurckgegeben werden, ist eine genaue Kenntnis der Daten sehr wichtig, weil die Datenverteilung in unterschiedlichen Umgebungen stark variieren kann. Beispiel Mit dieser Abfrage wird die Verteilung (Anzahl doppelter Daten) von Spaltenwerten in einer vorhandenen Datenbank gezeigt. Die Abfrage in diesem Beispiel gibt jeden Wert nur einmal zurck, jedoch mit einem Zhler, der angibt, wie oft der jeweilige Wert in der Tabelle vorkommt.
SELECT column, count(*) AS 'Data Count' FROM table GROUP BY column ORDER BY 'Data count' DESC

Methodischer Hinweis
Das Beispiel in der Folie kann fr die credit-Datenbank nicht ausgefhrt werden.

Unterrichtseinheit 6: Planen von Indizes

39

Empfohlene Methoden
Geben Sie eine bersicht ber die empfohlenen Methoden zum Planen von Indizes.

Thema

Erstellen Sie Indizes fr Spalten, die Tabellen verknpfen Erstellen Sie Indizes fr Spalten, die Tabellen verknpfen Erstellen Sie Indizes, um Eindeutigkeit zu gewhrleisten Erstellen Sie Indizes, um Eindeutigkeit zu gewhrleisten Lschen Sie Indizes, die nicht bentigt werden Lschen Sie Indizes, die nicht bentigt werden Vermeiden Sie lange und gruppierte Schlssel Vermeiden Sie lange und gruppierte Schlssel Verwenden Sie einen gruppierten Index, um die Sortierung Verwenden Sie einen gruppierten Index, um die Sortierung und Suchvorgnge in Bereichen zu untersttzen und Suchvorgnge in Bereichen zu untersttzen Erstellen Sie Indizes, die die Suchargumente untersttzen Erstellen Sie Indizes, die die Suchargumente untersttzen

Einstieg

Dies sind die empfohlenen Methoden zum Planen von Indizes.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die im Folgenden aufgefhrten Methoden sollen Sie bei der Planung effektiver Indizes untersttzen: Erstellen Sie Indizes fr Spalten, die Tabellen miteinander verknpfen, einschlielich der Primr- bzw. Fremdschlssel. Erstellen Sie eindeutige Indizes, um Eindeutigkeit in einer Spalte oder Spaltengruppe zu gewhrleisten. berprfen Sie die Indizes, und lschen Sie alle Indizes, die nicht bentigt werden. Indizes beanspruchen Festplattenspeicherplatz und Zeit fr deren Verwaltung. Datenbanken mit sehr vielen Einfgevorgngen sollten wenige Indizes enthalten. Datenbanken mit sehr vielen Lesevorgngen sollten mehr Indizes enthalten. Schlieen Sie mglichst keine unntigen Spalten in den gruppierten Index ein. Verwenden Sie mglichst nur kleine Datentypen, z. B. varchar statt char. Verwenden Sie einen gruppierten Index, um die Sortierung und Suchvorgnge in Bereichen zu untersttzen. Wenn Sie eine Tabelle fr das Abrufen von Daten optimieren, sollte der gruppierte Index das Abrufen von Datensatzgruppen untersttzen. Whlen Sie die Spalte bzw. die Spalten fr den gruppierten Schlssel aus, der Daten in einer hufig bentigten Reihenfolge sortiert bzw. der Datenstze gruppiert, auf die gemeinsam zugegriffen werden muss. Erstellen Sie Indizes, die die Suchargumente allgemeiner Abfragen untersttzen. Spalten mit einer sehr hohen Selektivitt sind sehr gut fr Indizes geeignet. Spalten mit einer sehr hohen Dichte eignen sich dagegen nicht besonders gut fr Indizes.

40

Unterrichtseinheit 6: Planen von Indizes

bungseinheit A: Bestimmen der Indizes fr eine Tabelle


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit verwenden Sie zwei Methoden zum Bestimmen der Indexarchitektur einer Tabelle.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Verwenden der gespeicherten Systemprozedur sp_help zum Bestimmen der Indexarchitektur einer Tabelle. Abfragen der sysindexes-Tabelle zum Identifizieren der Indexarchitektur einer Tabelle.

Voraussetzungen
Fr diese bungseinheit bentigen Sie die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L06 befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\RestoreCredit.cmd. Mit dieser Befehlsdatei wird die credit-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Unterrichtseinheit 6: Planen von Indizes

41

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 15 Minuten

42

Unterrichtseinheit 6: Planen von Indizes

bung 1 Identifizieren von Indizes mit Hilfe von sp_help


In dieser bung verwenden Sie die gespeicherte Systemprozedur sp_help zum Bestimmen der Indexarchitektur einer Tabelle. So verwenden Sie sp_help In diesem Verfahren verwenden Sie die gespeicherte Systemprozedur sp_help, um die Namens-, Typ- und Schlsselspalten des Indexes einer Tabelle zu bestimmen. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Gruppe der Administratoren von Microsoft Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf credit. 4. ffnen Sie das Skript C:\Moc\2328A\Labfiles\L06\Inspect_corporation.sql, berprfen Sie es, und fhren Sie es dann aus. Dieses Skript verwendet sp_help, um Informationen zur corporationTabelle zurckzugeben. Diese gespeicherte Prozedur gibt sieben Datenraster zurck. 5. Navigieren Sie zum sechsten Raster mit dem Namen index_name. Wie heien die Indizes in der corporation-Tabelle? Die corporation-Tabelle besitzt zwei Indizes: corporation_ident und corporation_region_link. ____________________________________________________________ ____________________________________________________________ Ist der Primrschlssel der corporation-Tabelle ein gruppierter oder ein nicht gruppierter Index? Der Primrschlssel ist ein gruppierter Index mit dem Namen corporation_ident. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 6: Planen von Indizes

43

bung 2 Anzeigen von Eintrgen in der sysindexes-Tabelle


In dieser bung fragen Sie die sysindexes-Systemtabelle ab und identifizieren Indizes. So zeigen Sie die sysindexes-Systemtabelle an In diesem Verfahren fhren Sie ein Skript aus, das die sysindexes-Systemtabelle abfragt. 1. ffnen Sie das Skript C:\Moc\2328A\Labfiles\L06\Inspect_sysindexes.sql, berprfen Sie es, und fhren Sie es dann aus. Dieses Skript fragt die Tabellen sysobjects und sysindexes nach benutzererstellten Tabellen ab, sortiert nach dem Tabellennamen. Welche Tabellen besitzen keinen gruppierten Index? Woran erkennen Sie das? Die Tabellen charge, member, provider und status besitzen keine gruppierten Indizes. Der Wert 0 fr indid zeigt einen Heap an. ____________________________________________________________ ____________________________________________________________ Welche Indextypen besitzt die corporation-Tabelle? Sowohl gruppierte als auch nicht gruppierte Indizes. ____________________________________________________________ ____________________________________________________________ 2. berprfen Sie die Spaltennamen in der sysindexes-Tabelle. Wie viele Zeilen enthlt die member-Tabelle? Wie viele Seiten werden verwendet? Der Wert fr die Spalte rows lautet 10000. Der Wert fr die Spalte used lautet 192. ____________________________________________________________ ____________________________________________________________ Wie findet SQL Server den Stamm eines Indexes bzw. die erste IAM-Seite in einem Heap? Diese Informationen befinden sich in den Spalten root und FirstIAM der sysindexes-Tabelle. ____________________________________________________________ ____________________________________________________________

44

Unterrichtseinheit 6: Planen von Indizes

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Einfhrung in Indizes Indexarchitektur Abrufen von gespeicherten Daten durch SQL Server Verwaltung von Index- und Heapstrukturen durch SQL Server Entscheiden, welche Spalten indiziert werden

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Wie findet SQL Server in einer Kundentabelle ohne Indizes die Zeile fr die Kundin mit dem Namen Eva Corets? SQL Server muss einen Tabellenscan ausfhren und alle Zeilen in der Tabelle lesen, um die gesuchte Zeile zu finden.

2. Wie viele gruppierte Indizes knnen fr eine Tabelle erstellt werden? Einer. Der gruppierte Index definiert den physischen Speicher der Datenseiten, und die gesamten Tabellendaten werden an einem einzigen Ort gespeichert.

3. Wie identifiziert ein nicht gruppierter Index die bergeordneten Zeilen in einer Tabelle mit einem gruppierten Index? Wie identifiziert ein nicht gruppierter Index die Datenzeilen in einer Tabelle, die keinen gruppierten Index besitzt? Wenn ein gruppierter Index vorhanden ist, speichert der nicht gruppierte Index den Wert des gruppierten Indexes fr jede indizierte Zeile. Ist kein gruppierter Index vorhanden, speichert der nicht gruppierte Index die Datei-ID, Seitennummer und Zeilen-ID der Datenzeile.

Unterrichtseinheit 6: Planen von Indizes

45

4. Die Erweiterung eine Feldes, das zu keinem Index gehrt, verursacht eine Seitenteilung. Durch die Seitenteilung wird die Zeile auf eine neue Seite verschoben. Wie wirkt sich diese Verschiebung auf die nicht gruppierten Indizes in der Tabelle aus? Es gibt keine Auswirkungen auf die nicht gruppierten Indizes. Wenn es einen gruppierten Index gab, bleibt der gruppierte Indexwert unverndert. Der nicht gruppierte Index zeigt weiter auf die Zeile, weil sich der gruppierte Schlssel nicht gendert hat. Wenn es keinen gruppierten Index gibt, steht jetzt an der alten Position des Datensatzes ein Vorwrtszeiger, der auf die neue Position des Datensatzes verweist. In keinem der beiden Flle muss der nicht gruppierte Index gendert werden.

5. Sie beabsichtigen, fr die Spalten company name, last name und first name einer Tabelle einen zusammengesetzten, gruppierten Index zu erstellen. Welche wichtigen Aspekte mssen Sie bei der Erstellung dieses Indexes bercksichtigen und warum? Gibt es eine bessere Lsung? Der Schlssel des gruppierten Indexes sollte mglichst klein sein. Je grer der Schlsselwert eines gruppierten Indexes ist, desto strker wirkt er sich auf alle nicht gruppierten Indizes aus. Je umfangreicher der gruppierte Index ist, desto geringer ist seine Effektivitt. Je strker der Umfang der Schlsselwerte zunimmt, desto mehr Speicherplatz wird fr die Werte pro Seite bentigt; die Seite beinhaltet dann weniger Schlsselwerte, was dazu fhrt, dass die Struktur des gruppierten Indexes (der B-Baum) umfangreicher wird. Je grer der gruppierte Index wird (je mehr Nicht-Blattebenen vorhanden sind), desto mehr E/A-Zyklen sind zum Durchsuchen der Indexarchitektur erforderlich. Auerdem ist es mglicherweise vorteilhafter, anstelle eines eindeutigen zusammengesetzten Schlssels einen nicht gruppierten Index oder mehrere Indizes zu verwenden. Eine bessere Lsung zur Indeximplementierung knnte darin bestehen, den gruppierten Index fr eine Spalte, die die Kunden-ID enthlt (sofern vorhanden), oder die Spalte last name (Nachname) zu erstellen. Wenn keine Spalte fr die Kunden-ID vorhanden ist, sollten Sie eventuell die IDENTITY-Eigenschaft verwenden oder eine neue Spalte mit Schlsselwerten hinzufgen, die sich aus Daten zusammensetzen, die aus den einzelnen Zeilen extrahiert werden.

Unterrichtseinheit 6: Planen von Indizes

This page is intentionally left blank.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes


Inhalt bersicht Erstellen von Indizes Arbeiten mit den CREATE INDEXOptionen Verwalten von Indizes bungseinheit A: Erstellen und Verwalten von Indizes Einfhrung in die Arbeit mit Statistiken Abfragen der sysindexes-Tabelle Einrichten von Indizes mit Hilfe des Indexoptimierungs-Assistenten Leistungsaspekte Empfohlene Methoden bungseinheit B: Anzeigen von Indexstatistiken Lernzielkontrolle 1 2 13 18 27 37 48 50 53 54 56 65

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

iii

Hinweise fr den Kursleiter


Prsentation: 60 Minuten bungseinheit: 60 Minuten In dieser Unterrichtseinheit erhalten die Kursteilnehmer eine bersicht ber das Erstellen und Verwalten von Indizes mit den CREATE INDEX-Optionen. Es wird erlutert, wie Indizes mit Wartungsverfahren physisch gendert werden. In der Unterrichtseinheit werden Wartungstools behandelt und die Verwendung von Statistiken in Microsoft SQL Server 2000 beschrieben. Darber hinaus werden Mglichkeiten aufgezeigt, um zu prfen, ob Indizes verwendet werden, und es wird erklrt, wie festgestellt werden kann, ob die Indizes eine optimale Leistung aufweisen. Die Unterrichtseinheit schliet mit einer Erklrung, wann der Indexoptimierungs-Assistent eingesetzt werden sollte. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von eindeutigen oder zusammengesetzten Indizes und indizierten Sichten. Verwenden der CREATE INDEX-Optionen. Erlutern, wie Indizes ber einen lngeren Zeitraum verwaltet werden. Erlutern, wie mit dem Abfrageoptimierer Statistiken erstellt, gespeichert, verwaltet und verwendet werden, um Abfragen zu optimieren. Abfragen der sysindexes-Tabelle. Erlutern, wie der Indexoptimierungs-Assistent arbeitet und wann er verwendet werden sollte. Erlutern der Leistungsaspekte, die Auswirkungen auf das Erstellen und Verwalten von Indizes haben.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_07.ppt Die Beispieldatei C:\Moc\2328A\Demo\D07_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheiten durch.

iv

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Erstellen von Indizes Erlutern Sie die Anweisungen CREATE INDEX und DROP INDEX, und erklren Sie die Vorteile des Definierens eindeutiger oder zusammengesetzter Indizes. Erklren Sie, dass es empfehlenswert ist, zunchst Informationen zu vorhandenen Indizes abzurufen, bevor die Kursteilnehmer Indizes erstellen, ndern oder lschen. Arbeiten mit CREATE INDEX-Optionen Erlutern Sie die Verwendung der Option FILLFACTOR. Betonen Sie, wie wichtig es ist, die Option FILLFACTOR zusammen mit der Option PAD_INDEX zu verwenden, um langfristig die Einfge- und Aktualisierungsleistung bei Tabellen zu optimieren, die Indizes enthalten. Verwalten von Indizes Erlutern Sie, dass Indizes von Zeit zu Zeit verwaltet werden mssen, da die Daten fragmentiert werden, sobald die Tabellen grer werden. Erklren Sie, wie die DBCC SHOWCONTIG-Anweisung dabei hilft, die Indexleistung beizubehalten. Weisen Sie anschlieend darauf hin, dass die Option DROP_EXISTING verwendet wird, um vorhandene Indizes zu verwalten. Mit dieser Option wird die Indexdefinition gendert und das erneute Erstellen von Indizes beschleunigt. Einfhrung in die Arbeit mit Statistiken Erlutern Sie, in welcher Weise der Abfrageoptimierer Statistiken verwendet, um zu ermitteln, ob ein Index ntzlich ist. Erklren Sie, wie statistische Daten gesammelt, gespeichert, erstellt, aktualisiert und angezeigt werden. Betonen Sie, wie wichtig das Vorhandensein von aktuellen Statistiken ist. Abfragen der sysindexes-Tabelle Erlutern Sie, wie die sysindexes-Tabelle abgefragt wird, um zustzlich zur Statistik fr jeden Index Informationen zur Tabelle und zum Index abzurufen. Besprechen Sie die partielle Liste mit Informationen, die eine Abfrage zurckgeben kann. Einrichten von Indizes mit Hilfe des Indexoptimierungs-Assistenten Stellen Sie den Indexoptimierungs-Assistenten vor, und erklren Sie, wann der Assistent verwendet werden sollte. Besprechen Sie die Aspekte und Richtlinien, die beim Verwenden des Assistenten bercksichtigt werden sollten. Leistungsaspekte Erlutern Sie die Leistungsaspekte, die Auswirkungen auf das Erstellen und Verwalten von Indizes haben.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheiten in dieser Unterrichtseinheit hngen auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheiten


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr diese Unterrichtseinheit.

Anforderung zum Einrichten der bungseinheit A


Die bungseinheit in dieser Unterrichtseinheit setzt voraus, dass sich die ClassNorthwind-Datenbank in dem fr diese bungseinheit erforderlichen Zustand befindet. Um die Kursteilnehmercomputer so vorzubereiten, dass sie dieser Anforderung entsprechen, fhren Sie eine der folgenden Aktionen durch: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore07A.cmd.

Anforderung zum Einrichten der bungseinheit B


Die bungseinheit in dieser Unterrichtseinheit setzt voraus, dass sich die ClassNorthwind-Datenbank in dem fr diese bungseinheit erforderlichen Zustand befindet. Um die Kursteilnehmercomputer so vorzubereiten, dass sie dieser Anforderung entsprechen, fhren Sie eine der folgenden Aktionen durch: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore07B.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore07A.cmd ausfhren, damit sichergestellt ist, dass die erste bungseinheit ordnungsgem durchgefhrt werden kann. Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore07B.cmd ausfhren, damit sichergestellt ist, dass die zweite bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheiten


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

This page is intentionally left blank.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Erstellen von Indizes Arbeiten mit CREATE INDEX-Optionen Verwalten von Indizes Einfhrung in die Arbeit mit Statistiken Abfragen der sysindexes-Tabelle Einrichten von Indizes mit Hilfe des IndexoptimierungsAssistenten Leistungsaspekte

Einstieg

In dieser Unterrichtseinheit lernen Sie, wie Indizes erstellt und verwaltet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie eine Datenbank programmieren, mchten Sie ntzliche Indizes erstellen, die Ihnen einen schnellen Zugriff auf Daten ermglichen. Mit Hilfe von Microsoft Windows 2000 knnen Sie Indizes und Statistiken erstellen und verwalten. Wenn Sie den Indexoptimierungs-Assistent verwenden, erstellt Microsoft SQL Server 2000 Indizes, analysiert Ihre Abfragen und ermittelt die Indizes, die erstellt werden sollten. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von eindeutigen oder zusammengesetzten Indizes und indizierten Sichten. Verwenden der CREATE INDEX-Optionen. Erlutern, wie Indizes ber einen lngeren Zeitraum verwaltet werden. Erlutern, wie mit dem Abfrageoptimierer Statistiken erstellt, gespeichert, verwaltet und verwendet werden, um Abfragen zu optimieren. Abfragen der sysindexes-Tabelle. Erlutern, wie der Indexoptimierungs-Assistent arbeitet und wann er verwendet werden sollte. Erlutern der Leistungsaspekte, die Auswirkungen auf das Erstellen und Verwalten von Indizes haben.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen von Indizes


Stellen Sie die Themen zum Erstellen von Indizes vor.

Thema

Einstieg

Erstellen und Lschen von Indizes Erstellen eindeutiger Indizes Erstellen zusammengesetzter Indizes Erstellen von Indizes fr berechnete Spalten Abrufen von Informationen zu vorhandenen Indizes

Da Sie nun mit den unterschiedlichen Architekturen von Indizes vertraut sind, wollen wir uns mit dem Erstellen von Indizes befassen und untersuchen, wie Informationen zu vorhandenen Indizes abgerufen werden knnen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Da Sie nun mit den unterschiedlichen Architekturen von Indizes vertraut sind, wollen wir uns mit dem Erstellen und Lschen von Indizes befassen und untersuchen, wie Informationen zu vorhandenen Indizes abgerufen werden knnen.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen und Lschen von Indizes


Geben Sie eine bersicht ber die CREATE INDEXAnweisung und die DROP INDEX-Anweisung.

Thema

Verwenden der CREATE INDEX-Anweisung


Fr Tabellen mit PRIMARY KEY- oder UNIQUEEinschrnkung werden Indizes automatisch erstellt Indizes knnen unter bestimmten Voraussetzungen auch fr Sichten erstellt werden
USE Northwind USE Northwind CREATE CLUSTERED INDEX CL_lastname CREATE CLUSTERED INDEX CL_lastname ON employees(lastname) ON employees(lastname)

Einstieg

Zum Erstellen von Indizes verwenden Sie die CREATE INDEX-Anweisung und zum Entfernen von Indizes die DROP INDEX-Anweisung.

Verwenden der DROP INDEX-Anweisung


USE Northwind USE Northwind DROP INDEX employees.CL_lastname DROP INDEX employees.CL_lastname

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zum Erstellen von Indizes verwenden Sie die CREATE INDEX-Anweisung und zum Lschen von Indizes die DROP INDEX-Anweisung. Anmerkung Um eine der beiden Anweisungen in einer Datenbank anwenden zu knnen, mssen Sie der Besitzer der jeweiligen Tabelle sein.

Verwenden der CREATE INDEX-Anweisung


Verwenden Sie zum Erstellen von Indizes die CREATE INDEX-Anweisung. Sie knnen auch den Indexerstellungs-Assistenten von SQL Server Enterprise Manager verwenden. Wenn Sie fr eine oder mehrere Spalten einer Tabelle einen Index erstellen, sollten Sie die folgenden Aspekte und Richtlinien bercksichtigen: Wenn fr eine Tabelle eine PRIMARY KEY- oder UNIQUE-Einschrnkung erstellt wird, werden von SQL Server automatisch Indizes erstellt. Das Definieren einer PRIMARY KEY- oder UNIQUE-Einschrnkung ist dem Erstellen von Standardindizes vorzuziehen. Um eine CREATE INDEX-Anweisung ausfhren zu knnen, mssen Sie der Besitzer der Tabelle sein. Indizes knnen fr Sichten erstellt werden. Indexinformationen werden von SQL Server in der sysindexes-Systemtabelle gespeichert. Bevor Sie fr eine Spalte einen Index erstellen, mssen Sie ermitteln, ob fr diese Spalte bereits Indizes vorhanden ist. Sorgen Sie dafr, dass Ihre Indizes nicht zu gro werden, indem Sie sie fr kleine Spalten definieren. Weniger umfangreiche Indizes sind normalerweise effizienter als Indizes mit umfangreicheren Schlsselwerten.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Legen Sie bei der Spaltenauswahl Eindeutigkeit zugrunde, sodass jedes Schlsselwort eine geringe Anzahl von Zeilen identifiziert. Wenn Sie einen gruppierten Index erstellen, werden alle vorhandenen nicht gruppierten Indizes neu erstellt. Syntax CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [WITH [PAD_INDEX ] [[,] FILLFACTOR = fillfactor ] [[,] IGNORE_DUP_KEY ] [[,] DROP_EXISTING ] [[,] STATISTICS_NORECOMPUTE ] [[,] SORT_IN_TEMPDB ] ] [ON filegroup ] In diesem Beispiel wird fr die LastName-Spalte der Employees-Tabelle ein gruppierter Index erstellt.
CREATE CLUSTERED INDEX CL_lastname ON employees(lastname)

Beispiel 1

Verwenden der DROP INDEX-Anweisung


Verwenden Sie zum Entfernen eines Indexes fr eine Tabelle die DROP INDEX-Anweisung. Bercksichtigen Sie beim Lschen eines Indexes die folgenden Aspekte: Wenn Sie die DROP INDEX-Anweisung ausfhren, gibt SQL Server den vom betreffenden Index belegten Festplattenspeicher frei. Sie knnen die DROP INDEX-Anweisung nicht auf Indizes anwenden, die mit der PRIMARY KEY-Einschrnkung oder der UNIQUE-Einschrnkung erstellt wurden. Sie mssen die Einschrnkung entfernen, um solche Indizes lschen zu knnen. Wenn Sie eine Tabelle lschen, werden auch alle fr diese Tabelle erstellten Indizes gelscht. Wenn Sie einen gruppierten Index lschen, werden alle nicht gruppierten Indizes der Tabelle automatisch neu erstellt. Um einen Index zu lschen, mssen Sie sich in der Datenbank befinden, in der sich der Index befindet. Die DROP INDEX-Anweisung kann nicht auf Systemtabellen angewendet werden. Syntax Beispiel 2 DROP INDEX 'table.index | view.index' [, ...n ] In diesem Beispiel wird der Index cl_lastname aus der Employees-Tabelle gelscht.
USE Northwind DROP INDEX employees.CL_lastname

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen eindeutiger Indizes


Erklren Sie, wie mit Hilfe eindeutiger Indizes die Eindeutigkeit indizierter Spalten sichergestellt wird.

Thema

USE Northwind USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_CustID CREATE UNIQUE NONCLUSTERED INDEX U_CustID ON customers(CustomerID) ON customers(CustomerID)

Customers Customers
CustomerID CustomerID QUICK QUICK BONAP BONAP 12 RANCH 12 CompanyName ContactName CompanyName ContactName QUICK-Stop QUICK-Stop Bon app' Bon app' Walking Rancho grande Walking Horst Kloss Horst Kloss Laurence Lebihan Laurence Lebihan Henry Gutirrez Sergio David Thoreau Henry David Thoreau

Einstieg

Bei einem eindeutigen Index drfen Schlsselwerte nicht in mehreren Zeilen vorkommen.

Beim Hinzufgen neuer Zeilen zu Beim Hinzufgen neuer Zeilen zu einer Tabelle drfen keine doppelten einer Tabelle drfen keine doppelten Schlsselwerte vorkommen Schlsselwerte vorkommen RANCH Sant Gourmet Jonas Bergulfsen RANCH Sant Gourmet Jonas Bergulfsen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Durch einen eindeutigen Index wird sichergestellt, dass smtliche in einer indizierten Spalte enthaltenen Daten eindeutig sind und keine doppelten Werte enthalten. Eindeutige Indizes stellen sicher, dass Daten in indizierten Spalten eindeutig sind. Wenn fr eine Tabelle eine PRIMARY KEY- oder UNIQUE-Einschrnkung definiert wurde, wird von SQL Server automatisch ein eindeutiger Index erstellt, wenn Sie die CREATE TABLE-Anweisung oder die ALTER TABLEAnweisung ausfhren.

Sicherstellen der Eindeutigkeit von Daten in indizierten Spalten


Erstellen Sie fr gruppierte oder nicht gruppierte Indizes einen eindeutigen Index, wenn die Daten selbst von vornherein eindeutig sind (z. B. bei fortlaufender Nummerierung). Wenn die Eindeutigkeit jedoch vom System erzwungen werden muss, sollten Sie anstelle eines eindeutigen Indexes fr die betreffende Spalte eine PRIMARY KEY- oder UNIQUE-Einschrnkung erstellen. Bercksichtigen Sie beim Erstellen eines eindeutigen Indexes die folgenden Aspekte und Richtlinien: Fr Spalten einer Tabelle, die mit PRIMARY KEY- oder UNIQUE-Einschrnkungen definiert wurden, werden von SQL Server automatisch eindeutige Indizes erstellt. Falls eine Tabelle Daten enthlt, sucht SQL Server nach doppelten Werten, wenn Sie den Index erstellen. Die Daten werden von SQL Server jedes Mal auf doppelte Werte berprft, wenn Sie die INSERT-Anweisung oder die UPDATE-Anweisung ausfhren. Wenn doppelte Schlsselwerte vorhanden sind, bricht SQL Server Ihre Anweisung ab und gibt eine Fehlermeldung zurck, mit der auf den vorhandenen doppelten Wert hingewiesen wird.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Stellen Sie sicher, dass jede Zeile einen eindeutigen Wert enthlt - wenn fr eine Spalte ein eindeutiger Index erstellt wird, darf ein und dieselbe ID nicht in mehreren Zeilen verwendet werden. Auf diese Weise wird sichergestellt, dass jede Einheit eindeutig zu identifizieren ist. Erstellen Sie eindeutige Indizes nur fr Spalten, bei denen die Integritt der Einheiten erzwungen werden kann. Beispielsweise wrden Sie fr die Spalte LastName der Employees-Tabelle keinen eindeutigen Index erstellen, da einige Mitarbeiter eventuell denselben Nachnamen haben. Beispiel 1 In diesem Beispiel wird fr die Customers-Tabelle ein eindeutiger, nicht gruppierter Index mit dem Namen U_CustID erstellt. Der Index wird fr die CustomerID-Spalte erstellt. Der Wert in der CustomerID-Spalte muss in jeder Zeile der Tabelle eindeutig sein.
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_CustID ON customers(CustomerID)

Ermitteln aller in einer Spalte enthaltenen doppelten Werte


Wenn beim Erstellen eines eindeutigen Indexes doppelte Schlsselwerte vorhanden sind, kann die CREATE INDEX-Anweisung nicht ausgefhrt werden. SQL Server gibt dann eine Fehlermeldung zurck, die auf den ersten doppelten Wert hinweist, wobei jedoch noch weitere doppelte Werte vorhanden sein knnen. Mit Hilfe des folgenden Beispielskripts, das fr jede beliebige Tabelle ausgefhrt werden kann, knnen Sie smtliche doppelten Werte einer Spalte ermitteln. Ersetzen Sie den Text in Kursivschrift durch die fr Ihre eigene Abfrage erforderlichen Informationen.
SELECT index_col, COUNT (index_col) FROM tablename GROUP BY index_col HAVING COUNT(index_col)>1 ORDER BY index_col

Beispiel 2

In diesem Beispiel wird ermittelt, ob in der CustomerID-Spalte der Customers-Tabelle doppelte Kundenkennungen vorhanden sind. Wenn dies der Fall ist, gibt SQL Server im Resultset die jeweilige Kundenkennung und die Anzahl doppelter Eintrge zurck.
SELECT CustomerID, COUNT(CustomerID) AS '# of Duplicates' FROM Northwind.dbo.Customers GROUP BY CustomerID HAVING COUNT(CustomerID)>1 ORDER BY CustomerID

Ergebnis

CustomerID (0 row(s) affected)

# of Duplicates

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen zusammengesetzter Indizes


Erlutern Sie die Funktionsweise zusammengesetzter Indizes.

Thema

USE Northwind USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) ON [Order Details] (OrderID, ProductID)

Einstieg

In zusammengesetzten Indizes werden mehrere Spalten als Schlsselwert angegeben.

Order Details Order Details


OrderID ProductID UnitPrice Quantity OrderID ProductID UnitPrice Quantity 10248 10248 10248 10248 10248 10248 11 11 42 42 72 72 14.000 14.000 9.800 9.800 34.800 34.800 12 12 10 10 5 5 Discount Discount 0.0 0.0 0.0 0.0 0.0 0.0

Spalte 1

Spalte 2

Zusammengesetzter Zusammengesetzter Schlssel Schlssel

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis In zusammengesetzten Indizes werden mehrere Spalten als Schlsselwert angegeben. Erstellen Sie zusammengesetzte Indizes in folgenden Fllen: Wenn es am gnstigsten ist, zwei oder mehr Spalten als Schlssel zu suchen. Wenn sich Abfragen nur auf die Spalten des Indexes beziehen. Ein gutes Beispiel fr die sinnvolle Verwendung eines zusammengesetzten Indexes ist ein Telefonverzeichnis. Das Verzeichnis ist nach Nachnamen sortiert. Die Eintrge der einzelnen Nachnamen sind wiederum nach Vornamen sortiert, da zahlreiche Eintrge mit demselben Nachnamen vorhanden sind. Bercksichtigen Sie beim Erstellen eines zusammengesetzten Indexes die folgenden Aspekte und Richtlinien: In einem zusammengesetzten Index knnen Sie bis zu 16 Spalten kombinieren. Die Gesamtlnge aller Spalten, aus denen der zusammengesetzte Index besteht, darf 900 Byte nicht berschreiten. Alle Spalten eines zusammengesetzten Indexes mssen aus der gleichen Tabelle stammen, es sei denn, der Index wird fr eine Sicht erstellt. Definieren Sie zuerst die Spalte, die am eindeutigsten ist. Die Spalte, die in der CREATE INDEX-Anweisung zuerst definiert wird, gilt als die Spalte mit der hchsten Prioritt. In der WHERE-Klausel einer Abfrage muss auf die erste Spalte des zusammengesetzten Indexes verwiesen werden, damit der Abfrageoptimierer den zusammengesetzten Index verwenden kann. Ein Index fr (Spalte 1, Spalte 2) ist nicht mit einem Index fr (Spalte 2, Spalte 1) identisch - jeder Index verfgt ber eine spezifische Spaltenreihenfolge. Fr die Spaltenreihenfolge ist meistens ausschlaggebend, welche Spalte die selektiveren Daten enthlt bzw. den geringsten Prozentsatz an Zeilen zurckgeben wrde.

Weisen Sie darauf hin, dass die OrderID-Spalte deshalb als erste Spalte verwendet wird, weil sie selektiver ist als die ProductID-Spalte.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Zusammengesetzte Indizes eignen sich fr Tabellen mit mehreren Spaltenschlsseln. Verwenden Sie zusammengesetzte Indizes, um die Abfrageleistung zu erhhen und um die Anzahl der Indizes, die fr eine Tabelle erstellt werden mssen, mglichst gering zu halten. Anmerkung Es empfiehlt sich normalerweise nicht, fr dieselben Spalten mehrere Indizes zu erstellen. Beispiel In diesem Beispiel wird ein nicht gruppierter zusammengesetzter Index fr die Order Details-Tabelle erstellt. Die OrderID-Spalte und die ProductID-Spalte dienen als zusammengesetzte Schlsselwerte. Beachten Sie, dass die Spalte OrderID deshalb zuerst angegeben wird, weil sie selektiver ist als die Spalte ProductID.
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID)

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen von Indizes fr berechnete Spalten


Thema
Erlutern Sie, welche Anforderungen beim Erstellen eines Indexes fr eine berechnete Spalte erfllt sein mssen.

Sie knnen Indizes fr berechnete Spalten erstellen, wenn die folgenden Voraussetzungen erfllt sind:
Der Ausdruck computed_column_expression ist deterministisch und przise Die Verbindungsebenenoption ANSI_NULL ist auf ON festgelegt Die berechnete Spalte kann die Datentypen text, ntext oder image nicht auswerten Die erforderlichen SET-Optionen sind auf ON festgelegt, whrend ein Index erstellt wird und wenn INSERT-, UPDATEoder DELETE-Anweisungen den Indexwert verndern Die Option NUMERIC_ROUNDABORT ist auf OFF festgelegt

Einstieg

Bevor Sie einen Index fr eine berechnete Spalte erstellen knnen, mssen mehrere Voraussetzungen erfllt sein.

Der Abfrageoptimierer ignoriert mglicherweise einen Index fr eine berechnete Spalte


**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Weitere Informationen Sie knnen Indizes fr berechnete Spalten erstellen, wenn die folgenden Voraussetzungen erfllt sind: Der Ausdruck computed_column_expression ist deterministisch. Deterministische Ausdrcke geben immer das gleiche Ergebnis zurck. Die Verbindungsebenenoption ANSI_NULL ist auf ON festgelegt, wenn die CREATE TABLE-Anweisung ausgefhrt wird. Die OBJECTPROPERTYFunktion meldet mit Hilfe der IsAnsiNullsOn-Eigenschaft, ob die Option auf ON festgelegt ist. Der Ausdruck computed_column_expression, der fr die berechnete Spalte definiert wurde, kann die Datentypen text, ntext oder image nicht auswerten. Weitere Informationen
Weisen Sie die Kursteilnehmer darauf hin, dass die SQL Server-Onlinedokumentation weitere Informationen ber SET-Optionen enthlt, die Auswirkungen auf Ergebnisse haben.

Weisen Sie die Kursteilnehmer darauf hin, dass die SQL Server-Onlinedokumentation weitere Informationen ber deterministische und nicht deterministische Funktionen enthlt.

Die Verbindung, unter der der Index erstellt wird, und alle Verbindungen, unter denen versucht wird, INSERT-, UPDATE- oder DELETE-Anweisungen auszufhren, mit denen Werte im Index gendert werden, verfgen ber sechs SET-Optionen, die auf ON und eine SET-Option, die auf OFF festgelegt ist. Die folgenden Optionen mssen auf ON festgelegt werden: ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER

10

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Daneben muss die Option NUMERIC_ROUNDABORT auf OFF festgelegt werden. Anmerkung Der Abfrageoptimierer ignoriert einen Index fr eine berechnete Spalte fr jede SELECT-Anweisung, die unter einer Verbindung ausgefhrt wird, die nicht ber die vorstehend genannten Optionseinstellungen verfgt.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

11

Abrufen von Informationen zu vorhandenen Indizes


Thema
Erklren Sie, wie Informationen zu vorhandenen Indizes abgerufen werden.

Die gespeicherte Systemprozedur sp_helpindex


USE Northwind USE Northwind EXEC sp_helpindex Customers EXEC sp_helpindex Customers

Einstieg

Bevor Sie einen Index erstellen, ndern oder entfernen, bentigen Sie eventuell Informationen zu bereits vorhandenen Indizes.

Die gespeicherte Systemprozedur sp_help tablename

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bevor Sie einen Index erstellen, ndern oder entfernen, bentigen Sie eventuell Informationen zu bereits vorhandenen Indizes.

Die gespeicherte Systemprozedur sp_helpindex


Um Indexinformationen, wie den Namen und die Art eines Indexes sowie die fr eine bestimmte Tabelle gltigen Optionen abzufragen, knnen Sie entweder SQL Server Enterprise Manager verwenden oder die gespeicherte Systemprozedur sp_helpindex ausfhren. Beispiel In diesem Beispiel werden die fr die Customers-Tabelle vorhandenen Indizes abgefragt.
USE Northwind EXEC sp_helpindex Customers

Ergebnis
index_name PK_Customers PostalCode City (1 row(s) affected)

index_description

index_keys

clustered, unique, Primary Key located on PRIMARY CustomerID nonclustered located on PRIMARY PostalCode nonclustered located on PRIMARY City

12

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Methodischer Hinweis

Die gespeicherte Systemprozedur sp_help tablename


Sie knnen auch die gespeicherte Systemprozedur sp_help tablename ausfhren, um Informationen zu Indizes sowie weitere Tabelleninformationen abzurufen.

Erlutern Sie das Ergebnis der Abfrage sp_help tablename, indem Sie die folgende Anweisung ausfhren: USE Northwind EXEC sp_help Customers Weisen Sie auf die zustzlichen Tabelleninformationen hin.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

13

Arbeiten mit den CREATE INDEX-Optionen


Thema
Geben Sie eine kurze bersicht ber einige der CREATE INDEX-Optionen.

Verwenden der Option FILLFACTOR Verwenden der Option PAD_INDEX

Einstieg

SQL Server bietet CREATE INDEX-Optionen, die die Indexerstellung beschleunigen und auch die Leistung eines Indexes langfristig verbessern knnen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server bietet CREATE INDEX-Optionen, die die Indexerstellung beschleunigen und auch die Leistung eines Indexes langfristig verbessern knnen.

14

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Verwenden der Option FILLFACTOR


Erlutern Sie, wann und wie die FILLFACTOR-Optionen verwendet werden, um die Leistung zu verbessern.

Thema

Gibt an, zu welchem Prozentsatz Seiten gefllt werden Wirkt sich auf Seiten auf Blattebene aus
Gefllte Seiten
Con Funk White Rudd White Barr ... 470401 ... 470402 ... 470403 ... 470501 ... 470502 ... 470503 Akhtar Funk Smith Martin Smith Ota ... 470601 ... 470602 ... 470603 ... 470604 ... 470701 ... 470702 Martin Phua Jones Smith Ganio Jones ... 470801 ... 470802 ... 470803 ... 470804 ... 470901 ... 470902

Einstieg

Sie knnen die Option FILLFACTOR verwenden, um die Leistung von INSERT- und UPDATEAnweisungen fr Tabellen zu optimieren, die ber gruppierte oder nicht gruppierte Indizes verfgen.

Fillfactor 50 = Blattseite zu 50% gefllt


Con ... 470401 Rudd ... 470501 Akhtar ... 470601 Martin ... 470604 Martin ... 470801 Smith ... 470804 Funk ... 470402 White ... 470502 Funk ... 470402 Smith ... 470701 Phua ... 470802 Ganio ... 470901 White ... 470403 Barr ... 470503 Smith ... 470603 Ota ... 470702 Jones ... 470803 White ... 470902

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen die Option FILLFACTOR verwenden, um die Leistung von INSERT- und UPDATE-Anweisungen fr Tabellen zu optimieren, die gruppierte oder nicht gruppierte Indizes enthalten. Wenn eine Indexseite vollstndig gefllt wurde, bentigt SQL Server etwas Zeit, um die Seite aufzuteilen und so fr neue Zeilen Platz zu schaffen. Verwenden Sie die Option FILLFACTOR, um einen bestimmten Prozentsatz freien Speicherplatz fr die Indexseiten der Blattebene zu reservieren und damit die Anzahl von Seitenteilungen zu reduzieren. Anmerkung Die Option FILLFACTOR wird nur beim Erstellen bzw. erneuten Erstellen eines Index angewendet. Der jeweils angegebene Prozentsatz des fr die Indexseiten reservierten Speicherplatzes wird von SQL Server nicht dynamisch verwaltet. Der fr eine Tabelle zu definierende Fllfaktorwert ist davon abhngig, wie hufig die Daten (mittels INSERT- und UPDATE-Anweisungen) gendert werden und wie Ihre Organisationsumgebung jeweils konfiguriert ist. Generell gelten folgende Richtlinien: Definieren Sie fr OLTP-Umgebungen (Online Transaction Processing) einen niedrigen Fllfaktorwert. Verwenden Sie fr SQL Server Analysis Services-Umgebungen einen hohen Fllfaktorwert.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

15

In der folgenden Tabelle sind die Einstellungen der Option FILLFACTOR aufgefhrt sowie die Umgebungen, fr die diese Fllfaktorwerte blicherweise verwendet werden.
FILLFACTORProzentsatz 0 (Standard) 1-99 Seiten auf Blattebene Vollstndig fllen Bis zum angegebenen Prozentsatz fllen Vollstndig fllen Seiten auf NichtBlattebene Platz lassen fr einen Indexeintrag Platz lassen fr einen Indexeintrag nderungen, die die Schlsselwerte betreffen Keine bis geringfgige nderungen Kleine bis umfangreiche nderungen

Typische Arbeitsumgebung Analysis Services Gemischt oder OLTP

100

Platz lassen fr einen Indexeintrag

Keine bis geringfgige nderungen

Analysis Services

Bercksichtigen Sie beim Verwenden der Option FILLFACTOR die folgenden Aspekte und Richtlinien: Es kann ein Fllfaktorwert von 1 bis 100 Prozent definiert werden. Der Standardfllfaktorwert ist 0. Dieser Wert sorgt dafr, dass die Indexseiten der Blattebene zu 100 Prozent gefllt werden und dass in den Indexseiten der Nicht-Blattebene Platz fr die maximale Gre von einem Indexeintrag freigelassen wird. Sie knnen nicht explizit fillfactor = 0 angeben. Der Standardfllfaktorwert kann auf Serverebene mit Hilfe der gespeicherten Systemprozedur sp_configure gendert werden. In der sysindexes-Systemtabelle werden der jeweils zuletzt angewendete Fllfaktorwert zusammen mit anderen Indexinformationen gespeichert. Der Fllfaktorwert wird als Prozentsatz angegeben. Der Prozentsatz bestimmt, wie weit die Seiten der Blattebene gefllt werden sollen. Mit einem Fllfaktor von 65 Prozent wird beispielsweise festgelegt, dass die Seiten der Blattebene zu 65 Prozent gefllt werden, wobei 35 Prozent des Speicherplatzes der Seite fr neue Zeilen zur Verfgung stehen. Wie viele Zeilen der angegebene Fllfaktorprozentsatz jeweils pro Seite zulsst, ist von der Zeilenlnge abhngig. Verwenden Sie die Option FILLFACTOR, wenn in Tabellen viele Zeilen eingefgt werden oder die Schlsselwerte gruppierter Indizes hufig gendert werden.

16

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Verwenden der Option PAD_INDEX


Erlutern Sie, wie die Option PAD_INDEX verwendet wird.

Thema

Einstieg

Die Option PAD_INDEX gilt fr Indexseiten der NichtBlattebene Ist PAD_INDEX nicht angegeben, wird auf Seiten der Nicht-Blattebene standardmig eine Zeile freigelassen Die Anzahl der Zeilen auf Seiten der Nicht-Blattebene ist nie kleiner als zwei PAD_INDEX verwendet den Fllfaktorwert
USE Northwind USE Northwind CREATE INDEX OrderID_ind CREATE INDEX OrderID_ind ON Orders(OrderID) ON Orders(OrderID) WITH PAD_INDEX, FILLFACTOR=70 WITH PAD_INDEX, FILLFACTOR=70

Sie knnen die Option PAD_INDEX zusammen mit der Option FILLFACTOR verwenden, um die Leistung zu optimieren, wenn Sie einen Index erstellen oder neu erstellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Mit der Option PAD_INDEX wird der Prozentsatz angegeben, bis zu dem die Indexseiten der Nicht-Blattebene gefllt werden knnen. Die Option PAD_INDEX kann nur verwendet werden, wenn FILLFACTOR angegeben wurde, da der Wert fr den PAD_INDEX-Prozentsatz von dem fr FILLFACTOR angegebenen Prozentsatz abhngig ist. Die folgende Tabelle zeigt, wie sich die Einstellungen der Option FILLFACTOR auswirken, wenn Sie die Option PAD_INDEX verwenden. Auerdem ist aufgefhrt, in welcher Umgebung PAD_INDEX-Werte normalerweise verwendet werden.
Seiten auf NichtBlattebene Bis zum angegebenen Prozentsatz fllen nderungen, die die Schlsselwerte betreffen Kleine bis umfangreiche nderungen

Weisen Sie die Kursteilnehmer darauf hin, dass die Option PAD_INDEX selten verwendet wird. Ein Groteil des Leistungsgewinns wird erreicht, indem die Option FILLFACTOR in geeigneter Weise verwendet wird.

FILLFACTORProzentsatz 1-99

Seiten auf Blattebene Bis zum angegebenen Prozentsatz fllen

Typische Arbeitsumgebung OLTP

Bercksichtigen Sie bei der Verwendung der Option PAD_INDEX die folgenden Aspekte: SQL Server wendet den mit der Option FILLFACTOR angegebenen Prozentsatz auf die Seiten der Blattebene und der Nicht-Blattebene an. Standardmig sorgt SQL Server dafr, dass unabhngig von der Hhe des Fllfaktorwertes fr jede Seite der Nicht-Blattebene ausreichend Platz fr mindestens eine Zeile der maximalen Indexgre brig bleibt. Die Indexseite auf Nicht-Blattebene enthlt immer mindestens zwei Eintrge, unabhngig davon, wie gering der Fllfaktorwert ist. PAD_INDEX verwendet den Fllfaktorwert.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

17

Beispiel

In diesem Beispiel wird der Index OrderID_ind fr die OrdersID-Spalte der Orders-Tabelle erstellt. Da die Option PAD_INDEX mit der Option FILLFACTOR angegeben wird, werden die von SQL Server erstellten Seiten der Blattebene und der Nicht-Blattebene zu 70 Prozent gefllt. Wenn Sie die Option PAD_INDEX jedoch nicht verwenden, werden die Seiten der Blattebene zu 70 Prozent und die Seiten der Nicht-Blattebene beinahe vollstndig gefllt.
USE Northwind CREATE INDEX OrderID_ind ON Orders(OrderID) WITH PAD_INDEX, FILLFACTOR=70

18

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Verwalten von Indizes


Thema
Geben Sie eine kurze bersicht ber einige Verwaltungstools.

Datenfragmentierung DBCC SHOWCONTIG-Anweisung DBCC INDEXDEFRAG-Anweisung Option DROP_EXISTING

Einstieg

Um eine optimale Leistung sicherzustellen, mssen Sie erstellte Indizes verwalten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Um eine optimale Leistung sicherzustellen, mssen Sie erstellte Indizes verwalten. Im Laufe der Zeit werden die Daten fragmentiert. Daher mssen Sie die Fragmentierung der Daten entsprechend den Anforderungen Ihrer Organisationsumgebung verwalten. SQL Server verfgt ber einen Indexoptimierungs-Assistenten, der die Verwendung Ihrer Indizes automatisch nachverfolgt und beim Verwenden und Erstellen von Indizes mit optimaler Leistung hilfreich ist. Sie knnen auch verschiedene Optionen und Tools verwenden, die beim erneuten Erstellen von Indizes und beim berprfen der Indexoptimierung hilfreich sind.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

19

Datenfragmentierung
Erlutern Sie, wie die Datenfragmentierung zustande kommt, und nennen Sie Mglichkeiten zum Verwalten der Datenfragmentierung.

Thema

Ursachen der Fragmentierung


SQL Server organisiert Indexseiten neu, wenn Daten gendert werden Die Neuanordnung bewirkt, dass Indexseiten geteilt werden

Mglichkeiten zum Verwalten der Fragmentierung


Lschen und erneutes Erstellen des Indexes unter Angabe eines Fllfaktorwertes Erneutes Erstellen des Indexes unter Angabe eines Fllfaktorwertes

Einstieg

Mit der Zeit findet eine Fragmentierung der Daten statt, da die Tabellen immer wieder gendert werden. Entsprechend den Anforderungen Ihrer Geschftsumgebung haben Sie verschiedene Mglichkeiten, die Fragmentierung zu verwalten.

Geschftsumgebung
In einer OLTP-Umgebung kann sich die Fragmentierung positiv auswirken In einer Analysis Services-Umgebung kann sich die Fragmentierung nachteilig auswirken

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Entsprechend den Anforderungen Ihrer Geschftsumgebung kann sich eine Fragmentierung sowohl positiv als auch negativ auf die Systemleistung auswirken.

Ursachen der Fragmentierung


Eine Fragmentierung wird durchgefhrt, wenn Daten gendert werden. Wenn beispielsweise zu einer Tabelle neue Zeilen hinzugefgt oder vorhandene gelscht werden oder wenn Werte in indizierten Spalten gendert werden, passt SQL Server die Indexseiten an, sodass die nderungen integriert und die indizierten Daten entsprechend gespeichert werden knnen. Die Anpassung der Indexseiten wird als Seitenteilung bezeichnet. Durch den Teilungsvorgang vergrert sich eine Tabelle, und die fr das Verarbeiten von Abfragen bentigte Zeit erhht sich.

Mglichkeiten zum Verwalten der Fragmentierung


SQL Server bietet zwei Mglichkeiten, die Fragmentierung zu verwalten. Die erste Mglichkeit besteht darin, einen gruppierten Index zu lschen, anschlieend neu zu erstellen und mit Hilfe der Option FILLFACTOR einen Fllfaktorwert anzugeben. Die zweite Mglichkeit besteht darin, einen Index neu zu erstellen und einen Fllfaktorwert anzugeben.

Geschftsumgebung
Welcher Grad der Fragmentierung fr Ihre Datenbanken noch akzeptabel ist, hngt jeweils von Ihrer Arbeitsumgebung ab: In einer OLTP-Umgebung kann sich die Fragmentierung positiv auswirken, da es sich hierbei um eine schreibintensive Umgebung handelt. Ein typisches OLTP-System weist eine groe Anzahl gleichzeitiger Benutzer auf, die Daten aktiv hinzufgen und bearbeiten. In einer Analysis Services-Umgebung kann sich die Fragmentierung nachteilig auswirken, da es sich hierbei um eine leseintensive Umgebung handelt.

20

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

DBCC SHOWCONTIG-Anweisung
Erlutern Sie die Verwendung der DBCC SHOWCONTIG-Anweisung.

Thema

Ergebnisse der DBCC SHOWCONTIG-Anweisung Feststellen, ob eine Tabelle oder ein Index stark fragmentiert ist Feststellen, ob Daten- oder Indexseiten voll sind Wann die Ausfhrung erfolgen sollte Wenn Tabellen in grerem Umfang gendert wurden Wenn Tabellen importierte Daten enthalten Wenn Tabellen im Verdacht stehen, eine schlechte Abfrageleistung zu verursachen

Einstieg

Wenn Sie sich ber die Fragmentierung Ihrer Daten informieren mchten, fhren Sie die DBCC SHOWCONTIG-Anweisung aus, um zu ermitteln, ob Ihre Tabelle oder Ihre Indizes fragmentiert sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Die DBCC SHOWCONTIG-Anweisung zeigt Fragmentierungsinformationen zu den Daten und Indizes einer angegebenen Tabelle an.

Fhren Sie die DBCC SHOWCONTIG-Anweisung fr eine Tabelle in der ClassNorthwind-Datenbank vor, und besprechen Sie das Ergebnis, ohne dabei auf Details einzugehen.

Ergebnisse der DBCC SHOWCONTIG-Anweisung


Wenn Sie die DBCC SHOWCONTIG-Anweisung ausfhren, untersucht SQL Server die Indexseiten auf der Blattebene, um zu ermitteln, ob eine Tabelle oder ein angegebener Index stark fragmentiert ist. Mit Hilfe der DBCC SHOWCONTIG-Anweisung wird ebenfalls ermittelt, ob die Daten- und Indexseiten gefllt sind.

Wann die Ausfhrung erfolgen sollte


Fhren Sie die DBCC SHOWCONTIG-Anweisung fr Tabellen aus, die in grerem Umfang gendert wurden, die importierte Daten enthalten, oder die im Verdacht stehen, eine schlechte Abfrageleistung zu verursachen. Bercksichtigen Sie beim Ausfhren der DBCC SHOWCONTIG-Anweisung die folgenden Aspekte und Richtlinien: Methodischer Hinweis Wenn Sie die DBCC SHOWCONTIG-Anweisung ausfhren, ist es unter SQL Server erforderlich, entweder auf eine Tabellen-ID oder auf eine Index-ID zu verweisen. Fhren Sie eine Abfrage der sysindexes-Tabelle durch, um die Tabellen- oder Index-ID zu ermitteln. Ermitteln Sie, wie hufig die DBCC SHOWCONTIG-Anweisung ausgefhrt werden sollte. Ermitteln Sie hierzu auf tglicher, wchentlicher oder monatlicher Basis das Aktivittsniveau fr eine Tabelle.

Fhren Sie eine der beiden Mglichkeiten vor, die Tabellen-ID einer Tabelle zu ermitteln. Eine Mglichkeit besteht darin, die Funktion OBJECT_ID zu verwenden. Alternativ kann die sysindexes-Systemtabelle der ClassNorthwindDatenbank abgefragt werden.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

21

In der folgenden Tabelle werden die Statistiken beschrieben, die von der DBCC SHOWCONTIG-Anweisung zurckgegeben werden.
Statistik Gescannte Seiten Gescannte Blcke Blockwechsel Beschreibung Anzahl der Seiten in der Tabelle oder im Index. Anzahl der Blcke in der Tabelle oder im Index. Die Hufigkeit, mit der die DBCC-Anweisung beim Durchsuchen der Seiten eines Blocks diesen Block verlassen hat. Die Anzahl der Seiten pro Block in der Seitenkette. Der Wert fr die Scandichte ist 100 (Prozentsatz), wenn die Daten fortlaufend gespeichert sind; bei einem Wert unter 100 liegt eine Fragmentierung vor. Der beste Wert ist die ideale Anzahl Blockwechsel, die dann stattfinden, wenn smtliche Daten fortlaufend verknpft sind. Der tatschliche Wert gibt die tatschliche Anzahl der Blockwechsel an. Prozentsatz der Seiten, die beim Scannen der Blattseiten eines Index nicht korrekt einsortiert waren. Diese Zahl ist fr Heaps und Textindizes nicht von Bedeutung. Fr eine Seite, die beim Scannen der Blattseiten eines Index nicht korrekt einsortiert war, ist die nchste in einer IAM (Index Allocation Map) angegebene Seite nicht die, auf die mit dem Verweis Nchste Seite auf der Blattseite verwiesen wird. Prozentsatz der Blcke, die beim Scannen der Blattseiten eines Index nicht korrekt einsortiert waren. Diese Zahl ist fr Heaps nicht relevant. Fr einen Block, der beim Scannen der Blattseiten eines Index nicht korrekt einsortiert war, ist der Block, der die aktuellen Seite eines Indexes enthlt, nicht der nchste physische Block nach dem Block, der die vorherige Seite eines Indexes enthlt. Die durchschnittliche Anzahl freier Bytes auf den durchsuchten Seiten. Je grer der Wert ist, desto weniger sind die Seiten gefllt - niedrige Werte sind daher besser. Beachten Sie jedoch, dass dieser Wert ebenfalls von der Zeilenlnge beeinflusst wird. Lange Zeilen knnen zu einem hheren Wert fhren. Dieser Wert gibt ber den Fllungsgrad einer Seite Auskunft. Da hierbei die Zeilenlnge bercksichtigt wird, lsst sich der Fllungsgrad einer Seite anhand dieses Wertes genauer ablesen. Hhere Prozentstze sind gnstiger als niedrige Prozentstze.

Seiten pro Block (Durchschnitt) Scandichte [Bester Wert: Tatschlicher Wert]

Logische Scanfragmentierung

Blockscanfragmentierung

Byte frei pro Seite (Durchschnitt)

Mittlere Seitendichte (voll)

22

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Syntax

DBCC SHOWCONTIG [({table_name | table_id | view_name | view_id } [, index_name | index_id ] )] [ WITH { ALL_INDEXES | FAST [, ALL_INDEXES ] | TABLERESULTS [, { ALL_INDEXES } ] [, { FAST | ALL_LEVELS } ] } ] In diesem Beispiel wird eine Anweisung ausgefhrt, mit der auf die Customers-Tabelle zugegriffen wird.
USE Northwind DBCC SHOWCONTIG (Customers, PK_Customers)

Beispiel

Ergebnis

DBCC SHOWCONTIG scannt 'Customers'-Tabelle... Tabelle: 'Customers' (2073058421); Index-ID: 1, Datenbank-ID: 6 Scan auf Ebene TABLE durchgefhrt. Gescannte Seiten: 3 Gescannte Blcke: 2 Blockwechsel: 1 Seiten pro Block (Durchschnitt): 1.5 Scandichte [Bester Wert:Tatschlicher 50.00% [1:2] Wert]: Logische Scanfragmentierung 0.00% Blockscanfragmentierung: 50.00% Byte frei pro Seite (Durchschnitt): 246.7 Mittlere Seitendichte (voll): 96.95% DBCC-Ausfhrung abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich bitte an den Systemadmistrator.

Stellen Sie fest, ob diese Ergebnisse fr eine bestimmte Arbeitsumgebung als geeignet zu beurteilen sind.

Methodischer Hinweis

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

23

DBCC INDEXDEFRAG-Anweisung
Erlutern Sie die Verwendung der DBCC INDEXDEFRAG-Anweisung.

Thema

Verwenden der DBCC INDEXDEFRAG-Anweisung Defragmentieren der Blattebene eines Indexes Anordnen der Seiten auf Blattebene, sodass die physische Reihenfolge der Seiten einer logischen Reihenfolge von links nach rechts entspricht Verbessern der Scanleistung fr die Indizes Defragmentieren oder erneutes Erstellen von Indizes

Einstieg

Mit der DBCC INDEXDEFRAG-Anweisung kann die Blattebene von gruppierten und nicht gruppierten Indizes fr Tabellen und Sichten defragmentiert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn sich die Daten in einer Tabelle ndern, werden die Indizes der Tabelle manchmal fragmentiert. Mit der DBCC INDEXDEFRAG-Anweisung kann die Blattebene von gruppierten und nicht gruppierten Indizes fr Tabellen und Sichten defragmentiert werden. Beim Defragmentieren werden die Seiten so angeordnet, dass die physische Reihenfolge der Seiten der logischen Reihenfolge der Blattknoten von links nach rechts entspricht. Mit dieser Neuordnung wird die Scanleistung fr die Indizes verbessert.

Verwenden der DBCC INDEXDEFRAG-Anweisung


Wenn Sie die DBCC INDEXDEFRAG-Anweisung verwenden, tritt Folgendes ein: Die Seiten eines Indexes werden unter Bercksichtigung des beim Erstellen des Index angegebenen FILLFACTOR-Wertes komprimiert. Alle leeren Seiten, die durch diese Komprimierung erstellt wurden, werden entfernt. Wenn sich ein Index ber mehr als eine Datei erstreckt, werden die Dateien nacheinander defragmentiert. Seiten werden nicht zwischen Dateien verschoben. Dem Benutzer wird ein Schtzwert in Prozent betreffend den Fortschritt der Defragmentierung angezeigt. Diese Meldung erfolgt alle 5 Minuten. Die Ausfhrung der DBCC INDEXDEFRAG-Anweisung kann jederzeit beendet werden, wobei bis zu diesem Punkt fertig gestellte Teile beibehalten werden. Es handelt sich um einen Onlinevorgang. Sperren werden nicht fr lngere Zeit aufrechterhalten, und laufende Abfragen oder Aktualisierungen werden nicht blockiert. Die Defragmentierung wird immer vollstndig protokolliert, ungeachtet der Einstellung fr das Datenbank-Wiederherstellungsmodell.

24

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Defragmentieren oder erneutes Erstellen von Indizes


Die fr eine Defragmentierung bentigte Zeit ist abhngig vom Grad der Fragmentierung. Bei einem hochgradig fragmentierten Index dauert die Defragmentierung mglicherweise lnger als die Neuerstellung. Die Defragmentierung eines geringfgig fragmentierten Indexes wird schneller ausgefhrt als das erneute Erstellen eines Indexes. Anmerkung Mit Hilfe der DBCC INDEXDEFRAG-Anweisung kann die Leistung nicht verbessert werden, wenn Indizes physisch auf der Festplatte defragmentiert werden. Wenn ein Index physisch defragmentiert werden soll, mssen Sie den Index neu erstellen. Syntax DBCC INDEXDEFRAG ( { database_name | database_id | 0 } , { table_name | table_id | 'view_name' | view_id } , { index_name | index_id } ) [ WITH NO_INFOMSGS ] In diesem Beispiel wird die DBCC INDEXDEFRAG-Anweisung fr den Index mem_no_CL der Member-Tabelle in der credit-Datenbank ausgefhrt.
DBCC INDEXDEFRAG(credit, member, mem_no_CL)

Beispiel

Ergebnis

Pages scanned 150 (1 row(s) affected)

Pages moved 28

Pages removed 9

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

25

Option DROP_EXISTING
Erlutern Sie, wie die Option DROP_EXISTING verwendet wird, mit der die Indexdefinition gendert oder Indizes neu erstellt werden knnen.

Thema

Einstieg

Verwenden Sie die Option DROP_EXISTING, um die Indexdefinition zu ndern oder Indizes neu zu erstellen.

Erneutes Erstellen eines Indexes Die Seiten der Blattebene werden neu organisiert Die Fragmentierung wird entfernt Die Indexstatistiken werden erneut berechnet ndern der Indexeigenschaften Typ Indexspalten Optionen
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) ON [Order Details] (OrderID, ProductID) WITH DROP_EXISTING, FILLFACTOR=65 WITH DROP_EXISTING, FILLFACTOR=65

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe der Option DROP_EXISTING knnen Sie die Eigenschaften eines Indexes ndern oder Indizes neu erstellen, ohne dass hierzu der Index gelscht und anschlieend neu erstellt werden muss. Die Option DROP_EXISTING hat den Vorteil, dass damit Indizes gendert werden knnen, die mit PRIMARY KEY- oder UNIQUE-Einschrnkungen erstellt wurden.

Erneutes Erstellen eines Indexes


Fhren Sie die CREATE INDEX-Anweisung mit der Option DROP_EXISTING aus, um einen benannten gruppierten oder nicht gruppierten Index neu zu erstellen: Die Seiten der Blattebene werden neu organisiert, indem Zeilen komprimiert oder erweitert werden. Die Fragmentierung wird entfernt. Die Indexstatistiken werden erneut berechnet. Weitere Informationen
Sprechen Sie nicht ber die DBCC DBREINDEXAnweisung. DROP_EXISTING stellt mehr Funktionalitt bereit. Der einzige Vorteil der DBCC DBREINDEXAnweisung besteht darin, dass mehrere Indizes gleichzeitig neu erstellt werden knnen.

ndern der Indexeigenschaften


Mit Hilfe der Option DROP_EXISTING knnen die folgenden Indexeigenschaften gendert werden: Typ Sie knnen einen nicht gruppierten Index in einen gruppierten Index ndern. Ein gruppierter Index kann jedoch nicht in einen nicht gruppierten Index gendert werden.

26

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Indexspalten Sie knnen die Indexdefinition ndern, um andere Spalten anzugeben. Sie knnen in einem zusammengesetzten Index zustzliche Spalten angeben oder angegebene Spalten daraus entfernen. Sie knnen die Indexspalten in eindeutige oder nicht eindeutige Spalten ndern. Optionen Sie knnen den fr die Optionen FILLFACTOR und PAD_INDEX festgelegten Prozentsatz ndern. Bercksichtigen Sie die folgenden Aspekte und Richtlinien, wenn Sie die Option DROP_EXISTING verwenden: Bei Verwendung eines gruppierten Indexes erfordert SQL Server die Freigabe des 1,2-fachen Tabellenspeicherplatzes, um die Daten physisch neu organisieren zu knnen. Die Option DROP_EXISTING beschleunigt die Erstellung gruppierter und nicht gruppierter Indizes, da das Sortierverfahren nicht durchgefhrt wird. Verwenden Sie zusammen mit der Option DROP_EXISTING die Option FILLFACTOR, wenn Sie mchten, dass die Seiten der Blattebene bis zu einem bestimmten Prozentsatz gefllt werden. Dies kann sehr ntzlich sein, wenn Speicherplatz fr neue Daten reserviert oder der Index komprimiert werden muss. Fr Systemtabellen knnen Sie keine Indizes neu erstellen. Wenn Sie die Option DROP_EXISTING bei einem gruppierten Index verwenden, vermeiden Sie unntige Arbeiten wie das Lschen und erneute Erstellen von nicht gruppierten Indizes, wenn der gruppierte Index fr die gleiche Spalte neu erstellt wird. Die nicht gruppierten Indizes werden einmal neu erstellt, dies aber nur dann, wenn die Schlssel unterschiedlich sind. Beispiel In diesem Beispiel wird der vorhandene Index U_OrdID_ProdID der Order Details-Tabelle neu erstellt. Der Index wird als ein gruppierter zusammengesetzter Index mit einer angegebenen Option neu definiert. Mit dieser Option werden smtliche Datenseiten zu 65 Prozent gefllt. Beachten Sie, dass bei der Anweisung ein Fehler auftritt, wenn fr die Order Details-Tabelle bereits ein gruppierter Index vorhanden ist.
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) WITH DROP_EXISTING, FILLFACTOR=65

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

27

bungseinheit A: Erstellen und Verwalten von Indizes


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen Sie Indizes und ermitteln die Gre und Dichte von Indizes.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von Indizes. Ermitteln der Gre und Dichte von Indizes.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L07 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L07\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore07A.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage.

28

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

29

bung 1 Erstellen von Indizes


In dieser bung erstellen Sie mehrere Indizes, die fr einige Tabellen der ClassNorthwind-Datenbank FOREIGN KEY-Einschrnkungen bercksichtigen. So erstellen Sie einen Index fr die Tabelle Orders Mit diesem Verfahren ffnen Sie eine Skriptdatei, mit der ein Index erstellt werden soll, berprfen deren Inhalt, fhren das Skript aus und berprfen anschlieend, ob der Index erstellt wurde. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen Sie die Skriptdatei C:\Moc\2328A\Labfiles\L07\CreaIndx1.sql. 5. berprfen Sie die CREATE INDEX-Anweisung. Mit diesem Skript wird ein nicht gruppierter Index mit Namen Orders_Customers_link fr die CustomerID-Spalte in der OrdersTabelle mit einem Fllfaktorwert von 75 erstellt. 6. Fhren Sie die Skriptdatei aus. 7. berprfen Sie, ob der Index Orders_Customers_link erstellt wurde, indem Sie die folgende Anweisung ausfhren:
EXEC sp_help Orders

Die Ausgabe der gespeicherten Systemprozedur sp_help zeigt, dass der nicht gruppierte Index Orders_Customer_link fr die CustomerID-Spalte in der Orders-Tabelle vorhanden ist.

30

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

So erstellen Sie Indizes fr Fremdschlssel, die auf die Tabelle Products verweisen Mit diesem Verfahren erstellen Sie unter Verwendung der folgenden Informationen gruppierte und nicht gruppierte Indizes fr smtliche Fremdschlsselverweise in der Products-Tabelle. Sie knnen hierzu entweder den Indexerstellungs-Assistenten von SQL Server Enterprise Manager verwenden oder in SQL Query Analyzer eine Transact-SQL-Anweisung schreiben. Ein vollstndiges Skript fr dieses Verfahren finden Sie in C:\Moc\2328A\Labfiles\L07\Answers\CreaIndx2.sql. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Schreiben Sie ein Skript zur Erstellung der folgenden Indizes, und fhren Sie es aus.
Indextyp Gruppiert Name Tabelle Spalte Fllfaktorwert Products_CategoryID_link Products CategoryID 0

Nicht gruppiert Products_SupplierID_link Products SupplierID 0


CREATE CLUSTERED INDEX Products_CategoryID_link ON Products(CategoryID) CREATE NONCLUSTERED INDEX Products_SupplierID_link ON Products(SupplierID)

3. Fhren Sie eine Abfrage der sysindexes-Systemtabelle durch, um zu berprfen, ob die Indizes erstellt wurden.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

31

So berprfen Sie, ob die von Ihnen erstellten Indizes vorhanden sind In diesem Verfahren fhren Sie verschiedene Anweisungen aus, mit denen Sie berprfen, ob die von Ihnen erstellten Indizes vorhanden sind und korrekt arbeiten. 1. Fhren Sie die gespeicherte Systemprozedur sp_helpindex fr die OrdersTabelle aus. Wie sieht das Ergebnis aus? Orders_Customers_link. ____________________________________________________________ ____________________________________________________________ 2. Fhren Sie die gespeicherte Systemprozedur sp_helpindex fr die Products-Tabelle aus. Warum sind Indizes fr die Fremdschlsselspalten vorhanden? Ein Index fr einen Fremdschlssel ist zwar nicht zwingend erforderlich, wird aber empfohlen, um eine Verbindung zwischen den Fremdschlsselelementen und dem Primrschlssel herzustellen. ____________________________________________________________ ____________________________________________________________ Weshalb ist keiner dieser Indizes eindeutig? Weil diese Indizes Fremdschlssel beinhalten. Zwischen Primr- und Fremdschlsseln besteht hufig eine 1:n-Beziehung. Daher kann sich ein eindeutiger Schlsselwert im Primrschlssel auf mehrere identische Schlsselwerte in der Fremdschlsselspalte beziehen. ____________________________________________________________ ____________________________________________________________

32

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

bung 2 Untersuchen von Indexstrukturen


In dieser bung verwenden Sie SQL Query Analyzer, um vor dem Erstellen von Indizes die Tabellenstrukturen zu untersuchen. Sie erstellen verschiedene Arten von Indizes mit unterschiedlichen Fllfaktoren und beobachten die Auswirkungen auf die Tabellenstruktur. Sie knnen Abschnitte der Skriptdatei ExamIndex.sql im Ordner C:\Moc\2328A\Labfiles\L07 ffnen, sichten und ausfhren, oder Sie knnen die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So zeigen Sie die ursprngliche Tabellenstruktur an In diesem Verfahren fhren Sie eine Transact-SQL-Anweisung aus, um Informationen ber die Member-Tabelle abzurufen. 1. Geben Sie diese Anweisungen einzeln ein, und fhren Sie sie einzeln aus, um Informationen ber die Member-Tabelle abzurufen:
USE credit GO EXEC sp_spaceused member SELECT * FROM sysindexes WHERE id = OBJECT_ID('member') DBCC SHOWCONTIG ('member')

2. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Anzahl Zeilen Anzahl Indizes Quelle sp_spaceused: rows SELECT * FROM sysindexes WHERE id = OBJECT_ID('member') Ergebnis 10.000 Zwei. Eine Zeile in sysindexes mit einer 0 als Wert fr indid steht fr die Tabelle selbst. 145 69

Anzahl Seiten Anzahl Zeilen pro Seite

SHOWCONTIG: Gescannte Seiten Berechnen Sie die Ergebnisse, und runden Sie den Wert auf. (Anzahl Zeilen / Anzahl Seiten) = Anzahl Zeilen pro Seite SHOWCONTIG: Blockwechsel SHOWCONTIG: Seiten pro Block (Durchschnitt) SHOWCONTIG: Mittlere Seitendichte (voll)

Anzahl Blcke Durchschnittl. Blockfllung Durchschnittl. Seitenfllung

18 7.6 98.82%

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

33

So erstellen Sie einen gruppierten Index In diesem Verfahren erstellen Sie einen eindeutigen gruppierten Index und beobachten die nderungen an der Tabellenstruktur. Darber hinaus rufen Sie auch Informationen ber die Indexstruktur ab. 1. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um einen eindeutigen gruppierten Index fr die member_no-Spalte der Member-Tabelle ohne Angabe eines Fllfaktors zu erstellen:
USE credit CREATE UNIQUE CLUSTERED INDEX mem_no_CL ON member (member_no)

2. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um Informationen ber die Member-Tabelle abzurufen:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member') DBCC SHOWCONTIG ('member')

3. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Anzahl gruppierter Indexseiten Anzahl Datenseiten im gruppierten Index Anzahl Nicht-Datenseiten im gruppierten Index Anzahl Indizes Quelle sysindexes row: used sysindexes row: dpages (used dpages) SELECT * FROM sysindexes Ergebnis 183 145 183 - 145 = 38 Drei. Eine Zeile in sysindexes mit einer 1 als Wert fr indid steht fr den gruppierten Index. 145 69

Anzahl Seiten Anzahl Zeilen pro Seite

SHOWCONTIG: Gescannte Seiten Berechnen Sie die Ergebnisse, und runden Sie den Wert auf. (Anzahl Zeilen / Anzahl Seiten) = Anzahl Zeilen pro Seite

Anzahl Blcke Durchschnittl. Blockfllung Durchschnittl. Seitenfllung

SHOWCONTIG: Blockwechsel SHOWCONTIG: Seiten pro Block (Durchschnitt) SHOWCONTIG: Mittlere Seitendichte (voll)

18 7.6 98.82%

34

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Sind die Seiten immer noch voll? Ja. ____________________________________________________________ ____________________________________________________________ Ist die Tabelle noch immer fortlaufend? Ja. ____________________________________________________________ ____________________________________________________________ Werden die Seiten mit dem Erstellen eines gruppierten Index immer komprimiert? Begrndung? Nein. Mit dem Erstellen eines gruppierten Index werden die Seiten nicht immer komprimiert. Dies ist abhngig von der Natur der Daten. Seiten knnen komprimiert werden, wenn die Tabelle aufgrund von Aktualisierungen des Schlsselwertes oder aufgrund von unsortierten Einfgungen und Lschungen fragmentiert ist. Wenn die Seiten bereits komprimiert wurden, hat das Erstellen eines gruppierten Index keinerlei diesbezgliche Auswirkungen. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ So erstellen Sie einen nicht gruppierten Index In diesem Verfahren erstellen Sie einen nicht gruppierten Index und rufen Informationen ber die Indexstruktur ab. 1. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um den im Vorfeld erstellten Index zu lschen:
USE credit EXEC index_cleanup member

2. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um einen nicht gruppierten Index fr die firstname-Spalte der Member-Tabelle ohne Angabe eines Fllfaktors zu erstellen:
USE credit CREATE NONCLUSTERED INDEX indx_fname ON member(firstname)

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

35

3. Geben Sie die nachstehende SELECT-Anweisung ein, und fhren Sie sie aus, mit der die sysindexes-Zeilen fr die Member-Tabelle abgerufen werden:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

4. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Anzahl Seiten im nicht gruppierten Index fr die firstname-Spalte Anzahl Seiten auf der Blattebene Ungefhre Anzahl Zeilen pro Blattseite Quelle sysindexes: used sysindexes: dpages (Anzahl Zeilen in Tabelle / Anzahl Seiten auf der Blattebene) Ergebnis 35 33 (10000 / 33) = 303

So erstellen Sie einen nicht gruppierten Index mit einem Fllfaktor In diesem Verfahren erstellen Sie einen nicht gruppierten Index und beobachten die nderungen an der Tabellenstruktur. 1. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um den nicht gruppierten Index der Member-Tabelle zu lschen:
USE credit EXEC index_cleanup member

2. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um dem gleichen Index mit einem Fllfaktor von 25 % zu erstellen:
USE credit CREATE NONCLUSTERED INDEX indx_fname ON member(firstname) WITH FILLFACTOR=25

3. Geben Sie die nachstehende SELECT-Anweisung ein, und fhren Sie sie aus, mit der die sysindexes-Zeilen fr die Member-Tabelle abgerufen werden:
USE credit SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

36

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

4. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Anzahl Seiten in diesem Index Anzahl Seiten auf der Blattebene Ungefhre Anzahl Zeilen pro Blattseite Quelle sysindexes: used sysindexes: dpages (Anzahl Zeilen in Tabelle / Anzahl Seiten auf der Blattebene) Ergebnis 132 130 (10000 / 130) = 77

Ist der Grenanstieg auf Blattebene proportional zum Fllfaktor? Ja, der Anstieg ist proportional. _____________________________________________________________ Wie knnen Sie feststellen, ob der Grenanstieg auf der Blattebene proportional zum Grenfaktor von 25 % erfolgt ist? Bei Verwendung eines Fllfaktors von 0 (Standard) passen auf eine Blattseite 303 Zeilen. 303 multipliziert mit 25 Prozent ergibt ungefhr 77 Zeilen. Diese Anzahl Zeilen passt auf eine Blattseite, die nur zu 25 % gefllt ist. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

37

Einfhrung in die Arbeit mit Statistiken


Thema
Geben Sie eine bersicht ber die Themen dieses Abschnitts.

Sammeln von Statistiken Speichern von Statistiken Erstellen von Statistiken Aktualisieren von Statistiken Anzeigen von Statistiken

Einstieg

Statistiken knnen fr Indizes und Spalten erstellt werden. Da der Abfrageoptimierer Statistiken verwendet, um Abfragen zu optimieren, sollten Sie wissen, wo diese Daten gesammelt, gespeichert, erstellt, aktualisiert und angezeigt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Statistiken knnen fr Indizes und Spalten erstellt werden. Da der Abfrageoptimierer Statistiken verwendet, um Abfragen zu optimieren, sollten Sie wissen, wo diese Daten gesammelt, gespeichert, erstellt, aktualisiert und angezeigt werden.

38

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Sammeln von Statistiken


Erlutern Sie, wie SQL Server Statistiken sammelt.

Thema

Lesen von Spaltenwerten oder einer Stichprobe aus Spaltenwerten Erzeugt eine gleichmig verteilte und sortierte Liste mit Werten Ausfhren eines vollstndigen Scans oder Erheben von Stichproben aus Zeilen Der Prozentsatz der Zeilen, aus denen Stichproben genommen werden sollen, wird basierend auf der Anzahl der Zeilen in der Tabelle dynamisch ermittelt Auswhlen von Stichproben Aus der Tabelle oder dem kleinsten nicht gruppierten Index der Spalten Alle Zeilen der Datenseite werden verwendet, um die statistischen Daten zu aktualisieren

Einstieg

Statistiken sind eine Stichprobe aus Spaltenwerten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Statistiken sind eine Stichprobe aus Spaltenwerten.

Lesen von Spaltenwerten oder einer Stichprobe aus Spaltenwerten


SQL Server sammelt Statistiken, indem eine Stichprobe aus den Spaltenwerten oder alle Spaltenwerte gelesen werden, um eine gleichmig verteilte und sortierte Liste mit Werten zu erstellen, die als Verteilungsschritte bezeichnet werden. SQL Server erzeugt Verteilungsschritte mit Hilfe eines vollstndigen Scans oder mit Hilfe eines Stichprobenscans, aus dem dann Stichproben ausgewhlt werden.

Ausfhren eines vollstndigen Scans oder Erheben von Stichproben aus Zeilen
SQL Server ermittelt basierend auf der Anzahl der Zeilen in der Tabelle dynamisch den Prozentsatz der Zeilen, aus denen Stichproben genommen werden sollen. Der Abfrageoptimierer fhrt beim Sammeln von Statistiken entweder einen vollstndigen Scan durch oder nimmt Stichproben aus Zeilen. Die Option SAMPLE ist die Standardoption fr das Aktualisieren und Erstellen von Statistiken. Die Option FULLSCAN wird in folgenden Fllen verwendet: Indizes werden erstellt. Die Option FULLSCAN ist in der CREATE STATISTICS-Anweisung angegeben. Die UPDATE STATISTICS-Anweisung wird ausgefhrt.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

39

Auswhlen von Stichproben


Die Stichprobe wird zufllig aus den Datenseiten der Tabelle oder aus dem kleinsten nicht gruppierten Index der Spalten ausgewhlt, die fr die Statistiken bentigt werden. Nachdem eine Datenseite vom Datentrger gelesen wurde, werden alle Zeilen auf der Datenseite verwendet, um die statistischen Daten zu aktualisieren. Wenn der Abfrageoptimierer Stichproben sammelt, ist Folgendes zu bercksichtigen: Die Tabellengre bestimmt die zu whlende Methode. Es wird die minimale Anzahl von Werten als Stichprobe genommen, mit der sinnvolle Statistiken abgeleitet werden knnen. Wenn die Anzahl der angegebenen Zeilen fr ein aussagefhiges Ergebnis zu gering ist, korrigiert der Abfrageoptimierer die Stichprobenerhebung automatisch basierend auf der Anzahl der in der Tabelle vorhandenen Zeilen. Statistiken werden lediglich fr die erste in einem zusammengesetzten Index definierte Spalte beibehalten.

40

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Speichern von Statistiken


Erlutern Sie, wie Statistiken in SQL Server gespeichert werden.

Thema

Sales

Einstieg

Statistiken werden in der statblob-Spalte der sysindexes-Systemtabelle gespeichert.

Status Status

Schritt

Schritt#

AL AL AK AK CA CA CA CA CA CA CT CT IL IL IL IL IL IL IL IL IL IL MT MT OR OR OR OR PA PA TX TX TX TX WA WA WA WA WA WA WI WI WY WY

AL CA IL IL OR TX WA WY

0 1 2 3 4 5 6 7 sysindexes
statblob statblob

AL AL CA CA IL IL IL IL OR OR TX TX WA WA WY WY

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Statistiken werden in der statblob-Spalte der sysindexes-Systemtabelle gespeichert.

Wenn Sie einen Index fr die Sales-Tabelle erstellen, erstellt SQL Server automatisch Statistiken. Dieses Beispiel veranschaulicht das Erstellen von Statistiken durch SQL Server.

Verteilungsschritte
Jeder in der statblob-Spalte gespeicherte Wert wird als Verteilungsschritt bezeichnet. Verteilungsschritte beziehen sich auf den Abstand zwischen den Stichprobendaten bzw. darauf, wie viele Zeilen bersprungen werden, bevor die nchste Stichprobe genommen und gespeichert wird. Die ersten und letzten Schlsselwerte im Index sind immer in der Statistik eingeschlossen. Dies knnen bis zu 300 Werte sein, von denen der 300. Wert den Endpunkt darstellt.

Inhalt der statblob-Spalte


Neben den Verteilungsschritten wird in der statblob-Spalte auch Folgendes gespeichert: Datum und Uhrzeit der letzten Aktualisierung der Statistik. Anzahl der Zeilen in der Tabelle. Anzahl der Zeilen der Stichprobenerhebung zum Erstellen des Histogramms und zum Ermitteln der Dichte. Anzahl der Verteilungsschritte. Durchschnittliche Schlssellnge. Dichte fr die einzelnen Spalten und fr alle kombinierten Spalten. Anzahl der Zeilen, die in einen Histogrammschritt fallen.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

41

Anzahl der Zeilen, deren Wert identisch mit dem oberen Grenzwert des Histogrammschrittes ist. Anzahl der unterschiedlichen Werte innerhalb eines Histogrammschrittes. Anmerkung Fr die statblob-Spalte wird der Datentyp image definiert.

42

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Erstellen von Statistiken


Thema
Erlutern Sie, wann Statistiken erstellt und warum sie erstellt werden.

Automatisches Erstellen von Statistiken Indizierte Spalten, die Daten enthalten Nicht indizierte Spalten, die in einem JOIN-Prdikat oder in einer WHERE-Klausel verwendet werden Manuelles Erstellen von Statistiken Fr Spalten, die nicht indiziert sind Fr alle Spalten auer der ersten Spalte eines zusammengesetzten Indexes

Einstieg

Sie knnen Statistiken automatisch oder manuell erstellen. Es empfiehlt sich jedoch, SQL Server die Statistiken automatisch erstellen zu lassen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Statistiken automatisch oder manuell erstellen. Es empfiehlt sich jedoch, SQL Server die Statistiken automatisch erstellen zu lassen.

Automatisches Erstellen von Statistiken


Wenn die standardmige Datenbankoption auto create statistics auf ON festgelegt ist, erstellt SQL Server automatisch Statistiken fr die folgenden Elemente: Indizierte Spalten, die Daten enthalten. Nicht indizierte Spalten, die in einem JOIN-Prdikat oder in einer WHEREKlausel verwendet werden. Der Abfrageoptimierer aktiviert die automatische Erstellung von Statistiken beim Optimieren einer Abfrage. Dies kann sich nachteilig auswirken, wenn der Abfrageoptimierer feststellt, dass Statistiken fehlen. Der Ausfhrungsplan schliet die Aktion zur Erstellung von Statistiken ein, wofr beim Verarbeiten der Abfrage zustzliche Zeit bentigt wird. Anmerkung Wenn Sie eine Abfrage ausfhren und den Ausfhrungsplan anzeigen, schlgt der Abfrageoptimierer mglicherweise eine Aktion zum Beheben des Fehlers vor, wie beispielsweise das Erstellen oder Aktualisieren von Statistiken oder das Erstellen eines Indexes. An diesem Punkt knnen Sie Statistiken und Indizes sofort erstellen oder aktualisieren.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

43

Manuelles Erstellen von Statistiken


Sie knnen die CREATE STATISTICS-Anweisung ausfhren, um ein Histogramm und hiermit verbundene Dichtegruppen fr bestimmte Spalten zu erstellen. Statistiken knnen fr folgende Spalten erstellt werden: Spalten, die nicht indiziert sind. Alle Spalten auer der ersten Spalte eines zusammengesetzten Indexes. Berechnete Spalten nur dann, wenn die Bedingungen zum Erstellen eines Indexes fr diese Spalten erfllt sind. Spalten, fr die nicht die Datentypen image, text und ntext definiert wurden. Das manuelle Erstellen von Statistiken ist sinnvoll bei einer Spalte, fr die ein Index zwar keine Vorteile brchte, bei der Statistiken fr diese Spalte jedoch fr das Erstellen eines leistungsfhigeren Ausfhrungsplanes von Nutzen wre. Werden fr solche Spalten Statistiken erstellt, erbrigt sich der Verwaltungsaufwand fr ein Index, whrend der Abfrageoptimierer die Spalte jedoch fr das Optimieren von Abfragen heranziehen kann. Anmerkung Um manuell Statistiken fr eine Tabelle erstellen zu knnen, mssen Sie der Besitzer der Tabelle sein. Teilsyntax CREATE STATISTICS statistics_name ON {table| view} (column [,...n])

44

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Aktualisieren von Statistiken


Thema
Erlutern Sie, wie SQL Server ermittelt, wie oft und wann Statistiken aktualisiert werden mssen.

Hufigkeit der Aktualisierung von Statistiken Automatisches Aktualisieren von Statistiken Manuelles Aktualisieren von Statistiken Wenn Sie einen Index erstellen, bevor eine Tabelle mit Daten gefllt wird Wenn die Tabelle abgeschnitten wurde Wenn Sie viele Zeilen zu einer Tabelle hinzufgen, die wenig oder gar keine Daten enthlt, und Sie fr die Tabelle sofort eine Abfrage ausfhren mchten

Einstieg

Nach einer gewissen Zeit knnen Statistiken veraltet sein, wodurch die Leistung des Abfrageoptimierers beeintrchtigt wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Nach einer gewissen Zeit knnen Statistiken veraltet sein, wodurch die Leistung des Abfrageoptimierers beeintrchtigt wird.

Hufigkeit der Aktualisierung von Statistiken


SQL Server aktualisiert die statistischen Daten, wenn die Daten veraltet sind. Hierbei bestimmt die Menge der Daten in der Spalte und das Verhltnis zur Menge der sich ndernden Daten die Hufigkeit der Aktualisierung. Beispiel: Die Statistiken einer Tabelle mit 10.000 Zeilen muss mglicherweise aktualisiert werden, wenn 1.000 Indexwerte gendert wurden, da 1.000 Indexwerte einen signifikanten Prozentsatz der Tabelle darstellen. Die Statistik einer Tabelle mit 10 Millionen Indexeintrgen muss mglicherweise nicht aktualisiert werden, wenn 1.000 Indexwerte gendert wurden, da 1.000 Indexwerte bei dieser Tabelle nur einen geringen Prozentsatz darstellen. SQL Server nimmt immer eine minimale Anzahl von Zeilen als Stichprobe. Tabellen, die kleiner als 8 MB sind, werden beim Sammeln statistischer Daten immer vollstndig gescannt. Anmerkung SQL Server gibt eine Warnung aus, wenn Statistiken veraltet sind oder nicht verfgbar. Diese Warnung wird angezeigt, wenn der Ausfhrungsplan angezeigt wird, indem SQL Query Analyzer ausgefhrt wird. Sie knnen mit Hilfe von SQL Profiler die Ereignisklasse Missing Column Statistics berwachen. Diese Ereignisklasse zeigt an, dass Statistiken fehlen.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

45

Automatisches Aktualisieren von Statistiken


Es empfiehlt sich, SQL Server die Statistiken automatisch aktualisieren zu lassen. Wenn die Datenbankoption auto update statistics auf ON festgelegt wurde (Standard), aktualisiert SQL Server vorhandene Statistiken automatisch, wenn diese ihre Gltigkeit verlieren. Wenn beispielsweise eine Tabelle seit der letzten Erstellung oder Aktualisierung der Statistik umfangreiche Aktualisierungen erfahren hat, aktualisiert SQL Server automatisch die Statistik, um Abfragen zu optimieren, die auf die Tabelle zugreifen. Der Abfrageoptimierer aktiviert das automatische Aktualisieren von Statistiken beim Optimieren einer Abfrage. Dies kann sich nachteilig auswirken, wenn der Abfrageoptimierer feststellt, dass Statistiken veraltet sind. Der Ausfhrungsplan schliet die Aktion zum Aktualisieren von Statistiken ein, wofr beim Verarbeiten der Abfrage zustzliche Zeit bentigt wird.

Manuelles Aktualisieren von Statistiken


Sie knnen die UPDATE STATISTICS-Anweisung ausfhren, um die Informationen zur Verteilung von Schlsselwerten fr eine oder mehrere Statistiken in einer angegebenen Tabelle zu aktualisieren. In den folgenden Fllen mchten Sie die Statistiken einer Tabelle oder einer Spalte mglicherweise manuell aktualisieren: Wenn Sie einen Index erstellen, bevor eine Tabelle mit Daten gefllt wird. Wenn die Tabelle abgeschnitten wurde. Wenn Sie viele Zeilen zu einer Tabelle hinzufgen, die wenig oder gar keine Daten enthlt, und Sie fr die Tabelle sofort eine Abfrage ausfhren mchten. Teilsyntax UPDATE STATISTICS table| view [index | (statistics_name[,...n])] Anmerkung Um eine Liste von Indexnamen und Beschreibungen anzuzeigen, fhren Sie die gespeicherte Systemprozedur sp_helpindex unter Angabe des Tabellennamens aus.

46

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Anzeigen von Statistiken


Thema
Erlutern Sie, wie Informationen zu Statistiken angezeigt werden.

Einstieg

Sie knnen statistische Daten auf der Verteilungsseite eines Indexes oder einer Spalte anzeigen, indem Sie die DBCC SHOW_STATISTICSAnweisung ausfhren.

Die DBCC SHOW_STATISTICS-Anweisung gibt statistische Daten auf der Verteilungsseite eines Indexes oder einer Spalte zurck Zu den statistischen Daten gehren die folgenden: Die Uhrzeit der letzten Aktualisierung der Statistik Die Anzahl der als Stichproben genommenen Zeilen, um das Histogramm zu erstellen Informationen zur Datendichte Die durchschnittliche Schlssellnge Informationen zu den Histogrammschritten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen statistische Daten auf der Verteilungsseite eines Indexes oder einer Spalte anzeigen, indem Sie die DBCC SHOW_STATISTICS-Anweisung ausfhren. In der folgenden Tabelle werden die Informationen erlutert, die von der DBCC SHOW_STATISTICS-Anweisung zurckgegeben werden.
Spaltenname Updated Rows Rows sampled Steps Density Average key length All density Average length Columns RANGE_HI_KEY RANGE_ROWS Beschreibung Datum und Uhrzeit der letzten Aktualisierung der Statistik Anzahl der Zeilen in der Tabelle Anzahl der Zeilen, die fr statistische Daten als Stichproben genommen wurden Anzahl der Verteilungsschritte Selektivitt des ersten Indexspaltenprfixes (nicht hufig) Durchschnittliche Lnge des ersten Indexspaltenprfixes Selektivitt einer Gruppe von Indexspaltenprfixen (hufig) Durchschnittliche Lnge einer Gruppe von Indexspaltenprfixen Namen der Indexspaltenprfixe, fr die All density und Average length angezeigt werden Oberer Grenzwert fr einen Histogrammschritt Anzahl der Zeilen aus der Stichprobe, die in einen Histogrammschritt fallen, mit Ausnahme des oberen Grenzwertes

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes (Fortsetzung) Spaltenname EQ_ROWS Beschreibung

47

Anzahl von Zeilen aus der Stichprobe, deren Wert identisch mit dem oberen Grenzwert des Histogrammschrittes ist Anzahl von unterschiedlichen Werten in einem Histogrammschritt, mit Ausnahme des oberen Grenzwertes Durchschnittliche Anzahl von doppelten Werten in einem Histogrammschritt, mit Ausnahme des oberen Grenzwertes (RANGE_ROWS / DISTINCT_RANGE_ROWS for DISTINCT_RANGE_ROWS > 0)

DISTINCT_RANGE_ROWS AVG_RANGE_ROWS

Syntax

DBCC SHOW_STATISTICS (table, target) Das Anzeigen von Statistiken erweist sich in der Regel als ntzlich, wenn Sie fr bestimmte Abfragen eine Leistungsoptimierung auf hchster Ebene vornehmen. Bei den meisten Anwendungen ist es nicht erforderlich, Statistiken anzuzeigen.

48

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Abfragen der sysindexes-Tabelle


Thema
Erlutern Sie, wie die sysindexes-Tabelle abgefragt wird, um Tabellen- und Indexinformationen abzurufen.

Speichern von Tabellen- und Indexinformationen Indextyp (indid) Verwendeter Speicherplatz (dpages, reserved und used) Fllfaktor (OrigFillFactor) Speichern von Statistiken fr jeden Index

Einstieg

Sie knnen die sysindexesTabelle abfragen, um zustzlich zu Statistiken fr jeden Index Informationen zu Tabelle und Index abzurufen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen die sysindexes-Tabelle abfragen, um zustzlich zu Statistiken fr jeden Index Informationen zu Tabelle und Index abzurufen. Die folgende Tabelle enthlt einen Teil der Informationen, die angezeigt werden knnen und die von den in der sysindexes-Tabelle gespeicherten Daten stammen.
Spalte indid (Indextyp) Beschreibung ID des Indexes (Indextyp) Werte Folgende Werte sind mglich: 0 fr nicht gruppierte Tabelle 1 fr gruppierten Index >1 fr nicht gruppierten Index 255 fr Tabellen, die Daten vom Typ text oder image enthalten dpages (verwendeter Speicherplatz) Anzahl der Indexseiten auf Blattebene Fr indid = 0 oder indid = 1 ist dpages die Anzahl der verwendeten Datenseiten. Fr indid = 255 wird dpages auf 0 festgelegt. Andernfalls ist dpages die Anzahl der verwendeten, nicht gruppierten Indexseiten. reserved (verwendeter Speicherplatz) Anzahl der fr einen Index reservierten Seiten Fr indid = 0 oder indid = 1 ist reserved die Anzahl der fr alle Indizes und Tabellendaten reservierten Seiten. Fr indid = 255 ist reserved die Anzahl der fr text- oder image-Daten reservierten Seiten. Andernfalls ist reserved die Anzahl der fr den Index reservierten Seiten.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes (Fortsetzung) Spalte used (verwendeter Speicherplatz) Beschreibung Gre des von einem Index verwendeten Speicherplatzes Werte Fr indid = 0 oder indid = 1 ist used die Gesamtzahl der Seiten, die fr alle Index- und Tabellendaten verwendet werden. Fr indid = 255 ist used die Anzahl der fr text- oder image-Daten reservierten Seiten. Andernfalls ist used die Anzahl der fr den Index verwendeten Seiten. OrigFillFactor (Fllfaktor) Ursprnglicher Fllfaktorwert, der beim Erstellen des Indexes verwendet wurde Minimale Lnge einer Zeile Maximale Lnge einer Zeile Maximale Lnge einer NichtBlatt-Indexzeile Beschreibung von Schlsselspalten Anzahl der Aktualisierungen der Statistiken BLOB (Binary Large Object) der Statistik

49

Dieser Wert wird nicht verwaltet; er kann sich jedoch als ntzlich erweisen, wenn Sie einen Index neu erstellen mssen und sich nicht an den verwendeten Fllfaktor erinnern knnen. Ganzzahliger Wert. Ganzzahliger Wert. Ganzzahliger Wert. Trifft nur zu, wenn es sich bei dem Eintrag um einen Index handelt. Ganzzahliger Wert. Speichert statistische Daten.

minlen xmaxlen maxirow keys statversion statblob

Beispiel

Die in diesem Beispiel ausgefhrte Anweisung greift auf die Index-ID und weitere in der sysindexes-Systemtabelle gespeicherte Informationen zu. Um die Index-ID eines gruppierten Indexes zu ermitteln, mssen Sie in der WHEREKlausel den Namen des gruppierten Indexes (index_name) angeben.
SELECT id, indid, reserved, used, origfillfactor, name FROM Northwind.dbo.sysindexes WHERE name = 'PK_customers'

Ergebnis
id 2073058421 indid 1

reserved 15

used 15

origfillfactor 0

name PK_Customers

(1 row(s) affected)

50

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Einrichten von Indizes mit Hilfe des IndexoptimierungsAssistenten


Stellen Sie den Indexoptimierungs-Assistenten vor.

Thema

Der Indexoptimierungs-Assistent erfllt folgende Funktionen: Empfehlen oder berprfen der optimalen Indexkonfiguration Bereitstellen von Kostenanalyseberichten Empfehlen von Verfahren zum Optimieren der Datenbank Angeben von Kriterien fr ein Auswerten der Arbeitsauslastung Der Indexoptimierungs-Assistent sollte fr folgende Elemente nicht verwendet werden: Tabellen, auf die in datenbankbergreifenden Abfragen verwiesen wird und die nicht vorhanden sind Systemtabellen, PRIMARY KEY-Einschrnkungen, eindeutige Indizes

Einstieg

Der IndexoptimierungsAssistent kann Einsteigern ebenso wie fortgeschrittenen Benutzern von SQL Server dabei helfen, geeignete Indizes fr eine neue Datenbank zu erstellen oder die vorhandenen Indizes einer aktuellen Datenbank zu berprfen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Der Indexoptimierungs-Assistent kann Einsteigern ebenso wie fortgeschrittenen Benutzern von SQL Server dabei helfen, geeignete Indizes fr eine neue Datenbank zu erstellen oder die vorhandenen Indizes einer aktuellen Datenbank zu berprfen. Der Indexoptimierungs-Assistent bercksichtigt die Abfragelast, um zu ermitteln, welche Indizes sinnvoll sind, wohingegen das Feature Ausfhrungsplan anzeigt, welche Indizes in Abfragen verwendet werden.

Ermitteln, wann der Indexoptimierungs-Assistent verwendet werden sollte


Einsteigern ist der Assistent dabei behilflich, innerhalb krzester Zeit eine optimale Indexkonfiguration zu erstellen. Fortgeschrittene Benutzer knnen den Assistenten verwenden, um eine Ausgangsindexkonfiguration zu erstellen. Fortgeschrittene Benutzer knnen die vorhandenen Indexkonfigurationen dann auf benutzerdefinierte Weise optimieren oder berprfen. Der Indexoptimierungs-Assistent erfllt folgende Funktionen: Empfehlen oder berprfen der optimalen Indexkonfiguration fr eine Datenbank unter Bercksichtigung einer bestimmten Arbeitsauslastung oder Ablaufverfolgungsdatei mit Hilfe der Kostenanalyse des Abfrageoptimierers. Bereitstellen von Kostenanalyseberichten ber die Auswirkungen der vorgeschlagenen nderungen, wie z. B. die folgenden: Beanspruchung aktueller und empfohlener Indizes. Verbesserung der Abfrageleistung fr die hundert teuersten Abfragen und den Anteil der Tabellen an der Arbeitsauslastung.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

51

Empfehlen von Verfahren zum Optimieren der Datenbank fr eine kleine Anzahl problematischer Abfragen. Angeben von Kriterien, die zu bercksichtigen sind, wenn der Indexoptimierungs-Assistent eine Arbeitsauslastung auswertet, wie beispielsweise die maximale Anzahl zu optimierender Abfragen, der maximal verfgbare Speicherplatz fr die empfohlenen Indizes und die maximale Anzahl der Spalten pro Index.

Ermitteln, wie der Assistent verwendet werden soll


Bercksichtigen Sie die folgenden Aspekte und Richtlinien, wenn Sie den Indexoptimierungs-Assistenten verwenden: Ein Benutzer, der den Indexoptimierungs-Assistenten aufruft, muss ein Mitglied der festen Serverrolle sysadmin sein, da die Abfragen in der Arbeitsauslastung im Sicherheitskontext des Benutzers analysiert werden. Der Indexoptimierungs-Assistent sollte fr folgende Elemente nicht verwendet werden: Tabellen, auf die in datenbankbergreifenden Abfragen verwiesen wird und die in der momentan ausgewhlten Datenbank nicht vorhanden sind. Systemtabellen PRIMARY KEY-Einschrnkungen und eindeutige Indizes. Der Assistent knnte einen gruppierten Index lschen oder ersetzen, der nicht eindeutig ist oder der aktuell fr eine PRIMARY KEY-Einschrnkung erstellt wurde. Wenn die Option Alle vorhandenen Indizes beibehalten ausgewhlt wurde, sollten keine Indizes gelscht werden. Der Assistent empfiehlt nur neue Indizes, wenn dies angebracht erscheint. Wenn Sie diese Option deaktivieren, kann hierdurch jedoch eventuell hhere Leistungssteigerung der Arbeitsauslastung erzielt werden. Es empfiehlt sich, die Option Indizierte Sichten hinzufgen aktiviert zu lassen. Hinweise verhindern mglicherweise, dass der Indexoptimierungs-Assistent einen besseren Ausfhrungsplan whlt. Entfernen Sie mglichst alle Indexhinweise aus Abfragen, bevor Sie die Arbeitsauslastung analysieren. Wenn Sie die Ausfhrungszeit des Indexoptimierungs-Assistenten verringern mchten, sollten Sie folgendermaen vorgehen: Stellen Sie sicher, dass die Option Ausfhrliche Analyse durchfhren im Dialogfeld Server und Datenbank auswhlen nicht aktiviert ist. Durch das Ausfhren einer ausfhrlichen Analyse nimmt der Indexoptimierungs-Assistent eine umfassende Analyse der Abfragen vor, was eine lngere Ausfhrungszeit zur Folge hat. Wenn Sie diese Option aktivieren, kann hierdurch jedoch eventuell hhere Leistungssteigerung der optimierten Arbeitsauslastung erzielt werden. Nehmen Sie die Optimierung lediglich fr eine Teilmenge der Tabellen in der Datenbank vor.

52

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Reduzieren Sie die Gre der Arbeitsauslastungsdatei. Anmerkung Wenn Sie den Indexoptimierungs-Assistenten zum Analysieren eines Transact-SQL-Skripts verwenden, das nicht ber die Dateinamenerweiterung SQL verfgt, wie beispielsweise Mein_Skript.txt, und Sie die Datei ffnen, whrend Dateiformat auf Auto festgelegt ist, erzeugt der Assistent die Fehlermeldung Kein gltiges Dateiformat. Legen Sie die Option Dateiformat stattdessen auf ANSI SQL oder auf UNICODE SQL fest.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

53

Leistungsaspekte
Erlutern Sie die Leistungsaspekte fr das Planen und Erstellen von Indizes.

Thema

Erstellen Sie Indizes fr Fremdschlssel Erstellen Sie gruppierte Indizes vor nicht gruppierten Indizes Erstellen Sie zusammengesetzte Indizes Erstellen Sie fr eine Tabelle, die hufig gelesen wird, mehrere Indizes Verwenden Sie den Indexoptimierungs-Assistenten

Einstieg

Gehen Sie beim Erstellen und Verwenden von Indizes folgendermaen vor, um eine Beeintrchtigung der Leistung so weit wie mglich zu vermeiden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Gehen Sie beim Erstellen und Verwenden von Indizes folgendermaen vor, um eine Beeintrchtigung der Leistung so weit wie mglich zu vermeiden: Erstellen Sie Indizes fr Fremdschlssel, da in Abfragen normalerweise auf Fremdschlssel verwiesen wird. Erstellen Sie gruppierte Indizes vor nicht gruppierten Indizes, da sich durch einen gruppierten Index die physische Reihenfolge der Tabellenzeilen ndert. Erstellen Sie zusammengesetzte Indizes. Die Abfrageleistung wird durch zusammengesetzte Indizes verbessert, vor allem wenn die Informationen von den Benutzern hufig auf unterschiedliche Weise abgefragt werden. Erstellen Sie fr eine Tabelle mehrere Indizes, vor allem wenn die Tabelle hufig gelesen wird. Die Abfrageleistung wird verbessert, wenn eine Tabelle sowohl ber einen gruppierten als auch ber nicht gruppierte Indizes verfgt. Verwenden Sie den Indexoptimierungs-Assistenten, um die Verwendung Ihrer Indizes automatisch nachverfolgen zu lassen. Er ist zudem beim Verwalten und Erstellen von Indizes mit optimaler Leistung hilfreich.

54

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

Empfohlene Methoden
Listen Sie die empfohlenen Methoden zum Verwenden oder Erstellen von Indizes auf.

Thema

Verwenden Sie die Option FILLFACTOR, um die Leistung Verwenden Sie die Option FILLFACTOR, um die Leistung zu optimieren zu optimieren Verwenden Sie die Option DROP_EXISTING, um Indizes zu verwalten Fhren Sie DBCC SHOWCONTIG aus, um die Fragmentierung zu ermitteln Lassen Sie SQL Server Statistiken automatisch erstellen und aktualisieren Erwgen Sie, Statistiken fr nicht indizierte Spalten zu erstellen, um effizientere Ausfhrungsplne zu erstellen

Einstieg

Um Ihre Indizes optimal nutzen zu knnen, sollten Sie die folgenden empfohlenen Methoden beachten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Um Ihre Indizes optimal nutzen zu knnen, sollten Sie die folgenden Methoden beachten: Verwenden Sie die Option FILLFACTOR, um die optimale Arbeitsweise von INSERT- und UPDATE-Anweisungen sicherzustellen. Diese Option ermglicht Ihnen, einen Prozentwert fr den freien Platz auf Seiten der Blattebene anzugeben. Mit Hilfe der Option DROP_EXISTING knnen Sie Indizes in kurzer Zeit neu erstellen. Fhren Sie die DBCC SHOWCONTIG-Anweisung aus, um den Grad der Fragmentierung einer Tabelle zu ermitteln. Mit der DBCC SHOWCONTIGAnweisung erhalten Sie Auskunft ber den Prozentsatz der Fragmentierung und die durchschnittliche Seitendichte innerhalb einer Tabelle. Lassen Sie SQL Server Statistiken automatisch erstellen und aktualisieren. Statistiken sind nach einer gewissen Zeit manchmal veraltet, wodurch die Leistung des Abfrageoptimierers beeintrchtigt werden kann. Sie sollten auto update statistics und auto create statistics daher auf ON festlegen. Erwgen Sie, Statistiken fr nicht indizierte Spalten und Sekundrspalten eines zusammengesetzten Indexes zu erstellen. Sie knnen die Abfrageleistung erhhen, ohne dass ein Verwaltungsaufwand fr zustzliche Indizes entsteht. Werden Statistiken erstellt, ist es dem Abfrageoptimierer mglich, effizientere Ausfhrungsplne zu erstellen.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

55

Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema Indexstatistik Suchbegriff sp_autostats DBCC SHOW_STATISTICS "Statistik aktualisieren" Erstellen von Indizes Berechnete Spalten Funktionen "Empfehlungen fr die Indexoptimierung" "SET-Optionen mit Auswirkungen auf Ergebnisse" "Deterministische und nicht deterministische Funktionen"

56

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

bungseinheit B: Anzeigen von Indexstatistiken


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit fhren Sie Abfragen aus und vergleichen Statistiken.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Schtzen der Dichte und Ermitteln der Selektivitt von Indizes. Anzeigen von Indexstatistiken, um zu ermitteln, ob der Index selektiv ist.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L07 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L07\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore07B.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr die bungseinheit erforderlich ist.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

57

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

58

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

bung 1 berprfen der Verwendung von Indizes


In dieser bung erstellen Sie Indizes, fhren eine Reihe von SELECT-Anweisungen aus, um die Dichte der vier Spalten in der Charge-Tabelle zu berprfen, und ermitteln die Selektivitt. Sie knnen Abschnitte der Skriptdatei ExamUse.sql im Ordner C:\Moc\2328A\Labfiles\L07 ffnen, sichten und ausfhren, oder Sie knnen die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie Indizes In diesem Verfahren lschen Sie die fr die Charge-Tabelle vorhandenen Indizes und erstellen nicht gruppierte Indizes. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um eindeutige, nicht gruppierte Indizes fr die Spalten charge_no, member_no, provider_no und category_no der Charge-Tabelle zu erstellen:
USE credit CREATE UNIQUE NONCLUSTERED INDEX charge_no_CL ON charge (charge_no) CREATE NONCLUSTERED INDEX indx_member_no ON charge (member_no) CREATE NONCLUSTERED INDEX indx_provider_no ON charge (provider_no) CREATE NONCLUSTERED INDEX indx_category_no ON charge (category_no) GO

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

59

So prfen Sie die Struktur der Charge-Tabelle In diesem Verfahren erstellen Sie Indizes fr die Charge-Tabelle und ermitteln die Minimal- und Maximalwerte fr indizierte Spalten. 1. Geben Sie die folgenden Anweisungen ein, oder markieren Sie sie, und fhren Sie sie aus, um die Minimal- und Maximalwerte fr die Spalten charge_no, member_no, provider_no und category_no zu erhalten:
SELECT 'Charge_No ', MIN(Charge_No) AS 'Minimum Value', MAX(Charge_No) AS 'Maximum Value' FROM charge UNION SELECT 'Member_No ', MIN(Member_No) AS 'Minimum Value', MAX(Member_No) AS 'Maximum Value' FROM charge UNION SELECT 'Provider_No ', MIN(Provider_No) AS 'Minimum Value', MAX(Provider_No) AS 'Maximum Value' FROM charge UNION SELECT 'Category_No ', MIN(Category_No) AS 'Minimum Value', MAX(Category_No) AS 'Maximum Value' FROM charge GO

2. Zeichnen Sie die Informationen in der folgenden Tabelle auf.


Value Min Max charge_no 1 100.000 member_no 41 10.000 provider_no 18 500 category_no 1 10

So ermitteln Sie die Selektivitt In diesem Verfahren fhren Sie eine Reihe von SELECT-Anweisungen aus, mit denen alle Zeilen in der Charge-Tabelle ausgewhlt werden. Fr jede SELECT-Anweisung wird ein Tabellenscan vorgenommen. Fr jede SELECTAnweisung wird zuerst die Abfrage ausgewhlt und dann der geschtzte Ausfhrungsplan angezeigt. Sie ndern die WHERE-Klausel so, dass der Abfrageoptimierer einen Index verwendet, um die Zeilen abzurufen, und fhren dann die Abfrage aus. Nach dem Ausfhren der Abfrage notieren Sie die maximale Anzahl Zeilen, die unter Verwendung eines Index zurckgegeben werden knnen, und werten diese aus.
USE credit SELECT * FROM charge WHERE charge_no BETWEEN 1 AND 100000 USE credit SELECT * FROM charge WHERE member_no BETWEEN 1 AND 10000 USE credit SELECT * FROM charge WHERE provider_no BETWEEN 1 AND 500 USE credit SELECT * FROM charge WHERE category_no between 1 AND 10

60

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

1. Markieren Sie die erste Anweisung, fhren Sie sie jedoch nicht aus. 2. Klicken Sie im Abfragefenster im Men Abfrage auf Geschtzten Ausfhrungsplan anzeigen. Beachten Sie den Abfrageplan fr die Anweisung. 3. ndern Sie den Bereich in den SELECT-Anweisungen so, dass der Abfrageoptimierer anstelle eines Tabellenscans oder eines vollstndigen Indexscans einen Index zum Abrufen der Zeilen verwendet. Bercksichtigen Sie bei der Auswahl eines Bereichs die folgenden Aspekte: Jede Seite verfgt ber ungefhr 172 Rechnungen (Charges). ltere Mitglieder und Provider sind weniger aktiv als neuere. Alle Kategorien sind gleich beliebt. 4. Fhren Sie die Anweisungen aus. 5. Zeichnen Sie in der nachstehenden Tabelle die maximale Anzahl Zeilen auf, die unter Verwendung eines Index zurckgegeben werden kann.
WHERE-Klausel WHERE charge_no BETWEEN 1 AND n WHERE member_no BETWEEN 1 AND n WHERE provider_no BETWEEN 1 AND n WHERE category_no BETWEEN 1 AND n Ungefhre Anzahl Zeilen 116 264 767 0

6. Wiederholen Sie die Schritte 1 bis 5 fr die verbleibenden SELECTAnweisungen. Anmerkung Sie werden feststellen, dass es nicht so einfach ist, die Selektivitt einer Abfrage vorherzusagen, auch dann nicht, wenn Sie die Werte aller Argumente kennen. Am besten lassen Sie den Abfrageoptimierer entscheiden, wie die Abfrage ausgefhrt werden soll.

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

61

Ist die Anzahl der Zeilen, auf die der Abfrageoptimierer zugegriffen hat, fr alle Indizes die gleiche? Begrndung? Nein. Wenn sich die Selektivitt erhht und die Verteilung ndert, verlieren Indizes aus folgenden Grnden an Effektivitt fr den Abfrageoptimierer: Die Charge-Zahlen sind gleichmig ber die Tabelle verteilt, und sie sind eindeutig. Die Vorhersehbarkeit der Daten ist sehr akkurat. Die Member-Zahl ist weniger selektiv und ungleichmig verteilt. Die Schtzung der Anzahl der zurckgegebenen Zeilen verliert an Genauigkeit. Die Provider-Zahlen sind nicht gleichmig ber die ChargeTabelle verteilt. Die lteren Provider (die mit der niedrigen Providernummer) verfgen nicht ber so viele Charges wie die neueren Provider. Um die gleiche Anzahl an Charges wie die neueren Provider zu erhalten, wird bei der Auswahl von Charges ein grerer Prozentsatz lterer Provider verwendet. Kategorien sind gleichmig ber die Tabelle verteilt. Da es jedoch nur 10 Kategorien gibt, wird, auch wenn nur fr eine Kategorie Charges ausgewhlt werden, eine betrchtliche Anzahl Zeilen zurckgegeben. Daher ist der Index nicht vorteilhaft. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

62

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

bung 2 Anzeigen der Indexstatistiken und Auswerten der Indexselektivitt


In dieser bung erstellen Sie verschiedene Indizes der Member-Tabelle, rufen Indexstatistiken ab und treffen basierend auf der Selektivitt des Index eine Aussage darber, ob ein Index fr den Abfrageoptimierung von Nutzen ist. Sie knnen Abschnitte der Skriptdatei IndexStats.sql im Ordner C:\Moc\2328A\Labfiles\L07 ffnen, sichten und ausfhren, oder Sie knnen die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie Indizes In diesem Verfahren fhren Sie ein Skript aus, das prft, ob Indizes und Statistiken vorhanden sind, diese dann lscht und geeignete neue Indizes erstellt. Anschlieend zeigen Sie die auf den erstellten Indizes basierenden Statistiken an. 1. ffnen Sie SQL Query Analyzer, geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um bereits vorhandene Indizes fr die MemberTabelle zu lschen.
USE credit EXEC index_cleanup member

2. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um drei Indizes fr die Member-Tabelle zu erstellen:
USE credit CREATE UNIQUE INDEX indx_member_no ON member (member_no) CREATE INDEX indx_corp_lname ON member(corp_no,lastname) CREATE INDEX indx_lastname ON member (lastname) GO

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

63

So zeigen Sie Indexstatistiken an und bewerten die Selektivitt von Indizes In diesem Verfahren rufen Sie die Indexstatistiken fr die neuen Indizes ab, zeichnen die statistischen Daten auf und bewerten die Selektivitt der Indizes. 1. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um die statistischen Daten zum Index der Spalte member_no der Member-Tabelle anzuzeigen:
USE credit DBCC SHOW_STATISTICS (member,indx_member_no)

2. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Rows Steps Density All density Ergebnis 10.000 3 .00009 .00009

Wie selektiv ist der Index fr die member_no-Spalte? Sehr selektiv. Der index_member_no-Index wurde fr die member_no-Spalte erstellt, die eindeutige Werte enthlt. Wenn in einer Abfrage in der WHERE-Klausel eine Mitgliedsnummer unter Verwendung einer Gleichsetzung angegeben wird, wird nur eine Zeile zurckgegeben. ____________________________________________________________ ____________________________________________________________ 3. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um die statistischen Daten zu einem zusammengesetzten Index der Spalten corp_no und lastname der Member-Tabelle anzuzeigen:
USE credit DBCC SHOW_STATISTICS (member,indx_corp_lname)

4. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Rows Steps Density All density (corp_no) (corp_no, lastname) Ergebnis 10.000 197 .0003 .002 .0006

Wie selektiv ist dieser Index? Er ist ebenfalls recht selektiv, jedoch nicht so selektiv wie die member_no-Spalte, da doppelte Werte vorhanden sind. ____________________________________________________________ ____________________________________________________________

64

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

5. Geben Sie die nachstehende Anweisung ein, und fhren Sie sie aus, um die statistischen Daten zur lastname-Spalte der Member-Tabelle anzuzeigen:
USE credit DBCC SHOW_STATISTICS (member,indx_lastname)

6. Zeichnen Sie die statistischen Daten in der folgenden Tabelle auf.


Informationen Rows Steps Density All density Ergebnis 10.000 26 .0 .03

Wie selektiv ist dieser Index? Dieser Index ist nicht sehr selektiv. Das Ergebnis der Formel zum Berechnen der Dichte zeigt, dass dieser Index nur geringe Selektivitt besitzt. Da Sie nicht durch Null dividieren knnen, ist das Ergebnis Null. All density steht fr die gesamte Dichte. ((26/0)/10000) = 0 ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

65

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Erstellen von Indizes Arbeiten mit CREATE INDEX-Optionen Verwalten von Indizes Einfhrung in die Arbeit mit Statistiken Abfragen der sysindexes-Tabelle Einrichten von Indizes mit Hilfe des IndexoptimierungsAssistenten Leistungsaspekte

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Sie sind als Datenbankadministrator fr eine umfangreiche Kundendatenbank verantwortlich. In letzter Zeit hat sich in der Auftragsabwicklung die Antwortzeit des Systems bei der Eingabe von Kundenbestellungen verlangsamt. Ihrer Erfahrung nach sind die Orders- und Order Details-Tabellen jedoch korrekt indiziert. Welche anderen Faktoren knnten fr die schlechte Systemleistung verantwortlich sein? Die Indexstatistiken werden mglicherweise nicht automatisch verwaltet und sind daher mit der Zeit eventuell veraltet, weil Daten gendert werden. Gegebenenfalls muss die Option FILLFACTOR erneut angewendet werden, um fr neue Bestellungen (Zeilen), die in die Orders-Tabelle und in die Order Details-Tabelle eingefgt werden, weiteren Tabellen- und Indexspeicherplatz zu reservieren.

2. Welche Vorteile ergeben sich, wenn SQL Server Statistiken automatisch erstellt und aktualisiert? Wenn der Abfrageoptimierer Statistiken automatisch erstellt und aktualisiert, reduziert sich der Verwaltungsaufwand, und die Abfrageleistung wird verbessert.

66

Unterrichtseinheit 7: Erstellen und Verwalten von Indizes

3. Sie sind verantwortlich fr die Verwaltung einer Datenbank, die die Vertriebsabteilung fr die Annahme von Kundenauftrgen verwendet. Die Leistung der Sales-Datenbank lsst sehr zu wnschen brig. Ihr Vorgesetzter bittet Sie, die Leistung innerhalb von zwei Tagen zu verbessern. Welches ist das geeignete Tool fr die Lsung dieses Problems? Verwenden Sie den Indexoptimierungs-Assistenten. Erstellen Sie am ersten Tag eine Arbeitsauslastungsdatei, in der Sie die Benutzeraktivitten ber einen ganzen Tag aufzeichnen. Fhren Sie am zweiten Tag den Indexoptimierungs-Assistenten basierend auf der ermittelten Arbeitsauslastung aus, prfen Sie die Indexanalyse, und bernehmen Sie die vom Indexoptimierungs-Assistenten vorgeschlagenen Indizes.

Unterrichtseinheit 8: Implementieren von Sichten


Inhalt bersicht Einfhrung zu Sichten Vorteile von Sichten Definieren von Sichten ndern von Daten mit Hilfe von Sichten Optimieren der Leistung mit Hilfe von Sichten Empfohlene Methoden bungseinheit A: Implementieren von Sichten Lernzielkontrolle 1 2 4 6 17 19 26 28 38

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 8: Implementieren von Sichten

iii

Hinweise fr den Kursleiter


Prsentation: 45 Minuten bungseinheit: 30 Minuten Diese Unterrichtseinheit vermittelt den Kursteilnehmern die erforderlichen Informationen zum Erstellen und Verwenden von Sichten. Sichten ermglichen das Speichern einer vordefinierten Abfrage als Objekt in der Datenbank, um es zu einem spteren Zeitpunkt zu verwenden. Sie bieten eine einfache Mglichkeit, vertrauliche Daten zu schtzen oder die Komplexitt einer Datenbankstruktur zu verbergen und Informationen bereitzustellen, ohne dass die Benutzer Transact-SQL-Anweisungen schreiben und ausfhren mssen. Die Unterrichtseinheit definiert Sichten und deren Vorteile. Im weiteren Verlauf der Unterrichtseinheit wird beschrieben, wie Sichten erstellt werden, und es werden Beispiele fr Projektionen und Verknpfungen bereitgestellt. Die Beispiele zeigen, wie berechnete Spalten und integrierte Funktionen in die Sichtdefinitionen eingeschlossen werden. Anschlieend behandelt die Unterrichtseinheit Einschrnkungen beim ndern von Daten durch Sichten. Im letzten Abschnitt wird erlutert, wie Sichten die Leistung verbessern knnen. In der bungseinheit erstellen und testen die Kursteilnehmer Sichten, einschlielich von Sichten mit verschlsselten Definitionen. Die Kursteilnehmer werden zudem Quelltabellen mit Hilfe einer Sicht ndern und einen Blick auf Sichtdefinitionen werfen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben des Sichtenkonzepts. Auflisten der Vorteile von Sichten. Definieren einer Sicht mit der CREATE VIEW-Anweisung. ndern von Daten mit Hilfe von Sichten. Optimieren der Leistung mit Hilfe von Sichten.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_08.ppt Die Beispieldatei C:\Moc\2328A\Demo\D08_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 8: Implementieren von Sichten

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung zu Sichten Beschreiben Sie das Sichtenkonzept. Betonen Sie, dass Sichten nichts anderes als gespeicherte Abfragen sind. Vorteile von Sichten Auflisten der Vorteile der Verwendung von Sichten. Definieren von Sichten Erlutern Sie, wie Benutzer Sichten erstellen, ndern und lschen knnen, wobei die Einschrnkungen und Richtlinien, die von den Benutzern beachtet werden mssen, besprochen werden. Beschreiben Sie, wie die Sichtdefinition verschlsselt werden kann. Listen Sie die Systemtabellen mit den Sichtdefinitionsinformationen auf. ndern von Daten mit Hilfe von Sichten Beschreiben Sie, wie Daten mit Hilfe von Sichten gendert werden, und listen Sie auf, welche berlegungen und Einschrnkungen die Benutzer beachten mssen. Optimieren der Leistung mit Hilfe von Sichten. Beschreiben Sie, wie Sichten zur Leistungsoptimierung beitragen, indem sie das Ergebnis komplexer Abfragen speichern und Daten partitionieren.

Unterrichtseinheit 8: Implementieren von Sichten

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, beschrieben wird.

Einrichten der bungseinheit


Im folgenden Abschnitt werden die Anforderungen zum Einrichten der bungseinheit in dieser Unterrichtseinheit beschrieben.

Anforderungen zum Einrichten


Die bungseinheit in dieser Unterrichtseinheit setzt voraus, dass sich die credit-Datenbank in dem fr diese bungseinheit erforderlichen Zustand befindet. Um die Kursteilnehmercomputer so vorzubereiten, dass sie dieser Anforderung entsprechen, fhren Sie eine der folgenden Aktionen durch: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore08.cmd. Achtung Falls dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore08.cmd ausfhren, um sicherzustellen, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

iv

Unterrichtseinheit 8: Implementieren von Sichten

This page is intentionally left blank.

This page is intentionally left blank.

Unterrichtseinheit 8: Implementieren von Sichten

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung zu Sichten Vorteile von Sichten Definieren von Sichten ndern von Daten mit Hilfe von Sichten Optimieren der Leistung mit Hilfe von Sichten

Einstieg

In dieser Unterrichtseinheit lernen Sie, wie Datensichten erstellt, verwendet und verwaltet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit definiert Sichten und deren Vorteile. Im weiteren Verlauf der Unterrichtseinheit wird beschrieben, wie Sichten erstellt werden, und es werden Beispiele fr Projektionen und Verknpfungen bereitgestellt. Die Beispiele zeigen, wie berechnete Spalten und integrierte Funktionen in die Sichtdefinitionen eingeschlossen werden. Anschlieend behandelt die Unterrichtseinheit Einschrnkungen beim ndern von Daten durch Sichten. Im letzten Abschnitt wird erlutert, wie Sichten die Leistung verbessern knnen. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben des Sichtenkonzepts. Auflisten der Vorteile von Sichten. Definieren einer Sicht mit der CREATE VIEW-Anweisung. ndern von Daten mit Hilfe von Sichten. Optimieren der Leistung mit Hilfe von Sichten.

Unterrichtseinheit 8: Implementieren von Sichten

Einfhrung zu Sichten
Stellen Sie das Konzept von Sichten vor, und geben Sie ein Beispiel.

Thema

Employees Employees
EmployeeID LastName EmployeeID LastName 1 Davolio 1 Davolio 2 Fuller 2 Fuller 3 Leverling 3 Leverling Firstname Firstname Nancy Nancy Andrew Andrew Janet Janet Title Title ~~~ ~~~ ~~~ ~~~ ~~~ ~~~

Einstieg

Bei einer Sicht handelt es sich um eine alternative Methode zum Anzeigen der Daten aus einer oder mehreren Tabellen.

USE Northwind USE Northwind GO GO CREATE VIEW dbo.EmployeeView CREATE VIEW dbo.EmployeeView AS AS SELECT LastName, Firstname SELECT LastName, Firstname FROM Employees FROM Employees

EmployeeView EmployeeView
Lastname Lastname Davolio Davolio Fuller Fuller Leverling Leverling Firstname Firstname Nancy Nancy Andrew Andrew Janet Janet
Sicht des Benutzers

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Eine Sicht bietet die Mglichkeit, eine vordefinierte Abfrage als Objekt in der Datenbank zur spteren Verwendung zu speichern. Die abgefragten Tabellen einer Sicht werden als Basistabellen bezeichnet. Von wenigen Ausnahmen abgesehen, kann jede SELECT-Anweisung als Sicht benannt und gespeichert werden. Beispiele fr hufig verwendete Sichten sind: Eine Teilmenge von Zeilen oder Spalten einer Basistabelle. Eine Vereinigung von zwei oder mehr Basistabellen mit dem UNIONOperator. Eine Verknpfung von zwei oder mehr Basistabellen mit dem JOINOperator. Eine statistische Zusammenfassung einer Basistabelle. Eine Teilmenge einer anderen Sicht oder eine Kombination von Sichten und Basistabellen.

Bis jetzt wurden in diesem Kurs Ad-hoc-Abfragen geschrieben. Im Zusammenhang mit Sichten wollen wir uns ansehen, wie Abfragen als Objekte (Sichten, gespeicherte Prozeduren und Trigger) in der Datenbank gespeichert werden.

Unterrichtseinheit 8: Implementieren von Sichten

Beispiel

In diesem Beispiel wird die dbo.EmployeeView-Sicht in der NorthwindDatenbank erstellt. Die Sicht zeigt zwei Spalten der Employees-Tabelle an.
USE Northwind GO CREATE VIEW dbo.EmployeeView AS SELECT LastName, Firstname FROM Employees

Abfrage Ergebnis

SELECT * from EmployeeView LastName Davolio Fuller Leverling . . . (9 row(s) affected) FirstName Nancy Andrew Janet

Unterrichtseinheit 8: Implementieren von Sichten

Vorteile von Sichten


Erlutern Sie, warum Benutzer Sichten erstellen oder verwenden.

Thema

Konzentrieren der Daten fr Benutzer Konzentrieren auf nur wichtige oder geeignete Daten Begrenzen des Zugriffs auf vertrauliche Daten Verbergen der Datenbankkomplexitt Verstecken der Komplexitt des Datenbankentwurfs Vereinfachen komplexer Abfragen, einschlielich verteilter Abfragen fr heterogene Daten Vereinfachen der Verwaltung von Benutzerberechtigungen Verbessern der Leistung Organisieren von Daten fr den Export in andere Anwendungen

Einstieg

Sichten bieten mehrere Vorteile.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sichten bieten unter anderem die folgenden Vorteile: Sie konzentrieren Daten fr Benutzer, verbergen die Komplexitt von Daten, vereinfachen die Verwaltung von Berechtigungen und organisieren Daten fr den Export in andere Anwendungen.

Konzentrieren der Daten fr Benutzer


Sichten schaffen eine kontrollierte Umgebung, die den Zugriff auf bestimmte Daten ermglicht, whrend sie andere Daten verbirgt. Es ist mglich, nicht bentigte, vertrauliche oder ungeeignete Daten aus einer Sicht auszuschlieen. Benutzer knnen die Anzeige von Daten in einer Sicht ebenso wie in einer Tabelle bearbeiten. Darber hinaus knnen sie - mit den entsprechenden Berechtigungen und einigen Einschrnkungen - die von einer Sicht erzeugten Daten ndern. Methodischer Hinweis

Verbergen der Datenbankkomplexitt


Sichten verbergen die Komplexitt des Datenbankentwurfs vor dem Benutzer. Dies bietet Entwicklern die Mglichkeit, den Entwurf zu ndern, ohne dass sich dies auf den Benutzerdialog mit der Datenbank auswirkt. Darber hinaus kann eine benutzerfreundlichere Anzeige der Daten erstellt werden, indem Namen verwendet werden, die einfacher zu verstehen sind als die in Datenbanken hufig verwendeten unverstndlichen Namen. Komplexe Abfragen, einschlielich verteilter Abfragen fr heterogene Daten, knnen ebenfalls durch Sichten verborgen werden. Der Benutzer fragt die Sicht ab, statt die Abfrage zu schreiben oder ein Skript auszufhren.

Weisen Sie darauf hin, dass die Informationsschemasichten es SQL Server ermglichen, Systemdaten auf eine konsistente Weise darzustellen, sogar wenn wesentliche nderungen an den Systemtabellen vorgenommen wurden.

Vereinfachen der Verwaltung von Benutzerberechtigungen


Statt Benutzern die Berechtigung zum Abfragen bestimmter Spalten in Basistabellen zu erteilen, knnen Datenbankbesitzer Benutzern die Berechtigung erteilen, Daten nur ber Sichten abzufragen. Auf diese Weise werden auch nderungen am Entwurf der zugrunde liegenden Basistabellen geschtzt. Benutzer knnen die Sicht ohne Unterbrechung weiter abfragen.

Unterrichtseinheit 8: Implementieren von Sichten

Verbessern der Leistung


Mit Sichten knnen Sie das Ergebnis komplexer Abfragen speichern. Andere Abfragen knnen diese Ergebnisse weiter verwenden. Mit Sichten knnen Sie zudem Daten partitionieren. Sie knnen einzelne Partitionen auf separaten Computern platzieren.

Organisieren von Daten fr den Export in andere Anwendungen


Sie knnen eine Sicht auf der Basis einer komplexen Abfrage erstellen, die mehrere Tabellen miteinander verknpft, und die Daten dann zur weiteren Analyse in eine andere Anwendung exportieren.

Unterrichtseinheit 8: Implementieren von Sichten

Definieren von Sichten


Geben Sie eine Einfhrung in den Abschnitt ber das Arbeiten mit Sichten.

Thema

Erstellen von Sichten Beispiel: Sicht verknpfter Tabellen ndern und Lschen von Sichten Vermeiden von unterbrochenen Besitzketten Suchen von Informationen zur Sichtdefinition Verbergen von Sichtdefinitionen

Einstieg

In diesem Abschnitt wird das Erstellen, ndern und Lschen von Sichten beschrieben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird das Erstellen, ndern und Lschen von Sichten beschrieben. Auerdem wird erlutert, wie unterbrochene Besitzketten vermieden, Sichtdefinitionen verborgen und Informationen zu Sichten innerhalb einer Datenbank abgerufen werden knnen.

Unterrichtseinheit 8: Implementieren von Sichten

Erstellen von Sichten


Geben Sie eine Einfhrung in das Erstellen und Lschen von Sichten.

Thema

Erstellen einer Sicht


CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) AS AS SELECT OD.OrderID, SELECT OD.OrderID, SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100) SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100) FROM [Order Details] OD FROM [Order Details] OD GROUP BY OD.OrderID GROUP BY OD.OrderID GO GO

Einstieg

Nachdem Sichten definiert worden sind, wird nun erlutert, wie eine Sicht erstellt wird.

Einschrnkungen beim Definieren von Sichten Einschlieen der ORDER BY-Klausel nicht mglich Einschlieen des INTO-Schlsselwortes nicht mglich

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Sichten mit dem Sichterstellungs-Assistenten, mit SQL Server Enterprise Manager oder Transact-SQL erstellen. Sichten knnen nur in der aktuellen Datenbank erstellt werden.

Erstellen einer Sicht


Methodischer Hinweis
Empfehlen Sie den Kursteilnehmern, eine konsistente Benennungskonvention zum Unterscheiden von Sichten und Tabellen zu entwickeln und dbo als Besitzername anzugeben.

Beim Erstellen einer Sicht berprft Microsoft SQL Server 2000 die Existenz der Objekte, auf die in der Sicht verwiesen wird. Der Sichtname muss den Regeln fr Bezeichner entsprechen. Die Angabe eines Besitzernamens fr die Sicht ist optional. Sie sollten eine konsistente Benennungskonvention entwickeln, um Sichten von Tabellen zu unterscheiden. Sie knnen zum Beispiel das Wort View als Suffix fr jedes Objekt verwenden, das Sie erstellen. Auf diese Weise knnen Sie hnliche Objekte (Tabellen und Sichten) beim Abfragen der Sicht INFORMATION_SCHEMA.TABLES leicht unterscheiden. CREATE VIEW owner.view_name [(column [,n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]] AS select_statement [WITH CHECK OPTION]

Syntax

Methodischer Hinweis

Es ist mglich, dass einem Benutzer die Berechtigung zum Erstellen einer Sicht erteilt wurde und er keine Berechtigung fr die zugrunde liegenden Tabellen hat. Die in diesem Fall erstellte Sicht wrde jedoch kein Resultset zurckgeben.

Zum Ausfhren der CREATE VIEW-Anweisung mssen Sie Mitglied der Rolle sysadmin (Systemadministratoren), db_owner (Datenbankbesitzer) oder db_ddladmin (Administrator fr die Datendefinitionssprache) sein oder Ihnen muss die Berechtigung fr CREATE VIEW erteilt worden sein. Auerdem mssen Sie die SELECT-Berechtigung fr alle Tabellen oder Sichten haben, auf die in der Sicht verwiesen wird. Um Situationen zu vermeiden, in denen der Besitzer einer Sicht und der Besitzer einer zugrunde liegenden Tabelle nicht identisch sind, wird empfohlen, dass der dbo-Benutzer smtliche Objekte in einer Datenbank besitzt. Geben Sie beim Erstellen eines Objekts immer den dbo-Benutzer als Besitzernamen an; andernfalls wird das Objekt mit Ihrem Benutzernamen als Objektbesitzer erstellt.

Unterrichtseinheit 8: Implementieren von Sichten

Sie geben den Inhalt einer Sicht mit Hilfe einer SELECT-Anweisung an. Von wenigen Einschrnkungen abgesehen, knnen Sichten beliebig komplex sein. Spaltennamen mssen in den beiden folgenden Fllen angegeben werden: Methodischer Hinweis Spalten der Sicht basieren auf einem arithmetischen Ausdruck, einer integrierten Funktion oder einer Konstante. Spalten in zu verknpfenden Tabellen haben identische Namen. Wichtig Beim Erstellen von Sichten muss die SELECT-Anweisung zum Definieren der Sicht unbedingt getestet werden, um sicherzustellen, dass SQL Server das erwartete Resultset zurckgibt. Erstellen Sie die Sicht erst, nachdem Sie die SELECT-Anweisung geschrieben und getestet sowie die Ergebnisse berprft haben.

Sie knnen Spaltennamen auf zwei Arten angeben: in der SELECT-Anweisung unter Verwendung des Spaltenalias oder in der CREATE VIEW-Anweisung.

Einschrnkungen beim Definieren von Sichten


Beachten Sie beim Erstellen von Sichten die folgenden Einschrnkungen: Die CREATE VIEW-Anweisung kann nicht die COMPUTE- oder COMPUTE BY-Klausel enthalten. Die CREATE VIEW-Anweisung kann nicht das Schlsselwort INTO enthalten. Die CREATE VIEW-Anweisung kann die ORDER BY-Klausel nur einschlieen, wenn das Schlsselwort TOP verwendet wird. Sichten knnen nicht auf temporre Tabellen verweisen. Sichten knnen auf maximal 1.024 Spalten verweisen. Die CREATE VIEW-Anweisung kann nicht mit anderen Transact-SQLAnweisungen in einem einzigen Batch zusammengefasst werden. Beispiel 1 Mit der Sicht im folgenden Beispiel wird eine Spalte (Subtotal) erstellt, in der aus den Spalten UnitPrice, Quantity und Discount eine Zwischensumme fr einen Auftrag berechnet wird.
CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) AS SELECT OD.OrderID, SUM(CONVERT (money,(OD.UnitPrice*Quantity*(1- Discount)/100))*100) FROM [Order Details] OD GROUP BY OD.OrderID GO

Beispiel 2

In diesem Beispiel wird die Sicht abgefragt, um die Ergebnisse anzuzeigen.


SELECT * FROM OrderSubtotalsView

Ergebnis

OrderID 10271 10977 10440 . . . (830 row(s) affected)

Subtotal 48.0000 2233.0000 4924.1400

Unterrichtseinheit 8: Implementieren von Sichten

Beispiel: Sicht verknpfter Tabellen


Geben Sie ein Beispiel fr eine Sicht von zwei oder mehr verknpften Tabellen.

Thema

Orders
OrderID CustomerID RequiredDateShippedDate OrderID CustomerID RequiredDateShippedDate 10663 BONAP 1997-09-24 1997-10-03 ~~~ BONAP 1997-09-24 1997-10-03 ~~~ 10663 10827 BONAP 1998-01-26 1998-02-06 ~~~ BONAP 1998-01-26 1998-02-06 ~~~ 10827 10427 PICCO 1997-02-24 1997-03-03 ~~~ PICCO 1997-02-24 1997-03-03 ~~~ 10427 10451 QUICK 1997-03-05 1997-03-12 ~~~ QUICK 1997-03-05 1997-03-12 ~~~ 10451 10515 QUICK 1997-05-07 1997-05-23 ~~~ QUICK 1997-05-07 1997-05-23 ~~~ 10515 BONAP BONAP PICCO PICCO QUICK QUICK

Customers
CustomerID CompanyName ContactName CustomerID CompanyName ContactName
Bon app' Bon app' Piccolo und mehr Piccolo und mehr QUICK-Stop QUICK-Stop Laurence Lebihan Laurence Lebihan Georg Pipps Georg Pipps Horst Kloss Horst Kloss

Einstieg

Sie knnen mehrere Typen von Sichten erstellen. Ein Typ ist eine Teilmenge von Spalten, wie in einer Folie weiter oben gezeigt wurde. Ein anderer, gebruchlicherer Typ ist eine Sicht von zwei oder mehr verknpften Tabellen.

USE Northwind USE Northwind GO GO CREATE VIEW dbo.ShipStatusView CREATE VIEW dbo.ShipStatusView AS AS SELECT OrderID, RequiredDate, ShippedDate, SELECT OrderID, RequiredDate, ShippedDate, ContactName ContactName FROM Customers c INNER JOIN Orders o FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID ON c.CustomerID = o.CustomerID WHERE RequiredDate < ShippedDate WHERE RequiredDate < ShippedDate

ShipStatusView
OrderID ShippedDate ContactName OrderID ShippedDate ContactName

10264 10264 10271 10271 10280 10280

1996-08-23 Laurence Lebihan 1996-08-21 1996-08-23 Laurence Lebihan 1996-08-21 1996-08-30 Georg Pipps 1996-08-29 1996-08-30 Georg Pipps 1996-08-29 1996-09-12 Horst Kloss 1996-09-11 1996-09-12 Horst Kloss 1996-09-11

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie werden hufig Sichten erstellen, um sich Informationen aus zwei oder mehr verknpften Tabellen an einem zentralen Ort ansehen zu knnen. Beispiel 1 In diesem Beispiel verknpft ShipStatusView die Customers- und OrdersTabellen.
USE Northwind GO CREATE VIEW dbo.ShipStatusView AS SELECT OrderID, ShippedDate, ContactName FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID WHERE RequiredDate < ShippedDate SELECT * FROM ShipStatusView

Ergebnis

OrderID 10264 10271 10280 . . . (37 row(s) affected)

ShippedDate 1996-08-23 1996-08-30 1996-09-12

ContactName Maria Larsson Art Braunschweiger Christina Berglund

10

Unterrichtseinheit 8: Implementieren von Sichten

ndern und Lschen von Sichten


Thema
Geben Sie eine Einfhrung in das ndern einer Sicht.

ndern von Sichten


USE Northwind USE Northwind GO GO ALTER VIEW dbo.EmployeeView ALTER VIEW dbo.EmployeeView AS AS SELECT LastName, FirstName, Extension SELECT LastName, FirstName, Extension FROM Employees FROM Employees

Einstieg

Eine Sicht kann gendert werden.

Beibehalten der zugewiesenen Berechtigungen Ermglicht einer neuen SELECT-Anweisung und neuen Optionen, die existierende Definition zu ersetzen Lschen von Sichten
DROP VIEW dbo.ShipStatusView DROP VIEW dbo.ShipStatusView

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sichten werden oft als Reaktion auf Anforderungen von Benutzern fr zustzliche Informationen oder auf nderungen in der zugrunde liegenden Tabellendefinition gendert. Sie knnen eine Sicht ndern, indem Sie sie lschen und neu erstellen oder indem Sie die ALTER VIEW-Anweisung ausfhren.

ndern von Sichten


Die ALTER VIEW-Anweisung ndert die Definition einer Sicht, einschlielich indizierter Sichten, und zwar ohne Auswirkungen auf abhngige gespeicherte Prozeduren oder Trigger. Damit haben Sie die Mglichkeit, die Berechtigungen fr die Sicht beizubehalten. Fr diese Anweisung gelten die gleichen Einschrnkungen wie fr die CREATE VIEW-Anweisung. Wenn Sie eine Sicht lschen und anschlieend neu erstellen, mssen Sie ihr die Berechtigungen erneut zuweisen. Syntax
ALTER VIEW owner.view_name [(column [,...n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,...n]] AS select_statement [WITH CHECK OPTION]

Anmerkung Wenn Sie beim Erstellen der Sicht die Optionen WITH CHECK OPTION, WITH ENCRYPTION, WITH SCHEMABINDING oder WITH VIEW_METADATA verwenden, mssen Sie diese in die ALTER VIEWAnweisung einbeziehen, falls Sie die von der Option bereitgestellte Funktionalitt beibehalten mchten.

Unterrichtseinheit 8: Implementieren von Sichten

11

Beispiel

Im folgenden Beispiel wird EmployeeView gendert, um die Extension-Spalte hinzuzufgen.


USE Northwind GO ALTER VIEW dbo.EmployeeView AS SELECT LastName, FirstName, Extension FROM Employees GO SELECT * from dbo.EmployeeView LastName Davolio Fuller Leverling . . . (9 row(s) affected) FirstName Nancy Andrew Janet Extension 5467 3457 3355

Abfrage Ergebnis

Methodischer Hinweis
Beim Erstellen der Sicht wird die Spaltenliste in der syscolumns-Tabelle gespeichert.

Anmerkung Wenn Sie eine Sicht mit einer SELECT *-Anweisung definieren und dann die Struktur der zugrunde liegenden Tabellen durch Hinzufgen von Spalten ndern, werden die neuen Spalten in der Sicht nicht angezeigt. Wenn in einer CREATE VIEW-Anweisung alle Spalten ausgewhlt werden, wird die Spaltenliste nur beim ersten Erstellen der Sicht ausgewertet. Um die neuen Spalten der Sicht anzuzeigen, mssen Sie die Sicht ndern.

Lschen von Sichten


Wenn Sie eine Sicht nicht mehr bentigen, knnen Sie deren Definition aus der Datenbank entfernen, indem Sie die DROP VIEW-Anweisung ausfhren. Beim Lschen einer Sicht werden ihre Definition und alle ihr zugewiesenen Berechtigungen entfernt. Wenn Benutzer Sichten abfragen, die auf die gelschte Sicht verweisen, wird eine Fehlermeldung ausgegeben. Wird jedoch eine Tabelle gelscht, die auf eine Sicht verweist, so wird die Sicht nicht automatisch gelscht. Diese muss explizit gelscht werden. Anmerkung Die Berechtigung zum Lschen einer Sicht wird standardmig dem Sichtbesitzer erteilt; sie ist nicht bertragbar. Dies ist die Standardeinstellung. Der Systemadministrator oder der Datenbankbesitzer kann jedoch durch Angabe des Besitzernamens in der DROP VIEW-Anweisung jedes beliebige Objekt lschen.

12

Unterrichtseinheit 8: Implementieren von Sichten

Vermeiden von unterbrochenen Besitzketten


Stellen Sie das Konzept von Besitzketten vor.

Thema

Abhngige Objekte mit verschiedenen Besitzern Beispiel: Maria fhrt aus:


GRANT SELECT ON view2 TO pierre GRANT SELECT ON view2 TO pierre

Einstieg

Um unterbrochene Besitzketten zu vermeiden, sollte der dbo-Benutzer alle Sichten besitzen.

maria.view2

lucia.view1 Pierre fhrt aus:


SELECT * FROM maria.view2 SELECT * FROM maria.view2

lucia.table1

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server ermglicht es dem Besitzer des Originalobjekts, die Kontrolle ber Personen zu behalten, die auf dieses Objekt zugreifen drfen.

Abhngige Objekte mit verschiedenen Besitzern


Sichtdefinitionen hngen von den zugrunde liegenden Objekten (Sichten oder Tabellen) ab. Diese Abhngigkeiten knnen als die Besitzkette verstanden werden. Wenn der Besitzer einer Sicht auch die zugrunde liegenden Objekte besitzt, muss er die Berechtigung nur fr die Sicht erteilen. Bei Verwendung des Objekts werden Berechtigungen nur fr die Sicht berprft. Um unterbrochene Besitzketten zu vermeiden, sollte der dbo-Benutzer alle Sichten besitzen. Bei Verwendung des Objekts werden die Berechtigungen fr jedes abhngige Objekt mit einem anderen Besitzer berprft. Beispiel Syntax Maria erstellt view2. Mit der folgenden Anweisung erteilt sie Pierre die Berechtigung, diese Sicht abzufragen.
GRANT select ON view2 TO pierre

maria.view2 hngt jedoch von einem Objekt (view1) ab, das sich im Besitz einer anderen Benutzerin (Lucia) befindet. Die Berechtigungen werden fr jedes abhngige Objekt mit einem anderen Besitzer berprft. Pierre fragt die Sicht mit der folgenden Anweisung ab: Syntax
SELECT * FROM maria.view2

Da maria.view2 von lucia.view1 abhngt, berprft SQL Server die Berechtigungen fr maria.view2 und lucia.view1. Wenn Lucia Pierre die Berechtigung fr view1 zuvor erteilt hat, kann Pierre auf diese Sicht zugreifen. Hat Lucia Pierre die Berechtigung nicht erteilt, wird der Zugriff verweigert und damit Lucia ermglicht, die Kontrolle ber Personen zu behalten, die auf die von ihr erstellten Objekte zugreifen drfen.

Unterrichtseinheit 8: Implementieren von Sichten

13

Suchen von Informationen zur Sichtdefinition


Thema
Beschreiben Sie, wie Informationen zu Sichten angezeigt werden.

Suchen von Sichtdefinitionen Nicht verfgbar, wenn die Sicht mit der Option WITH ENCRYPTION erstellt wurde Suchen von Sichtabhngigkeiten Auflisten der Objekte, von denen die Sicht abhngt Auflisten der Objekte, die von der Sicht anhngen

Einstieg

Whrend des Erstellens, nderns oder Lschens von Tabellen knnen Sie Informationen zu den Sichten Ihrer Datenbank anzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mglicherweise mchten Sie die Definition einer Sicht sehen, um die Definition zu ndern, oder Sie mchten verstehen, wie die Daten der Sicht aus den Basistabellen abgeleitet werden.

Suchen von Sichtdefinitionen


Sie knnen Informationen zur Sichtdefinition mit SQL Server Enterprise Manager oder durch Abfragen der folgenden Sichten und Systemtabellen suchen.
Informationsschemasicht oder Systemtabelle INFORMATION_SCHEMA.TABLES oder sysobjects INFORMATION_SCHEMA.VIEW_TABLE_USAGE oder sysdepends INFORMATION_SCHEMA.VIEWS oder syscomments INFORMATION_SCHEMA.VIEW_COLUMN_USAGE oder syscolumns Anzeige dieser Informationen Sichtnamen Basisobjektnamen Sichtdefinition In einer Sicht definierte Spalten.

Anmerkung INFORMATION_SCHEMA.VIEW_TABLE_USAGE und INFORMATION_SCHEMA.VIEW_COLUMN_USAGE zeigen Informationen nur fr Ihren Benutzernamen an.

14

Unterrichtseinheit 8: Implementieren von Sichten

Um den zum Erstellen einer Sicht verwendeten Text anzuzeigen, verwenden Sie SQL Server Enterprise Manager, fragen INFORMATION_SCHEMA.VIEWS ab oder fhren die gespeicherte Systemprozedur sp_helptext mit dem Sichtnamen als Parameter aus. Syntax Methodischer Hinweis sp_helptext objname

Suchen von Sichtabhngigkeiten


Zum Abrufen eines Berichts der Tabellen oder Sichten, von denen eine Sicht abhngt, und der Objekte, die von einer bestimmten Sicht abhngen, verwenden Sie SQL Server Enterprise Manager oder fhren die gespeicherte Systemprozedur sp_depends aus. Sie sollten die Abhngigkeiten anzeigen, bevor Sie ein Objekt lschen. Bevor Sie eine Tabelle ndern oder lschen, ermitteln Sie mit Hilfe der gespeicherten Systemprozedur sp_depends, ob Objekte auf die Tabelle verweisen.

Fhren Sie vor, wie Abhngigkeitsinformationen mit Hilfe von SQL Server Enterprise Manager angezeigt werden.

Syntax

sp_depends objname

Unterrichtseinheit 8: Implementieren von Sichten

15

Verbergen von Sichtdefinitionen


Thema
Erlutern Sie, wie Sichtdefinitionen verschlsselt werden.

Verwenden der Option WITH ENCRYPTION Keine Eintrge der syscomments-Tabelle lschen
USE Northwind USE Northwind GO GO CREATE VIEW dbo.[Order Subtotals] CREATE VIEW dbo.[Order Subtotals] WITH ENCRYPTION WITH ENCRYPTION AS AS SELECT OrderID, SELECT OrderID, Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100) Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal AS Subtotal FROM [Order Details] FROM [Order Details] GROUP BY OrderID GROUP BY OrderID GO GO

Einstieg

Sie knnen die Definition von Sichten verschlsseln, um die Details der von der Sicht abgefragten Basistabellen zu verbergen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Da Benutzer die Definition einer Sicht mit SQL Server Enterprise Manager oder durch Abfragen von INFORMATION_SCHEMA.VIEWS oder der syscomments-Systemtabelle anzeigen knnen, kann es sinnvoll sein, bestimmte Sichtdefinitionen zu verbergen.

Verwenden der Option WITH ENCRYPTION


Sie knnen die Eintrge der syscomments-Tabelle verschlsseln, die den Text der CREATE VIEW-Anweisung enthalten, indem Sie in der Sichtdefinition die Option WITH ENCRYPTION angeben. Stellen Sie vor dem Verschlsseln einer Sicht sicher, dass die Sichtdefinition (Skript) in einer Datei gespeichert wird. Um den Text einer Sicht zu entschlsseln, mssen Sie die Sicht lschen und anschlieend neu erstellen oder die Sicht ndern und die Originalsyntax verwenden. Beispiel In diesem Beispiel wird dbo.[Order Subtotals] mit Hilfe der Option WITH ENCRYPTION erstellt, sodass die Sichtdefinition verborgen wird.
USE Northwind GO CREATE VIEW dbo.[Order Subtotals] WITH ENCRYPTION AS SELECT OrderID, Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal FROM [Order Details] GROUP BY OrderID GO

16

Unterrichtseinheit 8: Implementieren von Sichten

Keine Eintrge der syscomments-Tabelle lschen


Wenn die Sichtdefinition fr Benutzer aus Sicherheitsgrnden nicht verfgbar sein soll, verschlsseln Sie die Sicht. Lschen Sie niemals Eintrge aus der syscomments-Tabelle. Dies wrde Sie daran hindern, die Sicht zu verwenden, und es wrde SQL Server daran hindern, die Sicht neu zu erstellen, wenn Sie eine Datenbank auf eine neuere SQL Server-Version aktualisieren.

Unterrichtseinheit 8: Implementieren von Sichten

17

ndern von Daten mit Hilfe von Sichten


Stellen Sie die Aspekte vor, die die Kursteilnehmer bercksichtigen mssen, wenn sie Daten mit Hilfe von Sichten ndern.

Thema

Knnen sich auf maximal eine zugrunde liegende Tabelle auswirken Knnen in bestimmten Spalten nicht vorgenommen werden Knnen Fehler verursachen, wenn sich nderungen auf Spalten auswirken, auf die in der Sicht nicht verwiesen wird Werden berprft, wenn die Option WITH CHECK OPTION in der Sichtdefinition angegeben wurde

Einstieg

Datennderungen, die Sie unter Verwendung einer Sicht vornehmen, ndern die zugrunde liegenden Tabellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sichten verwalten keine separate Kopie von Daten. Stattdessen zeigen sie das Resultset einer Abfrage fr eine oder mehrere Basistabellen an. Deshalb ndern Sie bei jeder nderung von Daten in einer Sicht in Wirklichkeit die Basistabelle. Von einigen Einschrnkungen abgesehen, knnen Sie Tabellendaten ber eine Sicht frei einfgen, aktualisieren oder lschen. Im Allgemeinen muss die Sicht fr eine einzelne Tabelle definiert werden und darf keine Aggregatfunktionen oder GROUP BY-Klauseln in der SELECT-Anweisung enthalten. Speziell gelten fr nderungen, die unter Verwendung von Sichten vorgenommen werden, folgende Aspekte: Knnen sich auf maximal eine zugrunde liegende Tabelle auswirken. Sie knnen Sichten ndern, die auf zwei oder mehr Tabellen basieren, doch jede Aktualisierung oder nderung kann sich nur auf eine Tabelle auswirken. Knnen in bestimmten Spalten nicht vorgenommen werden. SQL Server erlaubt nicht das ndern einer Spalte, die das Ergebnis einer Berechnung ist. Dies sind z. B. Spalten, die berechnete Werte, eingebaute Funktionen oder Zeilenaggregatfunktionen enthalten. Knnen Fehler verursachen, wenn sich nderungen auf Spalten auswirken, auf die in der Sicht nicht verwiesen wird. So erhalten Sie beispielsweise eine Fehlermeldung, wenn Sie eine Zeile in eine Sicht einfgen, die fr eine Tabelle definiert ist, welche Spalten enthlt, auf die in der Sicht nicht verwiesen wird und die weder NULL-Werte zulassen noch Standardwerte aufweisen.

18

Unterrichtseinheit 8: Implementieren von Sichten

Werden berprft, wenn die Option WITH CHECK OPTION in der Sichtdefinition angegeben wurde. Die Option WITH CHECK OPTION zwingt alle fr die Sicht ausgefhrten Datennderungsanweisungen, bestimmte Kriterien einzuhalten. Diese Kriterien werden in der SELECT-Anweisung festgelegt, die die Sicht definiert. Wenn die genderten Werte auerhalb des Bereichs der Sichtdefinition liegen, weist SQL Server die nderungen zurck.

Unterrichtseinheit 8: Implementieren von Sichten

19

Optimieren der Leistung mit Hilfe von Sichten


Erlutern Sie, wie die Leistung durch Verwenden von Sichten optimiert wird.

Thema

Leistungsaspekte Verwenden von indizierten Sichten Verwenden von Sichten zum Partitionieren von Daten

Einstieg

In diesem Abschnitt wird erlutert, wie die Leistung durch Verwenden von Sichten optimiert wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt werden Leistungsaspekte bei der Verwendung von Sichten beschrieben. Weiter wird erlutert, wie Sichten zur Leistungsoptimierung beitragen, indem sie das Ergebnis komplexer Abfragen speichern und Daten partitionieren.

20

Unterrichtseinheit 8: Implementieren von Sichten

Leistungsaspekte
Erlutern Sie, wie eine Sicht erstellt wird, die eine andere Sicht enthlt.

Thema

Einstieg

Wenn Sie bereits erledigte Arbeiten weiterverwenden mchten, knnen Sie eine Sicht von einer anderen Sicht erstellen. Dabei sollten Sie jedoch mgliche Leistungsprobleme bercksichtigen.

11Orders ~ ~ ~ n Orders ~ ~ ~ Order Details n Order Details 2211~~~~ ~~~~ ~~~~nnnn 11 ~~ ~ ~~ ~ ~~ ~~ 3322~~~~ ~~ ~ ~~ ~yynn 22 ~ ~ ~~ ~ 4433~~~~ ~ ~~~~ ~ ~~~~yyyy ~ 3~ ~y 44~ 3 ~ ~~ ~ ~~ ~~ ~ ~~n ~ y ~~ 55 ~ n ~ ~ ~ 4~ 55~ 4 ~ ~~ ~ ~~ ~~ ~ ~~y ~ n ~~ n 66 ~ y 55 ~~ ~~ ~~ ~~ ~~ ~~ 66 ~~ ~ ~ yy 66 ~~ ~~ ~~ ~~

Customers Customers

USE Northwind USE Northwind GO GO CREATE VIEW dbo.TopSalesView CREATE VIEW dbo.TopSalesView AS AS SELECT * SELECT * FROM dbo.TotalPurchaseView FROM dbo.TotalPurchaseView WHERE Subtotal > 50000 WHERE Subtotal > 50000 GO GO

TotalPurchaseView TotalPurchaseView TotalPurchaseView 11 ~~ ~~ ~~ ~~ 22 33 44 55 66 ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

TopSalesView TopSalesView ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

SELECT * ~~ SELECT * FROM dbo.TopSales FROM dbo.TopSales WHERE CompanyName = 'Ernst Handel' WHERE CompanyName = 'Ernst Handel'

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sichten, die mehrere Tabellen verknpfen und komplexe Ausdrcke auswerten, in einer anderen Sicht geschachtelt werden, ist die eigentliche Quelle von Leistungsproblemen mglicherweise schwer zu ermitteln. Aus diesem Grund empfiehlt es sich, separate Sichtdefinitionen zu erstellen, statt Sichten zu schachteln. Beispiel Im folgenden Beispiel fragt TopSalesView eine Teilmenge von Zeilen aus TotalPurchaseView ab.
USE Northwind GO CREATE VIEW dbo.TopSalesView AS SELECT * FROM dbo.TotalPurchaseView WHERE Subtotal > 50000 GO

Methodischer Hinweis
Stellen Sie folgende Frage: Wie tief knnen Sichten ineinander geschachtelt werden?

Antwort: Die einzige Grenze sind die verfgbaren Ressourcen. Schachteln Sie jedoch maximal drei Ebenen, um zu vermeiden, dass mgliche Leistungsprobleme auftreten.

Die Sichtdefinition von dbo.TopSalesView verbirgt die Komplexitt der zugrunde liegenden Abfrage zum Erstellen von TotalPurchaseView, die drei Basistabellen miteinander verknpft.

Unterrichtseinheit 8: Implementieren von Sichten


USE Northwind GO CREATE VIEW dbo.TotalPurchaseView AS SELECT CompanyName, Sum(CONVERT(money, (UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal FROM Customers c INNER JOIN Orders o ON c.CustomerID=o.CustomerID INNER JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY CompanyName GO

21

Abfrage

Wenn bei Benutzern Leistungsprobleme auftreten, whrend sie die folgende Abfrage zum Auflisten der verfgbaren franzsischen Bcher ausfhren, ist die Problemquelle nicht ohne weiteres sichtbar.
SELECT * FROM dbo.TopSalesView WHERE CompanyName = 'Ernst Handel'

Ergebnis

CompanyName Ernst Handel (1 row(s) affected)

Subtotal 104874.98

22

Unterrichtseinheit 8: Implementieren von Sichten

Verwenden von indizierten Sichten


Beschreiben Sie indizierte Sichten.

Thema

Indizierte Sichten speichern das Resultset in der Datenbank Erstellen von indizierten Sichten Richtlinien fr das Erstellen von indizierten Sichten Verwenden wenn: Leistungsverbesserungen wiegen mehr als Verwaltungskosten Zugrunde liegende Daten werden selten aktualisiert Abfragen fhren einen erheblichen Anteil an Verknpfungen und Aggregationen aus Einschrnkungen beim Erstellen von indizierten Sichten

Einstieg

Sie knnen Indizes fr Sichten erstellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Indizes fr Sichten erstellen. Eine indizierte Sicht speichert das Ergebnis einer Sicht in der Datenbank. Aufgrund der kurzen Abrufzeit knnen Sie mit indizierten Sichten die Abfrageleistung verbessern.

Erstellen von indizierten Sichten


Eine indizierte Sicht wird erstellt, indem Sie einen eindeutigen gruppierten (UNIQUE CLUSTERED)-Index fr eine Sicht implementieren. Das Ergebnis der Sicht wird in den Seiten auf Blattebene des gruppierten Indexes gespeichert. Nachdem Sie den UNIQUE CLUSTERED-Index erstellt haben, knnen Sie weitere Indizes fr diese Sicht erstellen. Eine indizierte Sicht spiegelt automatisch nderungen wieder, die an den Daten in den Basistabellen vorgenommen werden. So wie sich Daten ndern, wird der UNIQUE CLUSTERED-Index aktualisiert.

Richtlinien fr das Erstellen von indizierten Sichten


Der Abfrageoptimierer ermittelt automatisch, ob eine Abfrage von einer indizierten Sicht profitiert. Die Ermittlung ist selbst dann mglich, wenn die Abfrage nicht auf die indizierte Sicht verweist. Lassen Sie grundstzlich zu, dass der Abfrageoptimierer bestimmen kann, wann indizierte Sichten verwendet werden sollen. Mit dem Indexoptimierungs-Assistenten knnen Sie die beste Mischung aus Indizes und indizierten Sichten zur Optimierung der Abfrageleistung erheblich besser bestimmen.

Unterrichtseinheit 8: Implementieren von Sichten

23

Erstellen Sie indizierte Sichten unter folgenden Voraussetzungen: Die Leistungsverbesserungen aufgrund der Geschwindigkeitssteigerung beim Abrufen von Ergebnissen wiegen mehr als die erhhten Verwaltungskosten. Die zugrunde liegenden Daten werden selten aktualisiert. Abfragen fhren einen erheblichen Anteil an Verknpfungen und Aggregationen aus, in denen viele Zeilen verarbeitet werden oder die hufig von vielen Benutzern ausgefhrt werden.

Einschrnkungen beim Erstellen von indizierten Sichten


Beachten Sie beim Erstellen von indizierten Sichten die folgenden Richtlinien: Der erste Index, den Sie fr eine Sicht erstellen, muss ein eindeutiger gruppierter Index sein. Sie mssen die Sicht mit der Option SCHEMABINDING erstellen. Die Sicht kann auf Basistabellen verweisen, aber nicht auf andere Sichten. Sie mssen bei Verweisen auf Tabellen und benutzerdefinierte Funktionen zweiteilige Namen verwenden. Nachfolgende Verbindungen mssen ber dieselben Optionseinstellungen verfgen, um die indizierte Sicht zu verwenden. Anmerkung Sie sollten die IsIndexable-Eigenschaft der OBJECTPROPERTY-Funktion verwenden, um sicherzustellen, dass eine Sicht indiziert werden kann.

24

Unterrichtseinheit 8: Implementieren von Sichten

Verwenden von Sichten zum Partitionieren von Daten


Geben Sie eine Einfhrung in partitionierte Sichten.

Thema

Einstieg

Sie knnen Sichten verwenden, um Daten auf mehrere Datenbanken oder auf mehrere SQL ServerInstanzen zu verteilen.

Sie knnen Sichten verwenden, um Daten auf mehrere Datenbanken oder SQL Server-Instanzen zu verteilen Verwenden von Sichten zur Datenpartitionierung durch SQL Server So verbessern partitionierte Sichten die Leistung

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Sichten verwenden, um Daten auf mehrere Datenbanken oder auf mehrere SQL Server-Instanzen zu verteilen und dadurch die Leistung zu verbessern.

Verwenden von Sichten zur Datenpartitionierung durch SQL Server


Sie knnen den UNION-Mengenoperator in einer Sicht verwenden, um die Ergebnisse mehrerer Abfragen von separaten Tabellen in einem Resultset zusammenzufassen. Dieses Resultset wird dem Benutzer als eine einzige Tabelle angezeigt, die als partitionierte Sicht bezeichnet wird. Sie knnen partitionierte Sichten aktualisieren, auch wenn sie auf mehrere Tabellen verweisen. Partitionierte Sichten knnen auf Daten aus mehreren heterogenen Quellen, wie z. B. aus Remoteservern, und nicht nur auf Tabellen in derselben Datenbank basieren. Auf diese Weise knnen Sie die Datenbankverarbeitung auf eine Gruppe von Servern verteilen. Die Servergruppe ist in der Lage, die Verarbeitungsanforderungen von umfangreichen E-Commerce-Anwendungen oder Unternehmensrechenzentren zu erfllen.

Unterrichtseinheit 8: Implementieren von Sichten

25

So verbessern partitionierte Sichten die Leistung


Wenn sich die Tabellen in einer partitionierten Sicht auf verschiedenen Servern oder auf einem Computer mit mehreren Prozessoren befinden, knnen alle an der Abfrage beteiligten Tabellen parallel gescannt werden, was die Abfrageleistung verbessert. Darber hinaus knnen Verwaltungsaufgaben, wie z. B. das Neuerstellen von Indizes oder das Sichern einer Tabelle, schneller ausgefhrt werden. Anmerkung Sie knnen keinen Index fr eine partitionierte Sicht erstellen. Die Sichtdefinition, die zum Erstellen einer indizierten Sicht erforderlich ist, erlaubt nur zweiteilige Namen. Eine partitionierte Sicht setzt dagegen die Verwendung von drei- oder vierteiligen Namen voraus, wie z. B. Servername.databasename.ownername.objectname.

26

Unterrichtseinheit 8: Implementieren von Sichten

Empfohlene Methoden
Erlutern Sie die empfohlenen Methoden zur Verwendung von Sichten.

Thema

Verwenden einer Standard-Benennungskonvention Verwenden einer Standard-Benennungskonvention Der dbo-Benutzer sollte alle Sichten besitzen Der dbo-Benutzer sollte alle Sichten besitzen berprfen der Objektabhngigkeiten vor dem berprfen der Objektabhngigkeiten vor dem Lschen von Objekten Lschen von Objekten Lschen Sie niemals Eintrge aus der syscomments-Tabelle Lschen Sie niemals Eintrge aus der syscomments-Tabelle berlegen Sie genau, ob Sichten auf der Basis von Sichten berlegen Sie genau, ob Sichten auf der Basis von Sichten erstellt werden sollen erstellt werden sollen

Einstieg

Die folgenden Methoden zur Verwendung von Sichten werden empfohlen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden sollen Ihnen beim Verwenden und Verwalten von Sichten in Datenbanken behilflich sein: Sie sollten eine konsistente Benennungskonvention entwickeln, um Sichten von Tabellen zu unterscheiden. Geben Sie beim Erstellen von Sichten dbo als Besitzer an. Das Konto dbo sollte alle Objekte besitzen, auf die in der Sichtdefinition verwiesen wird. Damit vermeiden Sie, beim Abfragen der Sicht den Besitzernamen angeben zu mssen, weil der Datenbankbesitzer der Standardbesitzer ist. Der Datenbankbesitzer hat auch die Berechtigung fr alle zugrunde liegenden Objekte in der Datenbank, wodurch mgliche unterbrochene Besitzketten vermieden werden. berprfen Sie die Objektabhngigkeiten, bevor Sie Objekte aus der Datenbank lschen. Fhren Sie die gespeicherte Systemprozedur sp_depends aus, oder zeigen Sie die Abhngigkeiten in SQL Server Enterprise Manager an, um sicherzustellen, dass keine Abhngigkeiten fr ein zu lschendes Objekt bestehen. Lschen Sie niemals Eintrge in der syscomments-Systemtabelle. Wenn die Definition fr andere Benutzer in einer Anwendung unsichtbar sein soll, beziehen Sie die Option WITH ENCRYPTION in die CREATE VIEWbzw. die ALTER VIEW-Anweisung ein. Speichern Sie Ihre Skriptdefinition, bevor Sie das Skript verschlsseln. berlegen Sie es sich genau, ob Sichten auf der Basis von Sichten erstellt werden sollen. Dies knnte Komplexitten verbergen und so zu Leistungsproblemen fhren.

Unterrichtseinheit 8: Implementieren von Sichten

27

Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema CREATE VIEW ALTER VIEW DROP VIEW Unterbrochene Besitzketten SQL-Skripts generieren Suchbegriffe "create view" "alter view" "drop view" Besitzketten "Dokumentieren und Erstellen von Skripts einer Datenbank"

28

Unterrichtseinheit 8: Implementieren von Sichten

bungseinheit A: Implementieren von Sichten


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen, testen und ndern Sie Sichten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer Sicht mit Hilfe eines Assistenten. ndern einer Sicht, um die Sichtdefinition zu verschlsseln. ndern einer Sicht mit Hilfe der Option WITH CHECK OPTION. Verwenden von Informationsschemas, um Informationen ber Sichten zu erhalten.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L08 befinden. Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L08\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore08.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 8: Implementieren von Sichten

29

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

30

Unterrichtseinheit 8: Implementieren von Sichten

bung 1 Erstellen und Testen von Sichten


In dieser bung erstellen Sie Sichten, mit denen die tglichen Anforderungen an die ClassNorthwind-Datenbank verwaltet werden knnen. Hierzu verwenden Sie den Sichterstellungs-Assistenten und fhren ein Skript aus, das mehrere Sichten erstellt. Zum Schluss fragen Sie die Sichten ab, um zu berprfen, ob die erwarteten Ergebnisse erzielt wurden. So verwenden Sie den Sichterstellungs-Assistenten In diesem Verfahren verwenden Sie den Sichterstellungs-Assistenten, um schnell eine Sicht zu erstellen. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Server Enterprise Manager. 3. Klicken Sie in der Konsolenstruktur auf den Server. 4. Klicken Sie im Men Extras auf Assistenten. 5. Erweitern Sie Datenbank, und doppelklicken Sie auf SichterstellungsAssistent. 6. Erstellen Sie mit Hilfe der Informationen in der nachstehenden Tabelle eine Sicht, die alle Produkte eines bestimmten Lieferanten auflistet.
Option Datenbank auswhlen Tabellen auswhlen Spalten auswhlen Beschrnkung definieren Sicht benennen Eingabe ClassNorthwind Products ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, Discontinued
WHERE SupplierID = 14

FormaggiProductsView

7. Fragen Sie die Sicht ab, um sicherzustellen, dass das erwartete Resultset erzielt wurde.

Unterrichtseinheit 8: Implementieren von Sichten

31

So erstellen Sie Sichten mit einem Skript Bei diesem Verfahren fhren Sie ein Skript zum Erstellen von Sichten aus. 1. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Microsoft Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 2. ffnen Sie Labfiles\L08\CreaView.sql, sehen Sie sich das Skript an und fhren Sie es aus, um die folgenden Sichten zu erstellen.
Sichtname Customer and Suppliers by City Current Product List Orders Qry Products Above Average Price Products by Category Invoices Order Details Extended Sales by Category Sichtbeschreibung Alle Kunden und Lieferanten (UNION). Alle gefhrten Produkte. Alle Kundenauftrge und Auftragsdaten. Alle Produkte, deren Preis ber dem durchschnittlichen Produkteinheitenpreis liegt. Alle Produkte sind nach Kategorie aufgefhrt. Alle Rechnungsdaten. Alle Auftragsdaten mit erweiterten Preisinformationen. Alle Verkufe im Jahr 1997, aufgeschlsselt nach Kategorien.

3. ffnen Sie ein neues Abfragefenster, und fhren Sie die gespeicherte Systemprozedur sp_depends aus. Listen Sie die Tabellen , von denen die Order Details Extended-Sicht abhngt, sowie die Objekte auf, die von Order Details Extended abhngen. Tabellen: Order details und Products. Sicht: Sales by Category. ____________________________________________________________ ____________________________________________________________ 4. Wechseln Sie zu SQL Server Enterprise Manager, um die Abhngigkeiten von der Orders-Tabelle zu ermitteln. 5. Erweitern Sie in der Konsolenstruktur die ClassNorthwind-Datenbank, und klicken Sie dann auf Tabellen.

32

Unterrichtseinheit 8: Implementieren von Sichten

6. Klicken Sie im Detailbereich mit der rechten Maustaste auf die OrdersTabelle, klicken Sie im Kontextmen auf Alle Tasks, und klicken Sie dann auf Abhngigkeiten anzeigen. Welche Objekte sind von der Orders-Tabelle abhngig? Sichten: Invoices, Orders Qry, Product Sales for 1997, Quarterly Orders, Sales by Category, Summary of sales by quarter, Summary of sales by year und Sales Totals by Amount. Gespeicherte Prozeduren: Employee sales by country. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 8: Implementieren von Sichten

33

bung 2 Verschlsseln einer Sichtdefinition


In dieser bung ndern Sie eine Sicht, um deren Definition zu verschlsseln, damit sie unsichtbar ist. So ndern und verschlsseln Sie die Sales by Category-Sicht Bei diesem Verfahren zeigen Sie mit Hilfe von SQL Server Enterprise Manager das Skript an, mit dem die Sales by Category-Sicht erstellt wurde. Anschlieend ndern Sie die Sicht, um das Skript zu verschlsseln. L08\Answers\EncryptView.sql ist das vollstndige Skript fr dieses Verfahren. 1. ffnen Sie in der SQL Server-Onlinedokumentation das Thema Generieren eines Skripts (Enterprise Manager). 2. Verwenden Sie die darin enthaltene Prozedur zum Generieren eines Skripts fr die Sales by Category-Sicht. 3. Speichern Sie das Skript unter SaleByCatView.sql. Anmerkung Wenn Sie beim Generieren des Skripts die Eigenschaften der Sicht anzeigen oder die Vorschau whlen, knnen Sie die Sichtdefinition kopieren und zur nderung in ein Abfragefenster einfgen. 4. berarbeiten Sie das Skript in einem Abfragefenster, um die Sales by Category-Sicht so zu ndern, dass sie mit der Option WITH ENCRYPTION erstellt wird. 5. Fhren Sie das berarbeitete Skript zum ndern von Sales by Category aus. 6. Speichern Sie das Skript unter SaleByCatView.sql.

34

Unterrichtseinheit 8: Implementieren von Sichten

So testen Sie, ob die Anweisungen verschlsselt wurden Bei diesem Verfahren verwenden Sie die gespeicherte Systemprozedur sp_helptext und SQL Server Enterprise Manager, um die Auswirkung der verwendeten Verschlsselungsoption anzuzeigen. 1. Fhren Sie die gespeicherte Systemprozedur sp_helptext zur Anzeige des Skripts aus, mit dem Sales by Category erstellt wurde. Das Ergebnisfenster zeigt folgende Meldung an: Der Objektkommentar wurde verschlsselt. 2. Klicken Sie im Detailbereich von SQL Server Enterprise Manager mit der rechten Maustaste auf Sales by Category, und klicken Sie dann auf Eigenschaften. Wird die CREATE VIEW-Syntax angezeigt, mit der Sales by Category erstellt wurde? Nein. Die Syntax ist verschlsselt. ____________________________________________________________ 3. Wie wrden Sie die Sales by Category-Sicht entschlsseln? Durch ndern der Sicht und Einbeziehen der Originalsyntax, ohne die Option WITH ENCRYPTION. Hierbei wird vorausgesetzt, dass Sie das Skript mit der Originalsyntax zuvor gespeichert haben. ____________________________________________________________

Unterrichtseinheit 8: Implementieren von Sichten

35

bung 3 ndern von Daten unter Verwendung von Sichten


In dieser bung ndern Sie FormaggiProductsView, um WITH CHECK OPTION einzubeziehen, damit nur solche Datennderungen vorgenommen werden knnen, die die Sichtdefinition einhalten. So ndern Sie FormaggiProductsView zum Aktivieren von WITH CHECK OPTION In diesem Verfahren ndern Sie FormaggiProductsView, um WITH CHECK OPTION zu aktivieren. Answer_Update1.sql ist das vollstndige Skript fr dieses Verfahren. 1. Generieren Sie ein Skript fr die FormaggiProductsView-Sicht. 2. ndern Sie das Skript, um WITH CHECK OPTION zu aktivieren. 3. Fhren Sie das Skript aus, und speichern Sie die Datei mit den nderungen. So aktualisieren Sie die title-Tabelle mit Hilfe der FormaggiProductsView-Sicht In diesem Verfahren aktualisieren Sie die Products-Tabelle mit Daten, die auerhalb der FormaggiProductsView-Sicht liegen. Anschlieend zeigen Sie die Ergebnisse an. 1. Schreiben Sie eine UPDATE-Anweisung, um in FormaggiProductsView die Produkte mit der Product ID 31 des Lieferanten 12 und nicht mehr des Lieferanten 14 aufzulisten.
UPDATE dbo.FormaggiProductsView SET SupplierID = 12 WHERE ProductID = 31

2. Fhren Sie die UPDATE-Anweisung aus. Wie lautet das Ergebnis? Server: Nachr.-Nr. 550: Fehler beim Einfgen oder Aktualisieren, da die Zielsicht WITH CHECK OPTION angibt oder sich auf eine Sicht erstreckt, die WITH CHECK OPTION angibt, und mindestens eine Ergebniszeile nicht der CHECK OPTION-Einschrnkung entsprach. ____________________________________________________________ ____________________________________________________________

36

Unterrichtseinheit 8: Implementieren von Sichten

bung 4 Ermitteln von Sichtdefinitionen


In dieser bung fragen Sie die Informationsschemasichten ab, um Informationen zu den Sichten zu erhalten, die Sie in der ClassNorthwind-Datenbank erstellt haben. L08\Answers\Schema.sql ist das vollstndige Skript fr diese bung. So zeigen Sie Informationen zu Sichten an In diesem Verfahren fragen Sie die Informationsschemasichten ab, um Details zu Sichten der ClassNorthwind-Datenbank zu erhalten. 1. Stellen Sie sicher, dass Sie die ClassNorthwind-Datenbank verwenden. 2. Fragen Sie INFORMATION_SCHEMA.VIEWS ab, um alle Sichten und deren Definitionen anzuzeigen.
SELECT * FROM INFORMATION_SCHEMA.VIEWS

Welche Informationen wurden FormaggiProductsView und Products Above Average Price angezeigt? FormaggiProductsView zeigt CASCADE in der check_optionSpalte an. Die Definition der Sales by Category-Sicht ist in der view_definition-Spalte verschlsselt. ____________________________________________________________ ____________________________________________________________ 3. Welche Informationsschemasicht zeigt eine Liste von Tabellen- und Sichtnamen an? INFORMATION_SCHEMA.TABLES ____________________________________________________________ ____________________________________________________________ 4. Fragen Sie INFORMATION_SCHEMA.VIEW_COLUMN_USAGE ab, um eine Liste der Spalten anzuzeigen, auf die in der Invoices-Sicht verwiesen wird.
SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE WHERE view_name = 'Invoices'

Unterrichtseinheit 8: Implementieren von Sichten

37

5. Fragen Sie INFORMATION_SCHEMA.VIEW_TABLE_USAGE ab, um eine Liste der Tabellen anzuzeigen, auf die in der Sales by CategorySicht verwiesen wird.
SELECT * FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE WHERE view_name = 'Sales by Category '

Welche Tabellen wurden aufgelistet? Tabellen: Categories, Orders und Products. Sichten: Order Details Extended. ____________________________________________________________ ____________________________________________________________ Warum wurden die Tabellen, auf die in Sales by Category verwiesen wird, angezeigt, obwohl diese Sicht verschlsselt ist? Die Option WITH ENCRYPTION verschlsselt nur die Sichtdefinition in der syscomments-Systemtabelle. Tabellen oder Sichten, auf die in einer Sicht verwiesen wird, werden in der sysobjects-Systemtabelle aufgelistet. ____________________________________________________________ ____________________________________________________________ Welche Systemtabellen, Systemfunktionen oder gespeicherten Systemprozeduren htten Sie ebenfalls zum Anzeigen von Informationen zu Sichten verwenden knnen? Sysobjects, sysdepends, syscomments, syscolumns, OBJECTPROPERTY, OBJECT_ID, OBJECT_NAME, sp_helptext, sp_help und sp_depends. ____________________________________________________________ ____________________________________________________________

38

Unterrichtseinheit 8: Implementieren von Sichten

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Einfhrung zu Sichten Vorteile von Sichten Definieren von Sichten ndern von Daten mit Hilfe von Sichten Optimieren der Leistung mit Hilfe von Sichten

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Welche Vorteile bieten Sichten? Benutzer konzentrieren sich nur auf die bentigten Daten; Benutzer knnen Daten einfacher bearbeiten; die Komplexitt von Datenbanken und Abfragen wird vor den Benutzern verborgen, sodass verstndlichere Namen angezeigt werden knnen. Sichten stellen einen Sicherheitsmechanismus bereit durch die Mglichkeit, Benutzern den Zugriff nur auf Daten in Sichten zu erlauben. Das Erstellen von Indizes fr Sichten und das Partitionieren von Daten mit Hilfe von Sichten kann die Leistung optimieren.

2. Sie haben eine Abfrage entwickelt, die die Tabellen Customer, Orders und Order Details miteinander verknpft, um die Details zu allen Kundenauftrgen, wie z. B. Bestellmenge und Lieferdatum, aufzulisten. Wenn ein Kunde einen vorhandenen Auftrag ndert, mssen die Mitarbeiter in der Lage sein, die Tabellen Orders und Order Details zu aktualisieren. Wie wrden Sie diese Aufgabe erledigen, ohne eine Berechtigung fr die zugrunde liegenden Tabellen zu erteilen? Erstellen Sie fr die Abfrage eine Sicht namens OrderDetailsView. Erteilen Sie die Aktualisierungsberechtigung fr die Spalten RequiredDate und Quantity in der Sicht. Damit wird sichergestellt, dass die Mitarbeiter diese Spalten nur in den Tabellen Orders und Order Details aktualisieren knnen.

Unterrichtseinheit 8: Implementieren von Sichten

39

3. Worin liegt der Vorteil, wenn Sie in einer Sichtdefinition die Option WITH CHECK OPTION verwenden? Diese Option zwingt die fr die Sicht ausgefhrten nderungsanweisungen, die Kriterien einzuhalten, die in der SELECT-Anweisung zur Definition der Sicht festgelegt sind.

4. Welche Aspekte mssen unter anderem bei der Verwendung von Sichten bercksichtigt werden? Objekte, auf die in einer Sicht verwiesen wird, werden beim Erstellen einer Sicht berprft; Sichten knnen so gendert werden, dass die ihnen zugewiesenen Berechtigungen beibehalten werden. Das Lschen oder ndern einer zugrunde liegenden Tabelle wirkt sich auf die Sicht aus; wenn der Besitzer einer Sicht nicht der Benutzer dbo ist, muss der Benutzername als Teil des Sichtnamens angegeben werden. Zur Vermeidung von unterbrochenen Besitzketten sollten alle Objekte, von denen eine Sicht abhngt, demselben Besitzer gehren. Verborgene Komplexitt kann das Ermitteln der Quelle von Leistungsproblemen erschweren.

Unterrichtseinheit 8: Implementieren von Sichten

This page is intentionally left blank.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren


Inhalt bersicht Einfhrung in gespeicherte Prozeduren Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren bungseinheit A: Erstellen gespeicherter Prozeduren Verwenden von Parametern in gespeicherten Prozeduren Ausfhren erweiterter gespeicherter Prozeduren Behandeln von Fehlermeldungen Leistungsaspekte Empfohlene Methoden bungseinheit B: Erstellen gespeicherter Prozeduren mit Parametern Lernzielkontrolle 1 2 10 21 26 37 39 45 47 48 59

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

iii

Hinweise fr den Kursleiter


Prsentation: 90 Minuten bungseinheiten: 60 Minuten Diese Unterrichtseinheit beschreibt die Verwendung gespeicherter Prozeduren, um den Entwurf und die Leistung von Anwendungen zu verbessern, indem Geschftsregeln gekapselt werden. Es werden Verfahren zum Verarbeiten hufig verwendeter Abfragen und Datennderungen erlutert. Zu Beginn der Unterrichtseinheit wird erlutert, was unter gespeicherten Prozeduren zu verstehen ist, welche Vorteile mit ihrer Verwendung verbunden sind und wie sie verarbeitet werden. Im nchsten Abschnitt wird beschrieben, wie gespeicherte Prozeduren erstellt, ausgefhrt und gendert werden. Im darauffolgenden Abschnitt wird das Verwenden gespeicherter Prozeduren mit Eingabe- und Ausgabeparametern erklrt. Der Abschnitt behandelt zudem Optionen fr das erneute Kompilieren. In den letzten Abschnitten werden das Ausfhren erweiterter gespeicherter Prozeduren, das Behandeln von Fehlermeldungen sowie Leistungsaspekte beschrieben, die beim Implementieren von gespeicherten Prozeduren bercksichtigt werden sollten. Whrend der ganzen Unterrichtseinheit werden Beispiele fr gespeicherte Prozeduren und entsprechende Vorfhrungen bereitgestellt. In der ersten bungseinheit erstellen die Kursteilnehmer gespeicherte Prozeduren auf der Basis bereitgestellter Modelle und verwenden Microsoft SQL Server Enterprise Manager und SQL Query Analyzer, um Informationen zu gespeicherten Prozeduren anzuzeigen. In der zweiten bungseinheit verwenden die Kursteilnehmer einen Assistenten, um eine gespeicherte Prozedur zu erstellen, und generieren ein Skript fr eine gespeicherte Prozedur. Darber hinaus erstellen die Kursteilnehmer gespeicherte Prozeduren, die Informationen mit Hilfe von Eingabeparametern annehmen und Ausgabeparameter zurckgeben. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben, wie eine gespeicherte Prozedur verarbeitet wird. Erstellen, Ausfhren, ndern und Lschen einer gespeicherten Prozedur. Erstellen von gespeicherten Prozeduren, die Parameter annehmen. Ausfhren erweiterter gespeicherter Prozeduren. Erstellen benutzerdefinierter Fehlermeldungen.

iv

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_09.ppt Die Beispieldatei C:\Moc\2328A\Demo\D09_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheiten durch. Bearbeiten Sie alle Vorfhrungen. Machen Sie sich mit der Prsentation vertraut. Gehen Sie smtliche relevanten Whitepaper durch, die sich auf der Kursleiter-CD befinden.

Vorfhrung
In diesem Abschnitt werden Vorgehensweisen bei der Vorfhrung beschrieben, die nicht in den Randnotizen enthalten und nicht fr die Unterlagen der Kursteilnehmer geeignet sind.

Aktualisieren der Kundentelefonnummer


So bereiten Sie die Vorfhrung vor 1. ffnen Sie C:\Moc\2328A\Demo\D09_UpdateCustomerPhone.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie die Datei dann aus. 2. ffnen Sie C:\Moc\2328A\Demo\D09_TestUpdate.sql, und sehen Sie sich den Inhalt der Datei an. Markieren Sie jede Anweisung, die auf den Kommentar folgt, der den Zweck des Tests erlutert, und fhren Sie die Anweisungen aus, damit Sie mit den Ergebnissen vertraut sind.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

So fhren Sie die Vorfhrung aus 1. Wechseln Sie zu SQL Query Analyzer, und ffnen Sie die Datei C:\Moc\2328A\Demo\D09_UpdateCustomerPhone.sql. 2. Damit auch die Kursteilnehmer, die weiter hinten sitzen, das Skript gut sehen knnen, klicken Sie im Men Extras auf Optionen. 3. Whlen Sie auf der Registerkarte Schriftarten im Listenfeld Gre den Wert 20 aus, und klicken Sie dann auf OK. Anmerkung Die wichtigsten Teile des Skripts sind im Arbeitsbuch fr Kursteilnehmer aufgefhrt. 4. Fhren Sie einen Bildlauf bis hinter die EXEC-Anweisung aus. 5. Weisen Sie auf die benutzerdefinierten Fehlermeldungen hin, die mit der gespeicherten Systemprozedur sp_addmessage erstellt werden. 6. Wenn Sie den Abschnitt des Skripts besprechen, durch den ermittelt wird, ob die Kundentelefonnummer in der Datenbank vorhanden ist, fragen Sie die Kursteilnehmer, warum diese Anweisungen in das Skript eingeschlossen wurden. Antwort: Wenn Sie eine UPDATE-Anweisung ausfhren, die eine Kundentelefonnummer angibt, die nicht vorhanden ist, wird als Ergebnis Befehl(e) erfolgreich abgeschlossen. angezeigt. 7. Weisen Sie darauf hin, dass die eigentliche Transaktion, die die Kundentelefonnummer aktualisiert, kurz ist und erst beginnt, nachdem die Fehlerberprfung und die Geschftslogik abgeschlossen ist. Bei diesem Beispiel handelt es sich um ein optimistisches Modell, das einer kleineren Transaktion den Vorzug vor einer alles umfassenden Transaktion gibt. Das von Ihnen ausgewhlte Modell hngt von der Anwendungsumgebung ab sowie davon, ob sich diese negativ auf die Datenintegritt auswirkt. 8. Nachdem Sie das Skript besprochen haben, fhren Sie es aus, um die gespeicherte Prozedur UpdateCustomerPhone zur Northwind-Datenbank hinzuzufgen. 9. ffnen Sie C:\Moc\2328A\Demo\D09_TestUpdate.sql, und markieren Sie jede Anweisung, die auf den Kommentar folgt, der die zu testende Fehlerbedingung erklrt, und fhren Sie die Anweisung aus.

vi

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung in gespeicherte Prozeduren Stellen Sie die Elemente einer gespeicherten Prozedur vor, und geben Sie eine bersicht ber die verschiedenen Arten gespeicherter Prozeduren gespeicherte Systemprozeduren, lokale gespeicherte Prozeduren, temporr gespeicherte Prozeduren, remote gespeicherte Prozeduren oder erweiterte gespeicherte Prozeduren. Der Schwerpunkt dieser Unterrichtseinheit liegt auf dem Erstellen gespeicherter Prozeduren, die in einer lokalen Datenbank eines Benutzers definiert werden. Erklren Sie, wie gespeicherte Prozeduren verarbeitet werden, und weisen Sie auf die Vorteile hin, die das Erstellen gespeicherter Prozeduren in Anwendungen fr die Kursteilnehmer mit sich bringt. Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren Beschreiben Sie, wie gespeicherte Prozeduren erstellt, ausgefhrt, gendert und gelscht werden. Erlutern Sie die Verwendung der WITH ENCRYPTION-Option, und fhren Sie die Programmierrichtlinien fr das Erstellen gespeicherter Prozeduren auf. Verwenden von Parametern in gespeicherten Prozeduren Dieser Abschnitt sollte innerhalb der Unterrichtseinheit am strksten betont werden, da gespeicherte Prozeduren durch Parameter ein Hchstma an Funktionalitt und Flexibilitt erhalten. Erlutern Sie Eingabe- und Ausgabeparameter. Vergleichen Sie gespeicherte Prozeduren, die Parameter durch Verweis oder nach der Position angeben. Betonen Sie, dass das bergeben durch Verweis die bevorzugte Methode ist, da sie besser nachvollziehbar ist. Gehen Sie zum Schluss kurz auf die Mglichkeit ein, eine gespeicherte Prozedur explizit erneut zu kompilieren. Weisen Sie die Kursteilnehmer darauf hin, dass die Verwendung dieses Features nicht zur Regel werden sollte. Ausfhren erweiterter gespeicherter Prozeduren Geben Sie eine kurze Wiederholung zu erweiterten gespeicherten Prozeduren. Heben Sie hervor, dass die Kursteilnehmer eine erweiterte gespeicherte Prozedur aus jeder Datenbank heraus aufrufen knnen, wenn sie eine gespeicherte Prozedur mit dem Prfix sp_ erstellen, durch die die erweiterte gespeicherte Prozedur aufgerufen wird. Falls ausreichend Zeit zur Verfgung steht, knnen Sie den Kursteilnehmern zeigen, wie sie sehr leicht eine gespeicherte Prozedur erstellen knnen, die die erweiterte gespeicherte Prozedur xp_cmdshell aufruft.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

vii

Behandeln von Fehlermeldungen Betonen Sie die Bedeutung der Fehlerbehandlung, wenn Sie die RETURNAnweisung, die @@error-Systemfunktion, die gespeicherte Systemprozedur sp_addmessage und die RAISERROR-Anweisung erlutern. Zeigen Sie, wie ein Element aus der Northwind-Datenbank entfernt werden kann, um Strategien zum Behandeln von Fehlermeldungen zu veranschaulichen. Bevor Sie diese Vorfhrung durchfhren knnen, mssen Sie die Informationen zum Einrichten der Vorfhrung lesen. Leistungsaspekte Erlutern Sie einige der Leistungsaspekte, die beim Verwenden gespeicherter Prozeduren bercksichtigt werden mssen.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheiten in dieser Unterrichtseinheit hngen von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheiten


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr diese Unterrichtseinheit.

Anforderung zum Einrichten der bungseinheit A


Fr die bungseinheit in dieser Unterrichtseinheit muss die ClassNorthwindDatenbank den Zustand aufweisen, der fr diese bungseinheit erforderlich ist. Damit die Kursteilnehmercomputer diese Anforderungen erfllen, mssen Sie eine der folgenden Aktionen ausfhren: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore09A.cmd.

viii

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Anforderung zum Einrichten der bungseinheit B


Fr die bungseinheit in dieser Unterrichtseinheit muss die ClassNorthwindDatenbank den Zustand aufweisen, der fr diese bungseinheit erforderlich ist. Damit die Kursteilnehmercomputer diese Anforderungen erfllen, mssen Sie eine der folgenden Aktionen ausfhren: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore09B.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore09A.cmd ausfhren, um sicherzustellen, dass die erste bungseinheit ordnungsgem funktioniert. Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore09B.cmd ausfhren, um sicherzustellen, dass die zweite bungseinheit ordnungsgem funktioniert.

Ergebnisse der bungseinheiten


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung in gespeicherte Prozeduren Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren Verwenden von Parametern in gespeicherten Prozeduren Ausfhren erweiterter gespeicherter Prozeduren Behandeln von Fehlermeldungen

Einstieg

In dieser Unterrichtseinheit erhalten Sie Informationen zu gespeicherten Prozeduren und erfahren, in welchen Situationen sich die Verwendung gespeicherter Prozeduren anbietet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********

Lernziele
Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben, wie eine gespeicherte Prozedur verarbeitet wird. Erstellen, Ausfhren, ndern und Lschen einer gespeicherten Prozedur. Erstellen von gespeicherten Prozeduren, die Parameter annehmen. Ausfhren erweiterter gespeicherter Prozeduren. Erstellen benutzerdefinierter Fehlermeldungen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Einfhrung in gespeicherte Prozeduren


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Definieren gespeicherter Prozeduren Erstmaliges Verarbeiten gespeicherter Prozeduren Nachfolgendes Verarbeiten gespeicherter Prozeduren Vorteile gespeicherter Prozeduren

In diesem Abschnitt werden diese Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Dieser Abschnitt bietet eine Einfhrung in die verschiedenen Typen gespeicherter Prozeduren von Microsoft SQL Server 2000. Es wird beschrieben, wie gespeicherte Prozeduren erstmalig und bei nachfolgender Ausfhrung verarbeitet werden, und es werden einige der Vorteile aufgefhrt, die sich aus dem Verwenden gespeicherter Prozeduren ergeben.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Definieren gespeicherter Prozeduren


Definieren Sie gespeicherte Prozeduren.

Thema

Einstieg

Benannte Auflistung von Transact-SQL-Anweisungen Kapseln wiederkehrender Tasks Fnf Typen (System, Lokal, Temporr, Remote und Erweitert) Annehmen von Eingabeparametern und Rckgabewerten Zurckgeben eines Statuswertes, der Erfolg oder Fehlschlagen anzeigt

Bei einer gespeicherten Prozedur handelt es sich um eine auf dem Server gespeicherte vorkompilierte Auflistung von TransactSQL-Anweisungen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei einer gespeicherten Prozedur handelt es sich um eine auf dem Server gespeicherte benannte Auflistung von Transact-SQL-Anweisungen. Mit gespeicherten Prozeduren knnen wiederkehrende Tasks gekapselt werden. Gespeicherte Prozeduren untersttzen von Benutzern deklarierte Variablen, die bedingte Ausfhrung sowie weitere leistungsfhige Programmierfeatures. SQL Server untersttzt fnf Typen von gespeicherten Prozeduren: Gespeicherte Systemprozeduren (sp_) Gespeicherte Systemprozeduren (zu erkennen am Prfix sp_) sind in der master-Datenbank gespeichert und stellen eine effiziente Methode bereit, um Daten aus Systemtabellen abzurufen. Mit Hilfe dieser Prozeduren knnen Systemadministratoren Systemtabellen im Rahmen von Datenbankverwaltungsaufgaben aktualisieren, auch wenn sie nicht ber die Berechtigung zum direkten Aktualisieren der zugrunde liegenden Tabellen verfgen. Gespeicherte Systemprozeduren knnen in jeder beliebigen Datenbank ausgefhrt werden. Lokale gespeicherte Prozeduren Lokale gespeicherte Prozeduren werden in einzelnen Benutzerdatenbanken erstellt. Temporr gespeicherte Prozeduren Bei temporr gespeicherten Prozeduren kann es sich um lokale Prozeduren handeln, deren Namen mit einem einfachen Nummernzeichen (#) beginnen, oder um globale Prozeduren, deren Namen mit einem doppelten Nummernzeichen beginnen (##). Lokale temporr gespeicherte Prozeduren sind nur innerhalb einer einzigen Benutzersitzung verfgbar; globale temporr gespeicherte Prozeduren stehen fr alle Benutzersitzungen zur Verfgung. Remote gespeicherte Prozeduren Remote gespeicherte Prozeduren sind ein lteres Feature von SQL Server. Diese Funktionalitt wird nun durch verteilte Abfragen untersttzt.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Einige gespeicherte Systemprozeduren rufen erweiterte gespeicherte Prozeduren auf.

Weitere Informationen

Erweiterte gespeicherte Prozeduren (xp_) Erweiterte gespeicherte Prozeduren werden in Form von DLLs (Dynamic Link Libraries) implementiert, die auerhalb der SQL Server-Umgebung ausgefhrt werden. Erweiterte gespeicherte Prozeduren sind durch das Prfix xp_ gekennzeichnet. Sie werden hnlich wie gespeicherte Prozeduren ausgefhrt. Gespeicherte Prozeduren in SQL Server hneln Prozeduren in anderen Programmiersprachen darin, dass Sie folgende Funktionalitt bieten: Sie knnen Anweisungen enthalten, die Operationen in der Datenbank ausfhren. Dies schliet auch die Mglichkeit ein, andere gespeicherte Prozeduren aufzurufen. Sie nehmen Eingabeparameter an. Sie knnen einen Statuswert an eine aufrufende gespeicherte Prozedur oder einen Batch zurckgeben, der Erfolg oder Fehlschlagen (sowie den Grund fr das Fehlschlagen) anzeigt. Sie knnen mehrere Werte in Form von Ausgabeparametern an die aufrufende gespeicherte Prozedur oder den Batch zurckgeben.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Erstmaliges Verarbeiten gespeicherter Prozeduren


Beschreiben Sie die Schritte, die beim Verarbeiten einer gespeicherten Prozedur durchgefhrt werden.

Thema

Erstellung Erstellung

Analyse Analyse

Eintrge in die sysobjectsEintrge in die sysobjectsund syscomments-Tabelle und syscomments-Tabelle

Einstieg

Beim Verarbeiten einer gespeicherten Prozedur wird diese zunchst erstellt und dann zum ersten Mal ausgefhrt. Dadurch wird ihr Ausfhrungsplan in den Cache geschrieben.

Ausfhrung Ausfhrung
((erstmaligoder erstmalig oder erneutes erneutes Kompilieren) Kompilieren)

Optimierung Optimierung

Kompilierung Kompilierung

Prozedurcache enthlt Prozedurcache enthlt kompilierten Plan kompilierten Plan

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Verarbeiten einer gespeicherten Prozedur wird diese zunchst erstellt und dann zum ersten Mal ausgefhrt. Dadurch wird ihr Ausfhrungsplan in den Prozedurcache geschrieben. Der Prozedurcache ist ein Arbeitsspeicherbereich, der die Ausfhrungsplne fr alle aktuell ausgefhrten Transact-SQL-Anweisungen enthlt. Die Gre des Prozedurcaches ndert sich dynamisch entsprechend dem Grad an Aktivitt. Der Prozedurcache befindet sich im Arbeitsspeicherpool, der Haupt-Arbeitsspeichereinheit fr SQL Server. Er enthlt den grten Teil der Datenstrukturen, die Arbeitsspeicher in SQL Server verwenden.

Erstellung
Beim Erstellen einer gespeicherten Prozedur werden die enthaltenen Anweisungen in Bezug auf syntaktische Korrektheit analysiert. SQL Server speichert dann den Namen der gespeicherten Prozedur in der sysobjects-Systemtabelle und den Text der gespeicherten Prozedur in der syscomments-Systemtabelle der aktuellen Datenbank. Wenn ein Syntaxfehler festgestellt wird, wird ein Fehler zurckgegeben, und die gespeicherte Prozedur wird nicht erstellt. Methodischer Hinweis
Weisen Sie auf den Vorgang der verzgerten Namensauflsung hin.

Verzgerte Namensauflsung
Die verzgerte Namensauflsung ermglicht es, dass gespeicherte Prozeduren bei ihrer Erstellung auf nicht vorhandene Objekte verweisen. Dieser Vorgang erhht die Flexibilitt, da gespeicherte Prozeduren und die Objekte, auf die sie verweisen, nicht in einer bestimmten Reihenfolge erstellt werden mssen. Die Objekte mssen erst dann vorhanden sein, wenn die gespeicherte Prozedur ausgefhrt wird. Die verzgerte Namensauflsung wird ausgefhrt, wenn die gespeicherte Prozedur ausgefhrt wird.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Ausfhrung (erstmalig oder erneutes Kompilieren)


Beim erstmaligen Ausfhren einer gespeicherten Prozedur oder wenn die gespeicherte Prozedur erneut kompiliert werden muss, fhrt der Abfrageprozessor einen als Auflsung bezeichneten Vorgang aus, in dessen Verlauf die gespeicherte Prozedur gelesen wird. Bestimmte nderungen in einer Datenbank knnen dazu fhren, dass ein Ausfhrungsplan ineffizient wird oder nicht mehr gltig ist. SQL Server erkennt diese nderungen und fhrt in den folgenden Fllen automatisch eine erneute Kompilierung des Ausfhrungsplanes durch: Bei strukturellen nderungen an einer Tabelle oder Sicht, auf die die Abfrage verweist (ALTER TABLE und ALTER VIEW). Bei explizit durch eine Anweisung, wie z. B. UPDATE STATISTICS, generierten neuen Verteilungsstatistiken oder beim automatischen Generieren neuer Verteilungsstatistiken. Wenn ein vom Ausfhrungsplan verwendeter Index gelscht wird. Bei wichtigen nderungen an Schlsseln (durch die INSERT- oder DELETE-Anweisung) fr eine Tabelle, auf die die Abfrage verweist.

Optimierung
Wenn eine gespeicherte Prozedur die Auflsungsphase erfolgreich durchluft, analysiert der Abfrageoptimierer von SQL Server die Transact-SQL-Anweisungen in der gespeicherten Prozedur und erstellt einen Plan, der das schnellste Verfahren zum Zugreifen auf die Daten enthlt. Beim Ermitteln des schnellsten Verfahrens bercksichtigt der Abfrageoptimierer die folgenden Aspekte: Der Umfang der Daten in den Tabellen. Das Vorhandensein und den Typ der Tabellenindizes sowie die Verteilung von Daten in den indizierten Spalten. Die in den Bedingungen von WHERE-Klauseln verwendeten Vergleichsoperatoren und Vergleichswerte. Das Vorhandensein von Verknpfungen sowie der Klauseln UNION, GROUP BY oder ORDER BY.

Kompilierung
Bei der Kompilierung werden gespeicherte Prozeduren analysiert und ein im Prozedurcache enthaltener Ausfhrungsplan erstellt. Der Prozedurcache enthlt die wichtigsten Ausfhrungsplne fr gespeicherte Prozeduren. Folgende Faktoren knnen unter anderem die Bedeutung eines Planes vergrern: Die zum erneuten Kompilieren bentigte Zeit (hohe Kompilierungskosten) Hufige Verwendung

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Nachfolgendes Verarbeiten gespeicherter Prozeduren


Beschreiben Sie das nachfolgende Verarbeiten gespeicherter Prozeduren.

Thema

Ausfhrungsplan erhalten Abfrageplan


SELECT * FROM dbo.member WHERE member_no = ?

Ausfhrungskontext
Verbindung 1

Einstieg

Das nachfolgende Verarbeiten gespeicherter Prozeduren bentigt weniger Zeit als das erstmalige Verarbeiten, da SQL Server den Ausfhrungsplan im Prozedurcache verwendet.

8082
Verbindung 2

24
Verbindung 3

1003

Nicht verwendeter Plan wird entfernt

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das nachfolgende Verarbeiten gespeicherter Prozeduren bentigt weniger Zeit als das erstmalige Verarbeiten, da SQL Server den optimierten Ausfhrungsplan im Prozedurcache verwendet.
Verwenden Sie sp_configure fr Servereinstellungen, sp_dboption fr Datenbankeinstellungen und SET-Optionen fr Verbindungseinstellungen.

Wenn die folgenden Bedingungen zutreffen, verwendet SQL Server den im Arbeitsspeicher gehaltenen Plan, um die Abfrage nachfolgend auszufhren: Die aktuelle Umgebung stimmt mit der Umgebung berein, in der der Plan kompiliert wurde. Die Umgebung wird durch Server-, Datenbank- und Verbindungseinstellungen bestimmt. Objekte, auf die die gespeicherte Prozedur verweist, erfordern keine Namensauflsung. Die Namensauflsung ist dann fr Objekte erforderlich, wenn Objekte, die sich im Besitz verschiedener Benutzer befinden, dieselben Namen aufweisen. Wenn zum Beispiel sowohl die sales-Rolle als auch die development-Rolle eine Tabelle mit der Bezeichnung Product besitzt, muss SQL Server ermitteln, welche Tabelle bei einem Verweis auf eine Product-Tabelle verarbeitet werden muss. Ausfhrungsplne von SQL Server weisen zwei Hauptkomponenten auf: Abfrageplan: Bei dem grten Teil des Abfrageplanes handelt es sich um eine eintrittsinvariante, schreibgeschtzte Datenstruktur, die von einer beliebigen Anzahl von Benutzern verwendet werden kann. Ausfhrungskontext: Jeder Benutzer, der die Abfrage momentan ausfhrt, verfgt ber eine solche wiederverwendbare Datenstruktur mit Daten, die speziell fr die jeweilige Ausfhrung gelten (z. B. Parameterwerte). Wenn ein Benutzer eine Abfrage ausfhrt und eine der Strukturen derzeit nicht verwendet wird, wird sie mit dem Kontext fr den neuen Benutzer neu initialisiert.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Im Cache befindet sich in der Regel immer jeweils ein kompilierter Plan fr jede eindeutige Kombination aus gespeicherter Prozedur und Umgebung. Der Cache kann mehrere Plne fr dieselbe gespeicherte Prozedur enthalten, wenn sich jeder Plan auf eine andere Umgebung bezieht. Die folgenden Faktoren fhren zu unterschiedlichen Umgebungen, die sich auf die Kompilierungsmglichkeiten auswirken: Parallele im Gegensatz zu seriellen kompilierten Plnen Impliziter Objektbesitz Unterschiedliche SET-Optionen Anmerkung Weitere Informationen zu parallelen Ausfhrungsplnen finden Sie unter dem Thema Grad der Parallelitt in der SQL Server-Onlinedokumentation. Entwickler sollten eine Umgebung fr ihre Anwendungen auswhlen und diese verwenden. Fr Objekte, bei denen die implizite Auflsung des Besitzes zu mehrdeutigen Ergebnissen fhrt, sollte die explizite Auflsung durch Angeben des Objektbesitzers verwendet werden. Es sollten konsistente SET-Optionen verwendet werden, die am Anfang der Verbindung festgelegt und anschlieend nicht mehr gendert werden. Nachdem ein Ausfhrungsplan generiert wurde, bleibt er im Prozedurcache gespeichert. SQL Server entfernt alte, nicht mehr verwendete Plne nur dann aus dem Cache, wenn Speicherplatz bentigt wird.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Vorteile gespeicherter Prozeduren


Erlutern Sie die Vorteile gespeicherter Prozeduren.

Thema

Einstieg

Gemeinsames Nutzen der Anwendungslogik Abschirmen der Details des Datenbankschemas Bereitstellen von Sicherheitsmechanismen Verbessern der Leistung Reduzieren des Netzwerkverkehrs

Durch die Verwendung von gespeicherten Prozeduren kann die Auslastung der zur Ausfhrung bentigten Ressourcen erheblich reduziert und die Ausfhrungszeit verkrzt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Gespeicherte Prozeduren bieten zahlreiche Vorteile. Dazu gehren die folgenden: Gemeinsames Nutzen der Anwendungslogik mit anderen Anwendungen und dadurch Gewhrleisten der Datenkonsistenz bei Zugriffen und nderungen. Geschftsfunktionen knnen mit Hilfe gespeicherter Prozeduren zusammengefasst werden. Sie haben die Mglichkeit, in gespeicherten Prozeduren zusammengefasste Geschftsregeln oder Richtlinien an einem einzigen Ort zu ndern. Auf allen Clients knnen dieselben gespeicherten Prozeduren verwendet werden, wodurch Datenkonsistenz bei Zugriffen und nderungen gewhrleistet ist. Benutzer erhalten keinen Einblick in die Details der Datenbanktabellen. Wenn alle von Benutzern durchzufhrenden Geschftsfunktionen durch einen Satz von gespeicherten Prozeduren untersttzt werden, ist nie ein direkter Benutzerzugriff auf die Tabellen erforderlich. Bereitstellen von Sicherheitsmechanismen. Benutzern knnen auch dann Berechtigungen zum Ausfhren einer gespeicherten Prozedur erteilt werden, wenn sie nicht berechtigt sind, auf die Tabellen oder Sichten zuzugreifen, auf die in der gespeicherten Prozedur verwiesen wird. Verbessern der Leistung. Mit gespeicherten Prozeduren werden mehrere Tasks als eine Reihe von Transact-SQL-Anweisungen implementiert. Durch das Anwenden von Bedingungslogik auf die Ergebnisse der ersten TransactSQL-Anweisungen knnen die Transact-SQL-Anweisungen ermittelt werden, die nachfolgend ausgefhrt werden sollen. Diese Transact-SQL-Anweisungen und die Bedingungslogik werden als Teil eines einzelnen Ausfhrungsplanes auf dem Server gespeichert.
Der Netzwerkverkehr wird reduziert, da fr das Senden von Anforderungen weniger Pakete bentigt werden.

Reduzieren des Netzwerkverkehrs. Anstatt mehrere Hundert Transact-SQLAnweisungen ber das Netzwerk zu senden, knnen Benutzer eine komplexe Operation ausfhren, indem sie nur eine einzelne Anweisung senden. Auf diese Weise wird die Anzahl der zwischen Server und Client bermittelten Anforderungen reduziert.

10

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren


Geben Sie eine Einfhrung in das Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren.

Thema

Erstellen gespeicherter Prozeduren Richtlinien fr das Erstellen gespeicherter Prozeduren Ausfhren von gespeicherten Prozeduren ndern und Lschen gespeicherter Prozeduren

Einstieg

Nachdem in den vorhergehenden Abschnitten die Definition und Verarbeitung gespeicherter Prozeduren behandelt wurde, wird nun erlutert, wie gespeicherte Prozeduren erstellt, ausgefhrt, gendert und gelscht werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird beschrieben, wie gespeicherte Prozeduren erstellt, ausgefhrt, gendert und gelscht werden.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

11

Erstellen gespeicherter Prozeduren


Geben Sie eine Einfhrung in die CREATE PROCEDURE-Syntax.

Thema

Erstellen in der aktuellen Datenbank mit der CREATE PROCEDURE-Anweisung


USE Northwind GO CREATE PROC dbo.OverdueOrders AS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null GO

Einstieg

Mit Hilfe der CREATE PROCEDURE-Anweisung knnen Sie gespeicherte Prozeduren in der aktuellen Datenbank erstellen.

Knnen auf bis zu 32 Ebenen geschachtelt werden Verwenden von sp_help, um Informationen anzuzeigen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Die Syntax lsst das Angeben des Datenbanknamens als Prfix des Objektnamens nicht zu.

Eine gespeicherte Prozedur kann nur in der aktuellen Datenbank erstellt werden. Die einzige Ausnahme hiervon stellen temporr gespeicherte Prozeduren dar, die immer in der tempdb-Datenbank erstellt werden. Das Erstellen einer gespeicherten Prozedur hnelt dem Erstellen einer Sicht. Schreiben und testen Sie zunchst die Transact-SQL-Anweisungen, die in der gespeicherten Prozedur eingeschlossen sein sollen. Wenn die Ergebnisse Ihren Erwartungen entsprechen, knnen Sie anschlieend die gespeicherte Prozedur erstellen.

Verwenden von CREATE PROCEDURE


Gespeicherte Prozeduren werden mit Hilfe der CREATE PROCEDURE-Anweisung erstellt. Bercksichtigen Sie beim Erstellen gespeicherter Prozeduren die folgenden Aspekte: Gespeicherte Prozeduren knnen auf Tabellen, Sichten, benutzerdefinierte Funktionen und auf andere gespeicherte Prozeduren sowie auf temporre Tabellen verweisen. Wenn eine gespeicherte Prozedur eine lokale temporre Tabelle erstellt, steht diese Tabelle nur fr die gespeicherte Prozedur zur Verfgung und wird nach Beendigung der Prozedurausfhrung wieder gelscht. Eine CREATE PROCEDURE-Anweisung kann nicht mit anderen TransactSQL-Anweisungen in einem einzigen Batch kombiniert werden. Mit Ausnahme der folgenden Anweisungen zur Objekterstellung kann die CREATE PROCEDURE-Definition Transact-SQL-Anweisungen eines beliebigen Typs und in unbeschrnkter Anzahl enthalten: CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER und CREATE VIEW. Innerhalb einer gespeicherten Prozedur knnen weitere Datenbankobjekte erstellt werden; diese sollten mit dem Namen des Objektbesitzers gekennzeichnet werden.

12

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Um die CREATE PROCEDURE-Anweisung auszufhren, mssen Sie ein Mitglied der Systemadministratorrolle (sysadmin), der Datenbankbesitzerrolle (db_owner) oder der DDL-Administratorrolle (Data Definition Language), db_ddladmin, sein oder ber die CREATE PROCEDURE-Berechtigung verfgen. In Abhngigkeit vom verfgbaren Arbeitsspeicher betrgt die Gre einer gespeicherten Prozedur maximal 128 MB. Teilsyntax CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] Mit den folgenden Anweisungen wird eine gespeicherte Prozedur erstellt, die alle berflligen Bestellungen aus der Northwind-Datenbank auflistet.
USE Northwind GO CREATE PROC dbo.OverdueOrders AS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null GO

Beispiel

Schachteln gespeicherter Prozeduren


Gespeicherte Prozeduren knnen geschachtelt werden (eine Prozedur ruft eine andere auf). Fr das Schachteln gelten die folgenden Merkmale: Gespeicherte Prozeduren knnen auf bis zu 32 Ebenen geschachtelt werden. Der Versuch, die Anzahl der maximal 32 Schachtelungsebenen zu berschreiten, fhrt dazu, dass die gesamte Kette der aufrufenden gespeicherten Prozeduren fehlschlgt. Die aktuelle Schachtelungsebene ist in der @@nestlevel-Systemfunktion gespeichert. Wenn eine gespeicherte Prozedur eine zweite gespeicherte Prozedur aufruft, kann die zweite gespeicherte Prozedur auf alle Objekte zugreifen, die durch die erste gespeicherte Prozedur erstellt wurden, einschlielich der temporren Tabellen. Geschachtelte gespeicherte Prozeduren knnen rekursiv sein. So kann z. B. die gespeicherte Prozedur X die gespeicherte Prozedur Y aufrufen. Whrend die gespeicherte Prozedur Y ausgefhrt wird, kann sie wiederum die gespeicherte Prozedur X aufrufen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

13

Anzeigen von Informationen zu gespeicherten Prozeduren


Wie bei anderen Datenbankobjekten kann mit Hilfe folgender gespeicherter Systemprozeduren nach zustzlichen Informationen zu allen Typen von gespeicherten Prozeduren gesucht werden: sp_help, sp_helptext und sp_depends. Wenn Sie eine Liste der in der Datenbank enthaltenen gespeicherten Prozeduren und Besitzernamen ausgeben mchten, knnen Sie die gespeicherte Systemprozedur sp_stored_procedures verwenden. Darber hinaus knnen Sie die Systemtabellen sysobjects, syscomments und sysdepends abfragen, um Informationen zu erhalten.

14

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Richtlinien fr das Erstellen gespeicherter Prozeduren


Beschreiben Sie die Richtlinien fr das Erstellen gespeicherter Prozeduren.

Thema

Benutzer dbo sollte Besitzer aller gespeicherten Prozeduren sein Eine gespeicherte Prozedur fr einen Task Erstellen, Testen und Problembehandlung Vermeiden Sie das Prfix sp_ in Namen von gespeicherten Prozeduren Verwenden Sie dieselben Verbindungseinstellungen fr alle gespeicherten Prozeduren Minimieren Sie die Verwendung von temporren gespeicherten Prozeduren Lschen Sie Eintrge nie direkt aus der syscommentsSystemtabelle

Einstieg

Bercksichtigen Sie beim Erstellen gespeicherter Prozeduren folgende Richtlinien.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bercksichtigen Sie beim Erstellen gespeicherter Prozeduren die folgenden Richtlinien: Um Situationen zu vermeiden, in denen der Besitzer einer gespeicherten Prozedur nicht mit dem Besitzer der zugrunde liegenden Tabellen bereinstimmt, empfiehlt es sich, den Benutzer dbo als Besitzer aller Objekte in einer Datenbank anzugeben. Da ein Benutzer Mitglied mehrerer Rollen sein kann, sollten Sie beim Erstellen des Objekts immer den Benutzer dbo als Besitzernamen angeben. Andernfalls wird beim Erstellen des Objekts Ihr Benutzername als Besitzer festgelegt: Sie mssen ber die entsprechenden Berechtigungen fr alle Tabellen oder Sichten verfgen, auf die innerhalb der gespeicherten Prozedur verwiesen wird. Vermeiden Sie Situationen, in denen der Besitzer einer gespeicherten Prozedur und der Besitzer der zugrunde liegenden Tabellen voneinander abweichen. Anmerkung Wenn Sie eine benutzerdefinierte gespeicherte Systemprozedur erstellen, mssen Sie als Mitglied der Systemadministratorrolle (sysadmin) angemeldet sein und die master-Datenbank verwenden. Entwerfen Sie jede gespeicherte Prozedur so, dass sie einen einzigen Task ausfhrt. Methodischer Hinweis
Empfehlen Sie den Kursteilnehmern, die Leistung einer gespeicherten Prozedur zunchst mit Hilfe von osql zu testen, da auf diese Weise nur geringfgiger Aufwand fr die Anwendung verursacht wird.

Erstellen und testen Sie die gespeicherte Prozedur auf dem Server, und beheben Sie hier eventuell auftretende Probleme. Testen Sie sie anschlieend vom Client aus. Um gespeicherte Systemprozeduren problemlos unterscheiden zu knnen, vermeiden Sie das Prfix sp_, wenn Sie Namen fr lokale gespeicherte Prozeduren festlegen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

15

Verwenden Sie fr alle gespeicherten Prozeduren dieselben Verbindungseinstellungen. SQL Server speichert die Einstellungen sowohl fr SET QUOTED_IDENTIFIER als auch fr SET ANSI_NULLS, wenn eine gespeicherte Prozedur erstellt oder gendert wird. Diese Originaleinstellungen werden verwendet, wenn die gespeicherte Prozedur ausgefhrt wird. Aus diesem Grund werden alle Clientsitzungseinstellungen fr diese SETOptionen whrend der Ausfhrung einer gespeicherten Prozedur ignoriert. Andere SET-Optionen, wie z. B. SET ARITHABORT, SET ANSI_WARNINGS und SET ANSI_PADDINGS, werden beim Erstellen oder ndern einer gespeicherten Prozedur nicht gespeichert. Um zu ermitteln, ob die ANSI SET-Optionen beim Erstellen einer gespeicherten Prozedur aktiviert waren, fragen Sie die OBJECTPROPERTYSystemfunktion ab. SET-Optionen sollten whrend der Ausfhrung von gespeicherten Prozeduren nicht gendert werden. Minimieren Sie die Verwendung von temporren gespeicherten Prozeduren, um Konflikte in den Systemtabellen von tempdb zu vermeiden, da sich diese negativ auf die Leistung auswirken knnen. Verwenden Sie sp_executesql anstelle der EXECUTE-Anweisung, um eine Zeichenfolge in einer gespeicherten Prozedur dynamisch auszufhren. Die Verwendung von sp_executesql ist effizienter, da diese Prozedur Ausfhrungsplne generiert, die von SQL Server hchstwahrscheinlich wiederverwendet werden knnen. SQL Server kompiliert die Transact-SQL-Anweisung oder -Anweisungen in der Zeichenfolge zu einem Ausfhrungsplan, der vom Ausfhrungsplan der gespeicherten Prozedur getrennt ist. Sie knnen sp_executesql fr das mehrfache Ausfhren einer Transact-SQL-Anweisung verwenden, wenn sich von Ausfhrung zu Ausfhrung lediglich die Parameterwerte ndern, die fr die Transact-SQL-Anweisung bereitgestellt werden. Lschen Sie nie Eintrge direkt aus der syscomments-Systemtabelle. Wenn Sie verhindern mchten, dass Benutzer den Text der gespeicherten Prozeduren lesen knnen, mssen Sie diese unter Verwendung der Option WITH ENCRYPTION erstellen. Wird die Option WITH ENCRYPTION nicht verwendet, knnen die Benutzer SQL Server Enterprise Manager verwenden oder die gespeicherte Systemprozedur sp_helptext ausfhren, um den Text der in der syscomments-Systemtabelle enthaltenen gespeicherten Prozeduren anzuzeigen.

16

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Ausfhren von gespeicherten Prozeduren


Beschreiben Sie, wie eine gespeicherte Prozedur ausgefhrt wird.

Thema

Selbststndiges Ausfhren einer gespeicherten Prozedur


EXEC OverdueOrders

Einstieg

Eine gespeicherte Prozedur kann selbststndig oder als Teil einer INSERT-Anweisung ausgefhrt werden.

Ausfhren einer gespeicherten Prozedur innerhalb einer INSERT-Anweisung


INSERT INTO Customers EXEC EmployeeCustomer

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Eine gespeicherte Prozedur kann allein oder als Teil einer INSERT-Anweisung ausgefhrt werden. Sie mssen fr die gespeicherte Prozedur ber die EXECUTE-Berechtigung verfgen.

Empfehlen Sie den Kursteilnehmern die Verwendung der EXECUTE-Anweisung fr einzelne gespeicherte Prozeduren, da auf diese Weise Fehler beim Ausfhren von gespeicherten Prozeduren in Batches vermieden werden knnen.

Selbststndiges Ausfhren einer gespeicherten Prozedur


Eine gespeicherte Prozedur kann durch Ausgeben einer EXECUTE-Anweisung zusammen mit dem Namen der gespeicherten Prozedur und den entsprechenden Parametern ausgefhrt werden.

Syntax

[ EXEC [ UTE ] ] { [ @return_status = ] { procedure_name [ ;number ] | @procedure_name_var } } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH RECOMPILE ] Mit der folgenden Anweisung wird eine gespeicherte Prozedur ausgefhrt, die alle berflligen Bestellungen aus der Northwind-Datenbank auflistet.
EXEC OverdueOrders

Beispiel 1

Gespeicherte Prozeduren, die innerhalb einer INSERTAnweisung ausgefhrt werden, mssen ein relationales Resultset zurckgeben. Beispielsweise kann keine COMPUTE BY-Anweisung verwendet werden.

Ausfhren einer gespeicherten Prozedur innerhalb einer INSERTAnweisung


Mit der INSERT-Anweisung kann eine lokale Tabelle mit einem Resultset aufgefllt werden, das von einer lokalen oder einer remote gespeicherten Prozedur zurckgegeben wird. SQL Server ldt die Tabelle mit den Daten, die von den SELECT-Anweisungen in der gespeicherten Prozedur zurckgegeben werden. Die Tabelle muss bereits vorhanden sein, und die Datentypen mssen bereinstimmen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

17

Beispiel 2

Mit der folgenden Anweisung wird die gespeicherte Prozedur EmployeeCustomer erstellt, die Mitarbeiter in die Customers-Tabelle der Northwind-Datenbank einfgt.
USE Northwind GO CREATE PROC dbo.EmployeeCustomer AS SELECT UPPER(SUBSTRING(LastName, 1, 4)+SUBSTRING(FirstName, 1,1)), 'Northwind Traders', RTRIM(FirstName)+' '+LastName, 'Employee', Address, City, Region, PostalCode, Country, ('(206) 555-1234'+' x'+Extension), NULL FROM Employees WHERE HireDate < GETDATE () GO

Die folgenden Anweisungen fhren die gespeicherte Prozedur EmployeeCustomer aus.


INSERT INTO Customers EXEC EmployeeCustomer

Die vor dem heutigen Datum eingestellten Mitarbeiter werden zur CustomersTabelle hinzugefgt. Ergebnis
(9 row(s) affected)

18

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

ndern und Lschen gespeicherter Prozeduren


Thema
Geben Sie eine Einfhrung in die ALTER PROCEDURE-Anweisung. ndern gespeicherter Prozeduren Einschlieen aller Optionen in ALTER PROCEDURE Geschachtelte gespeicherte Prozeduren sind nicht betroffen
USE Northwind USE Northwind GO GO ALTER PROC dbo.OverdueOrders ALTER PROC dbo.OverdueOrders AS AS SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID OrderID, CustomerID, EmployeeID FROM Orders FROM Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null WHERE RequiredDate < GETDATE() AND ShippedDate IS Null ORDER BY RequiredDate ORDER BY RequiredDate GO GO

Einstieg

Die nderung gespeicherter Prozeduren erfolgt hufig als Reaktion auf Benutzeranfragen oder aufgrund von nderungen der zugrunde liegenden Tabellendefinitionen.

Lschen gespeicherter Prozeduren Ausfhren der gespeicherten Prozedur sp_depends, um zu ermitteln, ob Objekte von der gespeicherten Prozedur abhngig sind

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die nderung gespeicherter Prozeduren erfolgt hufig als Reaktion auf Benutzeranfragen oder aufgrund von nderungen der zugrunde liegenden Tabellendefinitionen.

ndern gespeicherter Prozeduren


Wenn Sie eine vorhandene gespeicherte Prozedur ndern und die Berechtigungszuweisungen beibehalten mchten, verwenden Sie die ALTER PROCEDURE-Anweisung. Wenn eine gespeicherte Prozedur mit ALTER PROCEDURE gendert wird, wird die vorherige Definition der gespeicherten Prozedur von SQL Server ersetzt. Achtung Es wird ausdrcklich davon abgeraten, gespeicherte Systemprozeduren direkt zu ndern. Erstellen Sie stattdessen eine benutzerdefinierte gespeicherte Systemprozedur, indem Sie die Anweisungen einer vorhandenen gespeicherten Systemprozedur kopieren und dann Ihren Wnschen entsprechend ndern. Bercksichtigen Sie beim Verwenden der ALTER PROCEDURE-Anweisung die folgenden Aspekte: Wenn Sie eine gespeicherte Prozedur ndern mchten, die mit Optionen wie z. B. der WITH ENCRYPTION-Option erstellt wurde, mssen Sie die Option in die ALTER PROCEDURE-Anweisung einschlieen, um die von der Option bereitgestellte Funktionalitt beizubehalten. Mit ALTER PROCEDURE wird nur eine einzelne Prozedur gendert. Wenn die Prozedur weitere gespeicherte Prozeduren aufruft, sind die geschachtelten gespeicherten Prozeduren nicht betroffen. Die Berechtigung zum Ausfhren dieser Anweisung ist standardmig den Erstellern der ursprnglichen gespeicherten Prozedur sowie den Mitgliedern der Serverrolle sysadmin und den Mitgliedern der festen Datenbankrollen db_owner und db_ddladmin vorbehalten. Sie knnen die Berechtigung zum Ausfhren von ALTER PROCEDURE nicht erteilen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

19

Syntax

ALTER PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [FOR REPLICATION] AS sql_statement [ ...n ] Im folgenden Beispiel wird die gespeicherte Prozedur OverdueOrders gendert, um anstelle von allen Spalten nur bestimmte Spaltennamen aus der Orders-Tabelle auszuwhlen und das Resultset zu sortieren.
USE Northwind GO ALTER PROC dbo.OverdueOrders AS SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null ORDER BY RequiredDate GO

Beispiel

Die folgende Anweisung fhrt die gespeicherte Prozedur OverdueOrders aus.


EXEC OverdueOrders

Ergebnis

Wenn die gespeicherte Prozedur OverdueOrders ausgefhrt wird, wird ein Resultset basierend auf dem Datum des heutigen Tages zurckgegeben, das ungefhr dem folgenden gleicht.
RequiredDate OrderDate OrderID 11008 11019 11039 11040 11045 CustomerID ERNSH RANCH LINOD GREAL BOTTM EmployeeID 7 6 1 4 6 05/06/98 04/08/98 05/11/98 04/13/98 05/19/98 04/21/98 05/21/98 04/22/98 05/25/98 04/23/98 . . . (21 row(s) affected)

20

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Lschen gespeicherter Prozeduren


Verwenden Sie die DROP PROCEDURE-Anweisung, um benutzerdefinierte gespeicherte Prozeduren aus der aktuellen Datenbank zu entfernen. Fhren Sie vor dem Lschen einer gespeicherten Prozedur die gespeicherte Prozedur sp_depends aus, um zu ermitteln, ob Objekte von der Prozedur abhngig sind. Syntax Beispiel DROP PROCEDURE { procedure } [ ,...n ] In diesem Beispiel wird die gespeicherte Prozedur OverdueOrders gelscht.
USE Northwind GO DROP PROC dbo.OverdueOrders GO

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

21

bungseinheit A: Erstellen gespeicherter Prozeduren


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen Sie gespeicherte Prozeduren und zeigen Informationen zu den Prozeduren an.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer gespeicherten Prozedur mit Hilfe von SQL Query Analyzer. Anzeigen von Informationen zu den von Ihnen erstellten gespeicherten Prozeduren.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L09 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L09\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore09A.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

22

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 15 Minuten

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

23

bung 1 Schreiben und Ausfhren einer gespeicherten Prozedur


In dieser bung erstellen Sie eine gespeicherte Prozedur, die die fnf teuersten Artikel nach dem Preis geordnet auflistet. So erstellen Sie eine gespeicherte Prozedur mit Hilfe von SQL Query Analyzer In diesem Verfahren erstellen Sie eine gespeicherte Prozedur, die die fnf teuersten Artikel auflistet. C:\Moc\2328A\Labfiles\L09\Answers\FiveMostExpensiveProducts.sql enthlt ein vollstndiges Skript fr dieses Verfahren. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. berprfen Sie, ob Sie die ClassNorthwind-Datenbank verwenden. 4. Schreiben Sie eine Abfrage, die auf der Products-Tabelle ausgefhrt wird und die nur den Artikelnamen und den Stckpreis auflistet. Begrenzen Sie die zurckgegebenen Zeilen auf die fnf teuersten Artikel, und ordnen Sie das Resultset nach dem Stckpreis. 5. Testen Sie die Abfrage, um sicherzustellen, dass sie das erwartete Resultset zurckgibt. 6. ndern Sie die Abfrage, um die gespeicherte Prozedur FiveMostExpensiveProducts zu erstellen. 7. Speichern Sie das Skript unter C:\Moc\2328A\Labfiles\L09\FiveMostExpensiveProducts.sql. 8. Fhren Sie die gespeicherte Prozedur aus, um zu berprfen, ob sie wie erwartet funktioniert. Welches sind die fnf teuersten Artikel? Cte de Blaye, Thringer Rostbratwurst, Mishi Kobe Niku, Sir Rodney's Marmalade und Carnarvon Tigers. ____________________________________________________________ ____________________________________________________________

24

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

bung 2 Anzeigen von Informationen zu gespeicherten Prozeduren


In dieser bung fhren Sie gespeicherte Systemprozeduren aus und verwenden SQL Server Enterprise Manager und SQL Query Analyzer, um Informationen zu den von Ihnen erstellten gespeicherten Prozeduren anzuzeigen. So zeigen Sie Definitionen gespeicherter Prozeduren an In diesem Verfahren verwenden Sie SQL Server Enterprise Manager und SQL Query Analyzer, um Definitionen gespeicherter Prozeduren anzuzeigen. 1. ffnen Sie SQL Server Enterprise Manager. 2. Erweitern Sie Microsoft SQL Servers, erweitern Sie SQL Server-Gruppe, erweitern Sie Ihren Server, erweitern Sie Datenbanken, erweitern Sie ClassNorthwind, und klicken Sie dann auf Gespeicherte Prozeduren. 3. Klicken Sie im Detailbereich mit der rechten Maustaste auf FiveMostExpensiveProducts, und klicken Sie dann auf Eigenschaften. 4. Sehen Sie sich die Definition der gespeicherten Prozedur an. 5. ffnen Sie SQL Query Analyzer. 6. berprfen Sie, ob Sie die ClassNorthwind-Datenbank verwenden. 7. Fhren Sie im Abfragefenster die folgende gespeicherte Systemprozedur aus.
sp_helptext FiveMostExpensiveProducts

8. Sehen Sie sich die Definition der gespeicherten Prozedur an. So zeigen Sie Metadateninformationen zu gespeicherten Prozeduren an In diesem Verfahren verwenden Sie die Funktionen OBJECT_ID und OBJECTPROPERTY, um Metadaten zu gespeicherten Prozeduren anzuzeigen. 1. Ermitteln Sie mit Hilfe von SQL Query Analyzer die Objekt-ID der gespeicherten Prozedur FiveMostExpensiveProducts, indem Sie die folgende Anweisung ausfhren:
SELECT OBJECT_ID('FiveMostExpensiveProducts')

Notieren Sie die Objekt-ID. ____________________________________________________________ 2. Fhren Sie die folgende Anweisung aus, um zu ermitteln, ob die Verbindungseinstellung fr die Option ANSI_NULLS beim Erstellen der gespeicherten Prozedur FiveMostExpensiveProducts aktiviert war: Ersetzen Sie x durch die Objekt-ID der gespeicherten Prozedur.
SELECT OBJECTPROPERTY(x, 'ExecIsAnsiNullsOn')

Wie lautet das Ergebnis? 1 (True). ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

25

3. Fhren Sie die folgende Anweisung aus, um zu ermitteln, ob die Verbindungseinstellung fr ANSI quoted identifier beim Erstellen der gespeicherten Prozedur FiveMostExpensiveProducts aktiviert war: Ersetzen Sie x durch die Objekt-ID der gespeicherten Prozedur.
SELECT OBJECTPROPERTY(x, 'ExecIsQuotedIdentOn')

Wie lautet das Ergebnis? 0 (False). ____________________________________________________________ ____________________________________________________________

26

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Verwenden von Parametern in gespeicherten Prozeduren


Thema
Geben Sie eine bersicht ber die Themen dieses Abschnitts.

Verwenden von Eingabeparametern Ausfhren gespeicherter Prozeduren mit Hilfe von Eingabeparametern Zurckgeben von Werten mit Hilfe von Ausgabeparametern Explizites erneutes Kompilieren gespeicherter Prozeduren

Einstieg

In diesem Abschnitt werden diese Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Parameter erweitern die Funktionalitt von gespeicherten Prozeduren. Mit Parametern knnen Sie Informationen an gespeicherte Prozeduren bergeben oder von ihnen bernehmen. Sie bieten Ihnen die Mglichkeit, eine Datenbank mehrfach mit Hilfe derselben gespeicherten Prozedur zu durchsuchen. Beispielsweise knnen Sie einen Parameter zu einer gespeicherten Prozedur hinzufgen, mit der die Employee-Tabelle nach Mitarbeitern durchsucht wird, deren Einstellungsdatum mit dem von Ihnen angegebenen Datum bereinstimmt. Die gespeicherte Prozedur kann nun jedes Mal mit einem anderen Einstellungsdatum ausgefhrt werden. SQL Server untersttzt zwei Parametertypen: Eingabeparameter und Ausgabeparameter.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

27

Verwenden von Eingabeparametern


Geben Sie eine Einfhrung in Eingabeparameter.

Thema

Zunchst berprfen aller eingehenden Parameterwerte Festlegen geeigneter Standardwerte und Einschlieen von berprfungen auf das Vorhandensein von NULL-Werten
CREATE PROCEDURE dbo.[Year to Year Sales] CREATE PROCEDURE dbo.[Year to Year Sales] @BeginningDate DateTime, @EndingDate DateTime @BeginningDate DateTime, @EndingDate DateTime AS AS IF @BeginningDate IS NULL OR @EndingDate IS NULL IF @BeginningDate IS NULL OR @EndingDate IS NULL BEGIN BEGIN RAISERROR('NULL-Werte sind nicht erlaubt', 14, 1) RAISERROR('NULL-Werte sind nicht erlaubt', 14, 1) RETURN RETURN END END SELECT O.ShippedDate, SELECT O.ShippedDate, O.OrderID, O.OrderID, OS.Subtotal, OS.Subtotal, DATENAME(yy,ShippedDate) AS Year DATENAME(yy,ShippedDate) AS Year FROM ORDERS O INNER JOIN [Order Subtotals] OS FROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderID ON O.OrderID = OS.OrderID WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate GO GO

Einstieg

Eingabeparameter ermglichen es Ihnen, Informationen an eine gespeicherte Prozedur zu bergeben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eingabeparameter ermglichen es Ihnen, Informationen an eine gespeicherte Prozedur zu bergeben. Wenn Sie eine gespeicherte Prozedur definieren mchten, die Eingabeparameter annimmt, mssen Sie in der CREATE PROCEDURE-Anweisung eine oder mehrere Variablen als Parameter deklarieren. Teilsyntax @parameter data_type [= default] Bercksichtigen Sie beim Angeben von Parametern die folgenden Aspekte und Richtlinien: Alle eingehenden Parameterwerte sollten am Anfang einer gespeicherten Prozedur berprft werden, um fehlende und ungltige Werte mglichst frhzeitig aufzuspren. Legen Sie geeignete Standardwerte fr einen Parameter fest. Nach der Definition eines Standardwertes knnen Benutzer die gespeicherte Prozedur ausfhren, ohne einen Wert fr diesen Parameter angeben zu mssen. Anmerkung Bei Parameterstandardwerten muss es sich um Konstanten oder um NULL-Werte handeln. Wenn Sie NULL als Standardwert fr einen Parameter festlegen, mssen Sie =NULL verwenden. Die Verwendung von IS NULL ist nicht mglich, da die Syntax die NULL-Codierung nach ANSI nicht untersttzt. Die maximale Anzahl der Parameter in einer gespeicherten Prozedur betrgt 1.024.

28

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Die maximale Anzahl lokaler Variablen in einer gespeicherten Prozedur ist nur durch den verfgbaren Arbeitsspeicher begrenzt. Parameter werden lokal in einer gespeicherten Prozedur verwendet. Die gleichen Parameternamen knnen auch in anderen gespeicherten Prozeduren verwendet werden. Die Parameterdaten werden in der syscolumns-Systemtabelle gespeichert. Beispiel Im folgenden Beispiel wird die gespeicherte Prozedur Year to Year Sales erstellt, die alle Umstze zwischen den angegebenen Daten zurckgibt.
CREATE PROCEDURE dbo.[Year to Year Sales] @BeginningDate DateTime, @EndingDate DateTime AS IF @BeginningDate IS NULL OR @EndingDate IS NULL BEGIN RAISERROR('NULL-Werte sind nicht erlaubt', 14, 1) RETURN END SELECT O.ShippedDate, O.OrderID, OS.Subtotal, DATENAME(yy,ShippedDate) AS Year FROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderID WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate GO

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

29

Ausfhren gespeicherter Prozeduren mit Hilfe von Eingabeparametern


Thema

bergeben von Werten durch Parameternamen


EXEC AddCustomer EXEC AddCustomer @CustomerID = 'ALFKI', @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @Address = 'Obere Str. 57', @City = 'Berlin', @City = 'Berlin', @PostalCode = '12209', @PostalCode = '12209', @Country = 'Germany', @Country = 'Germany', @Phone = '030-0074321' @Phone = '030-0074321'

Zeigen Sie, wie gespeicherte Prozeduren ausgefhrt werden, indem die EXECUTE-Anweisung mit Parametern verwendet wird.

Einstieg

Die bergabe von Parameterwerten an eine gespeicherte Prozedur kann durch Verweis oder durch die Position erfolgen.

bergeben von Werten durch Position


EXEC AddCustomer 'ALFKI2', 'Alfreds EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321' NULL, '12209', 'Germany', '030-0074321'

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie einen Parameterwert festlegen mchten, knnen Sie den Wert entweder durch den Parameternamen oder durch die Position an die gespeicherte Prozedur bergeben. Beim Angeben von Werten sollten die unterschiedlichen Formate nicht kombiniert werden. Methodischer Hinweis

bergeben von Werten durch Parameternamen


Das Angeben eines Parameters in einer EXECUTE-Anweisung im Format @parameter = value wird als bergeben durch Parameternamen bezeichnet. Beim bergeben von Werten durch Parameternamen knnen die Parameterwerte in einer beliebigen Reihenfolge angegeben werden. Darber hinaus knnen Sie Parameter auslassen, die NULL-Werte zulassen oder fr die ein Standardwert festgelegt wurde. Der Standardwert eines Parameters, falls ein solcher Wert fr den Parameter in der gespeicherten Prozedur definiert ist, wird in den folgenden Situationen verwendet: Beim Ausfhren der gespeicherten Prozedur wurde kein Wert fr den Parameter angegeben. Das DEFAULT-Schlsselwort ist als Wert fr den Parameter angegeben.

Empfehlen Sie aus Grnden der Lesbarkeit das bergeben von Werten durch den Parameternamen.

Syntax

[ EXEC [ UTE ] ] { [ @return_status = ] { procedure_name [ ;number ] | @procedure_name_var } } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH RECOMPILE ]

30

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Teilbeispiel 1

Im folgenden Teilbeispiel wird die gespeicherte Prozedur AddCustomer erstellt, die einen neuen Kunden zur Northwind-Datenbank hinzufgt. Beachten Sie, dass fr alle Variablen mit Ausnahme von CustomerID und CompanyName angegeben wird, dass sie NULL-Werte zulassen mssen.
USE Northwind GO CREATE PROCEDURE dbo.AddCustomer @CustomerID nchar (5), @CompanyName nvarchar (40), @ContactName nvarchar (30) = @ContactTitle nvarchar (30) = @Address nvarchar (60) = @City nvarchar (15) = @Region nvarchar (15) = @PostalCode nvarchar (10) = @Country nvarchar (15) = @Phone nvarchar (24) = @Fax nvarchar (24) = AS . . .

NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL

Teilbeispiel 2

Im folgenden Beispiel werden Werte durch den Parameternamen an die gespeicherte Prozedur AddCustomer bergeben. Beachten Sie, dass sich die Reihenfolge der Werte von der Reihenfolge in der CREATE PROCEDUREAnweisung unterscheidet. Beachten Sie weiterhin, dass die Werte fr die Parameter @Region und @Fax nicht angegeben werden. Wenn die Spalten Region und Fax in der Tabelle NULL-Werte zulassen, wird die gespeicherte Prozedur AddCustomer erfolgreich ausgefhrt. Wenn die Spalten Region und Fax jedoch keine NULL-Werte zulassen, mssen Sie einen Wert an den jeweiligen Parameter bergeben, und zwar unabhngig davon, ob die Definition des Parameters das Zulassen von NULL-Werten vorsieht.
EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321' . . .

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

31

bergeben von Werten durch Position


Werden nur Werte bergeben (ohne Verweis auf die Parameter, an die sie bergeben werden), wird dies als bergeben durch Position bezeichnet. Wenn Sie nur einen Wert angeben, mssen die Parameterwerte in der Reihenfolge aufgefhrt werden, in der sie in der CREATE PROCEDURE-Anweisung definiert wurden. Bei der bergabe von Werten durch Position knnen Sie Parameter auslassen, fr die Standardwerte vorhanden sind. Sie drfen die Reihenfolge der Parameter jedoch nicht unterbrechen. Wenn eine gespeicherte Prozedur beispielsweise ber fnf Parameter verfgt, knnen Sie den vierten und fnften Parameter auslassen. Es ist jedoch nicht mglich, den vierten Parameter auszulassen und den fnften anzugeben. Teilbeispiel 3 Im folgenden Beispiel werden Werte durch die Position an die gespeicherte Prozedur AddCustomer bergeben. Beachten Sie, dass fr die Parameter @Region und @Fax keine Werte vorhanden sind. Es wird jedoch nur der @Region-Parameter mit dem Wert NULL bereitgestellt. Der @Fax-Parameter wird ausgelassen, da es sich um den letzten Parameter handelt.
EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'

32

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Zurckgeben von Werten mit Hilfe von Ausgabeparametern


Zeigen Sie, wie mit Hilfe des OUTPUT-Schlsselwortes ein Wert erzeugt werden kann.

Thema

Erstellen der Erstellen der gespeicherten gespeicherten Prozedur Prozedur

Einstieg

Eine gespeicherte Prozedur kann mehrere Werte zurckgeben. Jeder Wert muss sowohl in der gespeicherten Prozedur als auch in den aufrufenden Anweisungen mit Hilfe des OUTPUTSchlsselwortes als Variable definiert werden.

Ausfhren der Ausfhren der gespeicherten gespeicherten Prozedur Prozedur

CREATE PROCEDURE dbo.MathTutor CREATE PROCEDURE dbo.MathTutor @m1 smallint, @m1 smallint, @m2 smallint, @m2 smallint, @result smallint OUTPUT @result smallint OUTPUT AS AS SET @result = @m1* @m2 SET @result = @m1* @m2 GO GO DECLARE @answer smallint DECLARE @answer smallint EXECUTE MathTutor 5,6, @answer OUTPUT EXECUTE MathTutor 5,6, @answer OUTPUT SELECT 'Das Ergebnis ist: ', @answer SELECT 'Das Ergebnis ist: ', @answer Das Ergebnis ist: 30 Das Ergebnis ist: 30

Ergebnisse der Ergebnisse der gespeicherten gespeicherten Prozedur Prozedur

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Mit Hilfe von Ausgabeparametern (mit dem OUTPUT-Schlsselwort gekennzeichnete Variablen) knnen gespeicherte Prozeduren Informationen an die aufrufende gespeicherte Prozedur oder an den Client zurckgeben. Durch das Verwenden von Ausgabeparametern knnen alle nderungen an dem Parameter, die sich aus der Ausfhrung der gespeicherten Prozedur ergeben, auch nach Abschluss der Ausfhrung der gespeicherten Prozedur beibehalten werden. Um einen Ausgabeparameter zu verwenden, mssen Sie das OUTPUTSchlsselwort sowohl in der CREATE PROCEDURE-Anweisung als auch in der EXECUTE-Anweisung angeben. Wird das OUTPUT-Schlsselwort beim Ausfhren der gespeicherten Prozedur nicht angegeben, wird die gespeicherte Prozedur zwar weiterhin ausgefhrt, es wird jedoch kein Wert zurckgegeben. Ausgabeparameter besitzen folgende Merkmale: Die aufrufende Anweisung muss einen Variablennamen fr den Empfang des Rckgabewertes enthalten. Es knnen keine Konstanten bergeben werden. Die Variable kann nachfolgend in weiteren Transact-SQL-Anweisungen des Batches oder der aufrufenden gespeicherten Prozedur verwendet werden. Der Parameter kann einen beliebigen Datentyp mit Ausnahme von text oder image aufweisen. Es kann sich um Cursorvariablen handeln.

Geben Sie eine detaillierte Erluterung des Beispiels auf der Folie, und zeigen Sie, wie die gespeicherte Prozedur MathTutor erstellt und verwendet wird.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

33

Beispiel 1

In diesem Beispiel wird die gespeicherte Prozedur MathTutor erstellt, die das Produkt aus zwei Zahlen berechnet. Im Beispiel wird die SET-Anweisung verwendet. Sie knnen jedoch auch die SELECT-Anweisung verwenden, um eine Zeichenfolge dynamisch zu verketten. Fr eine SET-Anweisung mssen Sie eine Variable deklarieren, damit die Zeichenfolge Das Ergebnis ist: ausgegeben wird.
CREATE PROCEDURE dbo.MathTutor @m1 smallint, @m2 smallint, @result smallint OUTPUT AS SET @result = @m1* @m2 GO

Dieser Batch ruft die gespeicherte Prozedur MathTutor auf und bergibt die Werte 5 und 6. Diese Werte werden zu Variablen, die in die SET-Anweisung eingegeben werden.
DECLARE @answer smallint EXECUTE MathTutor 5,6, @answer OUTPUT SELECT 'Das Ergebnis ist: ', @answer

Ergebnis

Der @result-Parameter wird durch das OUTPUT-Schlsselwort gekennzeichnet. SQL Server gibt den Inhalt der @result-Variable aus, wenn Sie die gespeicherte Prozedur MathTutor ausfhren. Die Ergebnisvariable ist als Produkt der beiden Werte 5 und 6 definiert.
Das Ergebnis ist: 30

34

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Explizites erneutes Kompilieren gespeicherter Prozeduren


Erlutern Sie, wann gespeicherte Prozeduren erneut kompiliert und welche Optionen dafr verwendet werden.

Thema

Erneutes Kompilieren in folgenden Situationen Die gespeicherte Prozedur gibt stark voneinander abweichende Resultsets zurck Zu einer zugrunde liegenden Tabelle wird ein neuer Index hinzugefgt Der bergebene Parameterwert ist untypisch Erneutes Kompilieren mit Hilfe von CREATE PROCEDURE...[WITH RECOMPILE] EXECUTE...[WITH RECOMPILE] sp_recompile

Einstieg

Gespeicherte Prozeduren knnen explizit neu kompiliert werden. Dies sollte jedoch nicht die Regel sein.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Gespeicherte Prozeduren knnen explizit neu kompiliert werden. Dies sollte jedoch nicht die Regel sein und nur in folgenden Situationen erfolgen: Parameterwerte werden an eine gespeicherte Prozedur bergeben, die stark voneinander abweichende Resultsets zurckgibt. Zu einer zugrunde liegenden Tabelle wird ein neuer Index hinzugefgt, der mglicherweise von einer gespeicherten Prozedur vorteilhaft genutzt werden kann. Der bergebene Parameterwert ist untypisch. SQL Server stellt drei Methoden fr das explizite erneute Kompilieren einer gespeicherten Prozedur bereit.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

35

CREATE PROCEDURE[WITH RECOMPILE]


Die CREATE PROCEDURE...[WITH RECOMPILE]-Anweisung gibt an, dass SQL Server fr diese gespeicherte Prozedur keinen Plan zwischenspeichert. Stattdessen wird die gespeicherte Prozedur bei jedem Ausfhren dieser Anweisung erneut kompiliert. Beispiel 1 Im folgenden Beispiel wird eine gespeicherte Prozedur mit der Bezeichnung OrderCount erstellt, die bei jedem Ausfhren der Anweisung erneut kompiliert wird.
USE Northwind GO CREATE PROC dbo.OrderCount @CustomerID nchar (10) WITH RECOMPILE AS SELECT count(*) FROM [Orders Qry] WHERE CustomerID = @CustomerID GO

EXECUTE[WITH RECOMPILE]
Wenn WITH RECOMPILE angegeben wird, erstellt die EXECUTE...[WITH RECOMPILE]-Anweisung einen neuen Ausfhrungsplan, sobald die Prozedur ausgefhrt wird. Der neue Ausfhrungsplan wird nicht im Cache gespeichert. Verwenden Sie diese Option, wenn der bergebene Parameter stark von den normalerweise an die gespeicherte Prozedur bergebenen Parametern abweicht. Da dieser optimierte Plan eher die Ausnahme als die Regel darstellt, sollten Sie nach Abschluss der Ausfhrung die gespeicherte Prozedur erneut ausfhren und hierfr einen Parameter verwenden, der blicherweise bergeben wird. Diese Option ist auch hilfreich, wenn seit dem letzten Kompilieren der gespeicherten Prozedur eine umfangreiche Datennderung stattgefunden hat. Beispiel 2 In diesem Beispiel wird die gespeicherte Systemprozedur sp_help neu kompiliert, wenn sie ausgefhrt wird.
EXEC sp_help WITH RECOMPILE

sp_recompile
Die gespeicherte Systemprozedur sp_recompile kompiliert die angegebene gespeicherte Prozedur oder den Trigger erneut, wenn sie bzw. er das nchste Mal ausgefhrt wird. Wenn der @objname-Parameter eine Tabelle oder Sicht angibt, werden alle gespeicherten Prozeduren, die das genannte Objekt verwenden, bei ihrer nchsten Ausfhrung erneut kompiliert. Verwenden Sie die gespeicherte Systemprozedur sp_recompile mit der Option Tabellenname, wenn Sie einen neuen Index zu einer zugrunde liegenden Tabelle hinzugefgt haben, auf die die gespeicherte Prozedur verweist, und Sie annehmen, dass sich der neue Index positiv auf die Leistung der gespeicherten Prozedur auswirkt.

36

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Beispiel 3

In diesem Beispiel werden alle gespeicherten Prozeduren oder Trigger erneut kompiliert, die auf die Customers-Tabelle in der Northwind-Datenbank verweisen.
EXEC sp_recompile Customers

Anmerkung Mit Hilfe von DBCC FREEPROCCACHE knnen Sie alle Ausfhrungsplne fr gespeicherte Prozeduren aus dem Cache lschen.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

37

Ausfhren erweiterter gespeicherter Prozeduren


Thema
Beschreiben Sie die Features von erweiterten gespeicherten Prozeduren.

Werden mit Hilfe der Open Data Services-API programmiert Knnen Features enthalten, die mit C und C++ erstellt wurden Knnen mehrere Funktionen enthalten Knnen von einem Client oder von SQL Server aus aufgerufen werden Knnen nur zur master-Datenbank hinzugefgt werden
EXEC master..xp_cmdshell 'dir c:\'

Einstieg

Fr erweiterte gespeicherte Prozeduren gilt Folgendes...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Erweiterte gespeicherte Prozeduren sind Funktionen innerhalb einer DLL, die die Funktionalitt von SQL Server erweitern. Sie werden genauso wie gespeicherte Prozeduren ausgefhrt und untersttzen Eingabeparameter, Rckgabestatuscodes und Ausgabeparameter. Beispiel 1 In diesem Beispiel wird die erweiterte gespeicherte Prozedur xp_cmdshell ausgefhrt, die eine Liste von Dateien und Unterverzeichnissen anzeigt, indem sie den Betriebssystembefehl dir ausfhrt.
EXEC master..xp_cmdshell 'dir c:\ '

Fr erweiterte gespeicherte Prozeduren gilt Folgendes: Sie werden mit Hilfe der Open Data Services-API (Application Programming Interface, Schnittstelle fr Anwendungsprogrammierung) programmiert. Sie bieten Ihnen die Mglichkeit, eigene externe Routinen in Programmiersprachen wie z. B. Microsoft Visual C++ und Visual C zu erstellen. Sie knnen mehrere Funktionen enthalten. Sie knnen von einem Client oder von SQL Server aus aufgerufen werden. Sie knnen nur zur master-Datenbank hinzugefgt werden. Anmerkung Sie knnen eine erweiterte gespeicherte Prozedur nur aus der master-Datenbank heraus oder durch explizites Angeben des Speicherortes master ausfhren. Sie haben jedoch auch die Mglichkeit, eine benutzerdefinierte gespeicherte Systemprozedur zu erstellen, die die erweiterte gespeicherte Prozedur aufruft. Auf diese Weise knnen Sie die erweiterte gespeicherte Prozedur aus jeder beliebigen Datenbank heraus aufrufen.

38

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Methodischer Hinweis

Fhren Sie vor, wie die erweiterte gespeicherte Prozedur xp_cmdshell ausgefhrt wird, um Dateien anzuzeigen, die in einem der Verzeichnisse von SQL Server aufgefhrt werden.

In der folgenden Tabelle sind einige hufig verwendete erweiterte gespeicherte Prozeduren aufgefhrt.
Erweiterte gespeicherte Prozedur xp_cmdshell

Beschreibung Diese Prozedur fhrt eine bestimmte Befehlszeichenfolge als Betriebssystembefehl aus und gibt eine aus Textzeilen bestehende Ausgabe zurck. Diese Prozedur protokolliert eine benutzerdefinierte Meldung in einer SQL Server-Protokolldatei oder in der Ereignisanzeige von Windows 2000.

xp_logevent

Beispiel 2

In diesem Beispiel wird die gespeicherte Systemprozedur sp_helptext ausgefhrt, um den Namen der DLL anzuzeigen, die die erweiterte gespeicherte Prozedur xp_cmdshell enthlt.
EXEC master..sp_helptext xp_cmdshell

Ergebnis

Das Ergebnis zeigt die DLL an, die die erweiterte gespeicherte Prozedur xp_cmdshell enthlt.
xplog70.dll

Sie knnen auch eigene erweiterte gespeicherte Prozeduren erstellen. Im Allgemeinen werden erweiterte gespeicherte Prozeduren aufgerufen, um mit anderen Anwendungen oder dem Betriebssystem zu kommunizieren. Beispielsweise bietet Ihnen die Datei Sqlmap70.dll die Mglichkeit, mit Hilfe der erweiterten gespeicherten Prozedur xp_sendmail E-Mail-Nachrichten von SQL Server aus zu senden. Wenn Sie beim Ausfhren von SQL Server Setup die Option Entwicklungstools auswhlen, installiert SQL Server Bespiele fr erweiterte gespeicherte Prozeduren in Form von komprimierten, selbstextrahierenden ausfhrbaren Dateien im Ordner C:\Programme\Microsoft SQL Server\80\Tools\DevTools\Samples\ODS.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

39

Behandeln von Fehlermeldungen


Erlutern Sie die verschiedenen Mglichkeiten fr das Erstellen von Fehlermeldungen in gespeicherten Prozeduren.

Thema

Die RETURN-Anweisung beendet eine Abfrage oder eine gespeicherte Prozedur ohne Bedingung sp_addmessage erstellt benutzerdefinierte Fehlermeldungen @@error enthlt die Fehlernummer fr die letzte ausgefhrte Anweisung RAISERROR-Anweisung Gibt benutzerdefinierte Fehlermeldungen oder Systemfehlermeldungen zurck Legt ein Systemflag fest, um einen Fehler aufzuzeichnen

Einstieg

Um die Effektivitt gespeicherter Prozeduren zu verbessern, sollten Sie Fehlermeldungen hinzufgen, die die Benutzer ber den Transaktionsstatus informieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Auf den nchsten Seiten finden Sie eine Darstellung der Funktionsweise von Fehlermeldungen.

Um die Effektivitt gespeicherter Prozeduren zu verbessern, sollten Sie Fehlermeldungen hinzufgen, die die Benutzer ber den Transaktionsstatus (Erfolg oder Fehlschlag) informieren. Sie sollten die berprfung von Aufgaben- und Geschftslogik sowie die Fehlerberprfung vor dem Transaktionsstart ausfhren und mglichst kurze Transaktionen verwenden. Mit Hilfe bestimmter Programmierungsstrategien, wie z. B. der berprfung auf das Vorhandensein bestimmter Daten, knnen Sie Fehler erkennen. Wenn ein Fehler auftritt, stellen Sie dem Client so viele Informationen wie mglich zur Verfgung. In der Fehlerbehandlungslogik knnen Rckgabecodes, SQL Server-Fehler und benutzerdefinierte Fehlermeldungen berprft werden.

RETURN-Anweisung
Die RETURN-Anweisung beendet eine Abfrage oder eine gespeicherte Prozedur ohne Bedingung. Sie kann auch einen ganzzahligen Statuswert (Rckgabecode) zurckgeben. Durch den Rckgabewert 0 wird die erfolgreiche Ausfhrung angezeigt. Zurzeit werden Rckgabewerte zwischen 0 und -14 verwendet, Rckgabewerte zwischen -15 und -99 sind fr die zuknftige Verwendung reserviert. Wenn kein benutzerdefinierter Rckgabewert angegeben wird, wird der SQL ServerWert verwendet. Benutzerdefinierte Rckgabewerte haben stets Vorrang vor den von SQL Server bereitgestellten Werten.

40

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Beispiel 1

In diesem Beispiel wird die gespeicherte Prozedur GetOrders erstellt, die Informationen aus den Tabellen Orders und Customers abruft, indem die Orders Qry-Sicht abgefragt wird. Die RETURN-Anweisung in der gespeicherten Prozedur GetOrders gibt die Gesamtzahl der Zeilen aus der SELECT-Anweisung an eine andere gespeicherte Prozedur zurck. Sie knnen die gespeicherte Prozedur GetOrders auch mit einer anderen gespeicherten Prozedur schachteln.
USE Northwind GO CREATE PROCEDURE dbo.GetOrders @CustomerID nchar (10) AS SELECT OrderID, CustomerID, EmployeeID FROM [Orders Qry] WHERE CustomerID = @CustomerID RETURN (@@ROWCOUNT) GO

sp_addmessage
Diese gespeicherte Prozedur bietet Entwicklern die Mglichkeit, benutzerdefinierte Fehlermeldungen zu erstellen. Vom System erstellte und benutzerdefinierte Fehlermeldungen werden von SQL Server gleich behandelt. Alle Meldungen werden in der sysmessages-Tabelle der master-Datenbank gespeichert. Diese Fehlermeldungen knnen auch automatisch in das Anwendungsprotokoll von Windows 2000 geschrieben werden. Beispiel 2 In diesem Beispiel wird eine benutzerdefinierte Fehlermeldung erstellt, die bei Auftreten des Fehlers in das Anwendungsprotokoll von Windows 2000 geschrieben wird.
EXEC sp_addmessage @msgnum = 50010, @severity = 10, @msgtext = 'Kunde (Customer) kann nicht gelscht werden.', @lang = 'us_english' @with_log = 'true'

@@error
Diese Systemfunktion enthlt die Fehlernummer fr die zuletzt ausgefhrte Transact-SQL-Anweisung. Sie wird bei jedem Ausfhren einer Anweisung gelscht und neu festgelegt. Beim erfolgreichen Ausfhren der Anweisung wird der Wert 0 zurckgegeben. Mit Hilfe der @@error-Systemfunktion kann eine bestimmte Fehlernummer erkannt oder eine gespeicherte Prozedur ohne Bedingung beendet werden. Beispiel 3 In diesem Beispiel wird die gespeicherte Prozedur AddSupplierProduct in der Northwind-Datenbank erstellt. Diese gespeicherte Prozedur verwendet die @@error-Systemfunktion, um zu ermitteln, ob beim Ausfhren der einzelnen INSERT-Anweisungen ein Fehler auftritt. Wenn der Fehler auftritt, wird fr die Transaktion ein Rollback ausgefhrt.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren


USE Northwind GO CREATE PROCEDURE dbo.AddSupplierProduct @CompanyName nvarchar (40) = NULL, @ContactName nvarchar (40) = NULL, @ContactTitle nvarchar (40)= NULL, @Address nvarchar (60) = NULL, @City nvarchar (15) = NULL, @Region nvarchar (40) = NULL, @PostalCode nvarchar (10) = NULL, @Country nvarchar (15) = NULL, @Phone nvarchar (24) = NULL, @Fax nvarchar (24) = NULL, @HomePage ntext = NULL, @ProductName nvarchar (40) = NULL, @CategoryID int = NULL, @QuantityPerUnit nvarchar (20) = NULL, @UnitPrice money = NULL, @UnitsInStock smallint = NULL, @UnitsOnOrder smallint = NULL, @ReorderLevel smallint = NULL, @Discontinued bit = NULL AS BEGIN TRANSACTION INSERT Suppliers ( CompanyName, ContactName, Address, City, Region, PostalCode, Country, Phone) VALUES ( @CompanyName, @ContactName, @Address, @City, @Region, @PostalCode, @Country, @Phone) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END DECLARE @InsertSupplierID int SELECT @InsertSupplierID=@@identity INSERT Products ( ProductName, SupplierID, CategoryID, QuantityPerUnit, Discontinued) VALUES (

41

42

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren


@ProductName, @InsertSupplierID, @CategoryID, @QuantityPerUnit, @Discontinued) IF @@error <> 0 BEGIN ROLLBACK TRAN RETURN END COMMIT TRANSACTION

RAISERROR-Anweisung
Die RAISERROR-Anweisung gibt eine benutzerdefinierte Fehlermeldung zurck und legt ein Systemflag fest, um das Auftreten eines Fehlers aufzuzeichnen. Wenn Sie die RAISERROR-Anweisung verwenden, mssen Sie einen Fehlerschweregrad und einen Meldungsstatus angeben. Die RAISERROR-Anweisung ermglicht der Anwendung, einen Eintrag aus der master..sysmessages-Systemtabelle abzurufen oder mit von Benutzern angegebenen Informationen dynamisch eine Meldung ber Status und Schweregrad zu erstellen. Die RAISERROR-Anweisung kann Fehlermeldungen in das SQL Server-Fehlerprotokoll und das Windows 2000-Anwendungsprotokoll schreiben. Beispiel 4 In diesem Beispiel wird eine benutzerdefinierte Fehlermeldung ausgelst, die dann in das Windows 2000-Anwendungsprotokoll geschrieben wird.
RAISERROR(50010, 16, 1) WITH LOG

Methodischer Hinweis

Fr die RAISERRORAnweisung mssen der Fehlerschweregrad und der Meldungsstatus angegeben werden.

Anmerkungen Die PRINT-Anweisung gibt eine benutzerdefinierte Meldung an den Meldungshandler des Clients zurck. Im Gegensatz zur RAISERRORAnweisung speichert die PRINT-Anweisung die Fehlernummer jedoch nicht in der @@error-Systemfunktion.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

43

Vorfhrung: Behandeln von Fehlermeldungen


Thema
Fhren Sie vor, wie Fehlermeldungen behandelt werden.

Einstieg

In dieser Vorfhrung wird die gespeicherte Prozedur analysiert, die Sie verwenden wrden, um ein Element aus der Northwind-Datenbank zu entfernen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Gehen Sie dieses Skript durch, whrend der Kursleiter auf die darin eingeschlossenen Fehlerbehandlungstechniken hinweist.
/* UpdateCustomerPhone Aktualisiert die Telefonnummer eines Kunden Die Fehlerbehandlung stellt sicher, dass eine gltige Kundenidentifikationsnummer angegeben wird */ /* Die folgende benutzerdefinierte Meldung untersttzt die gespeicherte Prozedur UpdateCustomerPhone */ EXEC sp_addmessage 50010, 16, 'Kunden-ID (CustomerID) nicht gefunden.', 'us_english', @replace='replace' USE Northwind GO CREATE PROCEDURE UpdateCustomerPhone @CustomerID nchar (5) = NULL, @Phone nvarchar (24) = NULL AS IF @CustomerID IS NULL BEGIN PRINT 'Sie mssen eine gltige Kunden-ID (CustomerID) angeben.' RETURN END /* Sicherstellen, dass eine gltige Kunden-ID (CustomerID) angegeben wird' */

Sie mssen den Abschnitt Hinweise fr den Kursleiter fr diese Unterrichtseinheit lesen; hier finden Sie die Informationen zum Einrichten der Vorfhrung. Besprechen Sie das Skript D09_UpdateCustomerPho ne.sql genau, und fhren Sie es dann aus. berprfen Sie mit Hilfe des Skripts D09_TestUpdate.sql, ob die Fehlerbehandlungslogik funktioniert.

44

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren


IF NOT EXISTS (SELECT * FROM Customers WHERE CustomerID = @CustomerID) BEGIN RAISERROR (50010, 16, 1) --Kunde nicht gefunden. RETURN END BEGIN TRANSACTION UPDATE Customers SET Phone = @Phone WHERE CustomerID = @CustomerID /* Anzeigen der Meldung, dass die Telefonnummer fr die Firma CustomerID aktualisiert wurde */ SELECT 'Die Telefonnummer fr ' + @CustomerID + ' wurde aktualisiert zu ' + @Phone COMMIT TRANSACTION GO

Methodischer Hinweis

Weisen Sie darauf hin, dass an dieser Stelle die UPDATE-Transaktion beginnt. Der gesamte vorhergehende Code dient der Fehlerberprfung. Weisen Sie darauf hin, dass es sich um ein typisches Grenverhltnis von Fehlerberprfungs- zu Transaktionsanweisungen handelt.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

45

Leistungsaspekte
Erlutern Sie einige der Leistungsaspekte, die beim Implementieren gespeicherter Prozeduren bercksichtigt werden mssen.

Thema

Windows 2000-Systemmonitor Objekt: SQLServer: Cache-Manager Objekt: SQLServer: SQL-Statistik SQL Profiler Kann Ereignisse berwachen Kann jede Anweisung in einer gespeicherten Prozedur testen

Einstieg

Wenn Sie gespeicherte Prozeduren implementieren, sollten Sie die folgenden Leistungsaspekte bercksichtigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Folgende Tools helfen Ihnen, die Ursache von Leistungsproblemen zu ermitteln, die mglicherweise mit der Ausfhrung gespeicherter Prozeduren verbunden sind.

Windows 2000-Systemmonitor
Neben zahlreichen weiteren Aktivitten berwacht Windows 2000-Systemmonitor die Verwendung des Prozedurcaches. Die folgenden Objekte und Leistungsindikatoren stellen allgemeine Informationen zu den kompilierten Plnen im Prozedurcache und zur Anzahl der erneuten Kompilierungen zur Verfgung. Sie knnen auch eine bestimmte Instanz berwachen, wie z. B. Procedure Plans.
Objekt SQLServer: Cache-Manager Leistungsindikatoren Cachetrefferquote Cacheobjektzhler Cacheseiten Cacheverwendungszhler/Sekunde SQLServer: SQL-Statistik Erneute SQL-Kompilierungen/Sekunde

46

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

SQL Profiler
Bei SQL Profiler handelt es sich um ein grafisches Tool, das Ihnen das berwachen von Ereignissen ermglicht, wie z. B. Start oder Beendigung einer gespeicherten Prozedur oder Start und Beendigung einzelner Transact-SQLAnweisungen innerhalb einer gespeicherten Prozedur. Darber hinaus knnen Sie berwachen, ob eine gespeicherte Prozedur im Prozedurcache gefunden wurde. In der Entwicklungsphase eines Projekts knnen Sie die Anweisungen einer gespeicherten Prozedur zeilenweise testen, um festzustellen, ob die Funktionsweise der Anweisungen Ihren Erwartungen entspricht. Anmerkung Seien Sie vorsichtig beim Erstellen geschachtelter gespeicherter Prozeduren. Durch das Schachteln von gespeicherten Prozeduren wird ein Grad an Komplexitt erreicht, durch den die Fehlerbehandlung bei Leistungsproblemen erschwert werden kann.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

47

Empfohlene Methoden
Thema
Fassen Sie Tipps und Techniken zum Schreiben effizienter gespeicherter Prozeduren zusammen.

berprfen Sie alle Eingabeparameter berprfen Sie alle Eingabeparameter Entwerfen Sie jede gespeicherte Prozedur so, dass sie einen Entwerfen Sie jede gespeicherte Prozedur so, dass sie einen einzigen Task ausfhrt einzigen Task ausfhrt Fhren Sie die Datenberprfung vor dem Starten von Fhren Sie die Datenberprfung vor dem Starten von Transaktionen durch Transaktionen durch Verwenden Sie dieselben Verbindungseinstellungen fr alle Verwenden Sie dieselben Verbindungseinstellungen fr alle gespeicherten Prozeduren gespeicherten Prozeduren Verwenden Sie die WITH ENCRYPTION-Option zum Verwenden Sie die WITH ENCRYPTION-Option zum Verschlsseln des Textes gespeicherter Prozeduren Verschlsseln des Textes gespeicherter Prozeduren

Einstieg

Verwenden Sie fr das Implementieren gespeicherter Prozeduren die folgenden empfohlenen Methoden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe der folgenden empfohlenen Methoden knnen Sie die Effektivitt und Effizienz von gespeicherten Prozeduren erhhen: berprfen Sie alle Eingabeparameter am Anfang einer gespeicherten Prozedur, um fehlende und ungltige Werte mglichst frh aufzuspren. Entwerfen Sie jede gespeicherte Prozedur so, dass sie einen einzigen Task ausfhrt. Fhren Sie die Fehlerberprfung fr Aufgaben- und Geschftslogik und die Datenberprfung vor dem Starten von Transaktionen durch. Verwenden Sie kurze Transaktionen. Verwenden Sie dieselben Verbindungseinstellungen fr alle gespeicherten Prozeduren. Verwenden Sie die WITH ENCRYPTION-Option zum Verschlsseln des Textes gespeicherter Prozeduren. Lschen Sie nie Eintrge aus der syscomments-Systemtabelle. Zustzliche Informationen zu dem folgenden Thema finden Sie in der SQL Server-Onlinedokumentation.
Thema Prozedurcache Suchbegriff "SQL Server-Arbeitsspeicherpool" "Zwischenspeicherung und Wiederverwendung von Ausfhrungsplnen"

48

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

bungseinheit B: Erstellen gespeicherter Prozeduren mit Parametern


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit fhren Sie ein Skript aus, das mehrere gespeicherte Prozeduren erstellt, und erstellen und ndern eigene gespeicherte Prozeduren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen einer gespeicherten Prozedur mit Hilfe des Assistenten zur Erstellung gespeicherter Prozeduren. Testen einer gespeicherten Prozedur, die Fehlerbehandlungstechniken einschliet. Erstellen benutzerdefinierter Fehlermeldungen. Erstellen von gespeicherten Prozeduren, die Codes zurckgeben.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L09 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L09\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore09B.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

49

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 45 Minuten

50

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

bung 1 Verwenden des Assistenten zur Erstellung gespeicherter Prozeduren


In dieser bung verwenden Sie den Assistenten zur Erstellung gespeicherter Prozeduren, um eine gespeicherte Prozedur in der ClassNorthwind-Datenbank zu erstellen, durch die die Telefonnummer eines Mitarbeiters aktualisiert wird. So verwenden Sie den Assistenten zur Erstellung gespeicherter Prozeduren In diesem Verfahren verwenden Sie den Assistenten zur Erstellung gespeicherter Prozeduren, um eine gespeicherte Prozedur zu erstellen, durch die die Telefonnummer eines Mitarbeiters aktualisiert wird. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Server Enterprise Manager. 3. Klicken Sie in der Konsolenstruktur auf Ihren Server. 4. Klicken Sie im Men Extras auf Assistenten. 5. Erweitern Sie Datenbank, und doppelklicken Sie dann auf Assistent zur Erstellung gespeicherter Prozeduren. 6. Whlen Sie die ClassNorthwind-Datenbank aus. 7. Erstellen Sie eine gespeicherte Prozedur, die die Telefonnummer eines Mitarbeiters aktualisiert. Die Telefonnummer wird in der Employees-Tabelle verwaltet. Whlen Sie die Aktion Aktualisieren fr die Employees-Tabelle aus. 8. Klicken Sie auf die Schaltflche Bearbeiten, um die Eigenschaften der gespeicherten Prozedur zu bearbeiten. 9. Weisen Sie der gespeicherten Prozedur den Namen UpdateEmployeePhone zu. 10. Geben Sie in der SET-Klausel nur die HomePhone-Spalte und in der WHERE-Klausel nur die EmployeeID-Spalte an. 11. Erweitern Sie in der Konsolenstruktur die ClassNorthwind-Datenbank, und klicken Sie dann auf Gespeicherte Prozeduren. 12. berprfen Sie, ob die gespeicherte Prozedur UpdateEmployeePhone im Detailbereich aufgefhrt wird.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

51

13. berprfen Sie die Eigenschaften der gespeicherten Prozedur UpdateEmployeePhone. Welche Parameter wurden in der gespeicherten Prozedur definiert? @EmployeeID_1 und @HomePhone_2 ____________________________________________________________ ____________________________________________________________ 14. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, ber die Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 15. Fhren Sie die gespeicherte Prozedur UpdateEmployeePhone aus, um zu berprfen, ob sie erwartungsgem funktioniert. Aktualisieren Sie die Telefonnummer der Mitarbeiterin Nancy Davolio, sodass ihre Telefonnummer jetzt (503) 555-1212 lautet. Der Wert von EmployeeID dieser Mitarbeiterin ist 1.
EXEC UpdateemployeePhone @EmployeeID_1 = 1, @HomePhone_2 = '(503)555-1212'

So generieren Sie ein Skript In diesem Verfahren generieren und speichern Sie ein Skript fr die gespeicherte Prozedur, die Sie mit dem Assistenten zur Erstellung gespeicherter Prozeduren erstellt haben. 1. Wechseln Sie zu SQL Server Enterprise Manager. 2. Erweitern Sie in der Konsolenstruktur den Knoten Datenbanken, erweitern Sie ClassNorthwind, und klicken Sie dann auf Gespeicherte Prozeduren. 3. Klicken Sie im Detailbereich mit der rechten Maustaste auf UpdateEmployeePhone, zeigen Sie auf Alle Tasks, und klicken Sie dann auf SQL-Skript generieren. 4. Klicken Sie auf OK, um das Skript zu generieren. 5. Speichern Sie das Skript unter UpdateEmployeePhone.sql. 6. ffnen Sie das gespeicherte Skript, und sehen Sie es sich an.

52

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

bung 2 Verwenden der Fehlerbehandlung in gespeicherten Prozeduren


In dieser bung fhren Sie ein Skript aus, das eine gespeicherte Prozedur erstellt, mit der ein Lieferant und ein Artikel zur ClassNorthwind-Datenbank hinzugefgt wird. Anschlieend testen Sie die Fehlerbehandlung, die in diesem Skript enthalten ist. So erstellen und testen Sie eine gespeicherte Prozedur In diesem Verfahren ffnen und lesen Sie ein Skript, das eine gespeicherte Prozedur erstellt, um einen neuen Lieferanten und einen neuen Artikel hinzuzufgen. Anschlieend testen Sie die gespeicherte Prozedur, um sicherzustellen, dass sie erwartungsgem ausgefhrt wird, indem Sie sie zum Einfgen eines neuen Lieferanten und eines neuen Artikels verwenden. Abschlieend testen Sie die Fehlerbehandlung der gespeicherten Prozedur. 1. Wechseln Sie zu SQL Query Analyzer. 2. ffnen Sie C:\Moc\2328A\Labfiles\L09\SupplierProduct.sql, und sehen Sie sich den Inhalt der Datei an. Welchen Vorteil bietet es, wenn die @@error-Systemfunktion verwendet wird, whrend Werte in die Tabellen Suppliers und Products eingefgt werden? Wenn der Einfgevorgang aufgrund einer Datentyp- oder Einschrnkungsverletzung fehlschlgt, wird ein Rollback der Transaktion durchgefhrt. ____________________________________________________________ ____________________________________________________________ 3. Fhren Sie das Skript aus, um die gespeicherte Prozedur SupplierProductInsert zu erstellen. 4. ffnen Sie C:\Moc\2328A\Labfiles\L09\SupplierProductInsert.sql. ndern Sie das Skript, indem Sie die geeigneten Werte eingeben, um einen neuen Lieferanten und einen neuen Artikel hinzuzufgen. (Sie knnen beliebige Werte angeben.) 5. Fhren Sie das genderte Skript aus. 6. Testen Sie die Fehlerbehandlung in der gespeicherten Prozedur SupplierProductInsert, indem Sie die Werte ndern und die Zeile mit dem @contactname-Parameter durch einen Kommentar deaktivieren. Fhren Sie das genderte Skript aus, um sicherzustellen, dass der Wert ignoriert wird. Welche Fehlermeldung wird angezeigt? Sie mssen Company Name, Contact Name, Address, City, Region, Postal Code, Country, Phone, Product Name and Discontinued eingeben. (Contact Title, Fax, Home Page, Unit Price, Units in Stock, Units on Order und Reorder Level knnen den Wert NULL haben.) ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

53

bung 3 Anpassen von Fehlermeldungen


In dieser bung erstellen Sie eine benutzerdefinierte Fehlermeldung, die im Anwendungsprotokoll der Windows 2000-Ereignisanzeige protokolliert wird. Die Meldung enthlt die Lieferanten-ID, die eingefgt wurde, sowie den SQL Server-Benutzer, der diese Einfgung vorgenommen hat. So erstellen Sie eine benutzerdefinierte Fehlermeldung In diesem Verfahren ndern Sie die gespeicherte Prozedur SupplierProduct, um benutzerdefinierte Fehlermeldungen aufzurufen. C:\Moc\2328A\Labfiles\L09\Answers\CustomErrorAnswer.sql enthlt ein fertiges Skript fr dieses Verfahren. 1. ffnen Sie C:\Moc\2328A\Labfiles\L09\CustomError.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. 2. Suchen Sie nach dem Kommentar /* #1 Ersetzen Sie dies durch den Code der Kursteilnehmer */, und fgen Sie zur gespeicherten Prozedur CustomError eine Variable hinzu, die den Wert des Benutzernamens speichert, der den Lieferanten einfgt.
/* #1 Ersetzen Sie dies durch den Code der Kursteilnehmer. */ DECLARE @UserName nvarchar (60) SELECT @UserName = suser_sname()

Tipp Verwenden Sie die SUSER_SNAME-Systemfunktion. 3. Suchen Sie nach dem nchsten Kommentar /* #2 Ersetzen Sie dies durch den Code der Kursteilnehmer */. Fgen Sie eine RAISERROR-Anweisung hinzu, die anzeigt, dass ein neuer Lieferant hinzugefgt wurde. Die RAISERROR-Anweisung muss den Fehler #50018 aufrufen und die Parameter fr die Lieferantennummer und den Benutzer bergeben, der die gespeicherte Prozedur ausfhrt. Weitere Informationen zur die RAISERROR-Anweisung finden Sie in der SQL Server-Onlinedokumentation.
RAISERROR (50018, 16, 1, @InsertSupplierID, @UserName)

4. Suchen Sie nach dem nchsten Kommentar /* #3 Ersetzen Sie dies durch den Code der Kursteilnehmer */, um die Fehlermeldung Nr. 50018 mit Hilfe der gespeicherten Systemprozedur sp_addmessage zu erstellen. Schlieen Sie die Werte fr Supplier und UserName in die Fehlermeldung ein.
EXEC sp_addmessage 50018, 16, 'Supplier %d was inserted by %s', 'us_english','true'

54

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

5. Fhren Sie das Skript aus, um die gespeicherte Prozedur CustomError zu erstellen. 6. ffnen Sie C:\Moc\2328A\Labfiles\L09\SupplierProductInsert.sql. ndern Sie das Skript, indem Sie die geeigneten Werte eingeben, um einen neuen Lieferanten und einen neuen Artikel hinzuzufgen. (Sie knnen beliebige Werte angeben.) 7. Fhren Sie das genderte Skript aus. 8. berprfen Sie die Ergebnisse, ffnen Sie dann die Ereignisanzeige, und zeigen Sie das Anwendungsprotokoll an, um zu berprfen, ob die Informationsmeldung aufgezeichnet wurde.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

55

bung 4 Verwenden von Rckgabecodes


In dieser bung verwenden Sie das Skript C:\Moc\2328A\Labfiles\L09\Return1.sql, um eine gespeicherte Prozedur mit dem OUTPUT-Schlsselwort zu erstellen. Anschlieend fhren Sie die gespeicherte Prozedur aus und testen sie fr unterschiedliche Rckgabecodes, indem Sie die Skripts Return2.sql und Return3.sql verwenden. So erstellen Sie die gespeicherte Prozedur OrderCount In diesem Verfahren erstellen Sie die gespeicherte Prozedur OrderCount, die die Anzahl der unerledigten Auftrge fr einen Kunden zhlt. Wenn fr den Kunden mindestens ein unerledigter Auftrag vorliegt, wird der Status 1 zurckgegeben. Wenn fr den Kunden kein unerledigter Auftrag vorliegt, wird der Status 0 zurckgegeben. Dies ist ein Beispiel fr eine geschachtelte gespeicherte Prozedur. 1. Wechseln Sie zu SQL Query Analyzer, ffnen Sie C:\Moc\2328A\Labfiles\L09\Return1.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. 2. Geben Sie die folgende Prozedur ein, und fhren Sie sie aus:
EXEC OrderCount 1,1

Wie lautet das Ergebnis? Der Befehl wurde erfolgreich ausgefhrt, es wurden jedoch keine Daten zurckgegeben. ____________________________________________________________ ____________________________________________________________ So fhren Sie die gespeicherte Prozedur OrderCount mit der Option OUTPUT aus In diesem Verfahren beobachten Sie, wie sich die Option OUTPUT auf die Ausfhrung der gespeicherten Prozedur OrderCount auswirkt. 1. Wechseln Sie zu SQL Query Analyzer, ffnen Sie C:\Moc\2328A\Labfiles\L09\Return2.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript fhrt die gespeicherte Prozedur OrderCount aus und bergibt einen Wert fr CustomerID, fr den unerledigte Auftrge vorliegen. Wie lautet das Ergebnis? Customer RATTC has 18 unfilled order(s). ____________________________________________________________ ____________________________________________________________

56

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

2. ffnen Sie C:\Moc\2328A\Labfiles\L09\Return3.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. Dieses Skript fhrt die gespeicherte Prozedur OrderCount aus und bergibt einen Wert fr CustomerID, fr den unerledigte Auftrge vorliegen. Wie lautet das Ergebnis? Customer WOLZA has NO unfilled order(s). ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

57

Wenn Sie noch Zeit haben Ausfhren erweiterter gespeicherter Prozeduren


In dieser bung fhren Sie eine erweiterte gespeicherte Prozedur aus und zeigen den Dateinamen der DLL-Datei an, in der die Funktion definiert ist. So fhren Sie eine erweiterte gespeicherte Prozedur aus In diesem Verfahren fhren Sie die erweiterte gespeicherte Prozedur xp_cmdshell aus, um alle Dateien und Ordner im Stammverzeichnis von Laufwerk C: aufzulisten. 1. Verwenden Sie SQL Query Analyzer, und berprfen Sie, ob Sie die master-Datenbank verwenden. 2. Fhren Sie die erweiterte gespeicherte Prozedur xp_cmdshell aus, um eine Liste aller Dateien anzuzeigen, die im Ordner C:\ enthalten sind.
EXEC master..xp_cmdshell 'dir c:\'

Wie lautet das Ergebnis? Die Verzeichnisliste wurde in Form von Textzeilen zurckgegeben. ____________________________________________________________ ____________________________________________________________ 3. Fhren Sie die gespeicherte Systemprozedur sp_helptext aus, um die Definition von xp_cmdshell anzuzeigen.
EXEC master..sp_helptext xp_cmdshell

Wie lautet das Ergebnis? Xplog70.dll. Diese DLL enthlt die Funktion der erweiterten gespeicherten Prozedur. ____________________________________________________________ ____________________________________________________________

58

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

Wenn Sie noch Zeit haben Verfolgen des Ablaufs gespeicherter Prozeduren mit Hilfe von SQL Profiler
In dieser bung verwenden Sie das grafische Tool SQL Profiler, um den Ablauf einzelner gespeicherter Prozeduren zu verfolgen. So verfolgen Sie den Ablauf von Ereignissen gespeicherter Prozeduren mittels SQL Profiler In diesem Verfahren starten Sie eine SQL Profiler-Ablaufverfolgung, indem Sie eine benutzerdefinierte Ablaufverfolgsvorlage verwenden, um gespeicherte Prozeduren zu berwachen. 1. ffnen Sie SQL Profiler. 2. Klicken Sie auf der Symbolleiste auf das Symbol Neue Ablaufverfolgung. 3. Stellen Sie unter Verwendung der Windows-Authentifizierung eine Verbindung zum (lokalen) Server her. 4. Fgen Sie auf der Registerkarte Ereignisse alle gespeicherten Prozeduren und Transact-SQL-Ereignisklassen hinzu. 5. Klicken Sie auf Ausfhren. 6. Wechseln Sie zu SQL Query Analyzer, ffnen Sie C:\Moc\2328A\Labfiles\L09\SupplierProductInsert.sql, sehen Sie sich den Inhalt der Datei an, und fhren Sie sie dann aus. 7. Wechseln Sie zu SQL Profiler. 8. Beenden Sie die aktive Ablaufverfolgung, und prfen Sie sie.

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

59

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Einfhrung in gespeicherte Prozeduren Erstellen, Ausfhren, ndern und Lschen gespeicherter Prozeduren Verwenden von Parametern in gespeicherten Prozeduren Ausfhren erweiterter gespeicherter Prozeduren Behandeln von Fehlermeldungen

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klren Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

1. Sie haben eine gespeicherte Prozedur erstellt, um einen Kunden aus der Datenbank zu entfernen. Nach Abschluss der Lschtransaktion soll eine benutzerdefinierte Fehlermeldung in das Windows 2000-Anwendungsprotokoll geschrieben werden. Wie fhren Sie diese Aufgabe aus? Erstellen Sie eine benutzerdefinierte Fehlermeldung, indem Sie den @with_log-Parameter in der gespeicherten Prozedur sp_addmessage angeben. Fhren Sie die RAISERROR-Anweisung in der gespeicherten Prozedur aus, um die benutzerdefinierte Fehlermeldung auszulsen, sobald fr die Lschtransaktion ein Commit ausgefhrt wurde.

2. Den Benutzern in der Lohnbuchhaltung soll es mglich sein, Daten in die payroll-Datenbank einzufgen oder vorhandene Daten zu aktualisieren und zu lschen. Sie sollen jedoch keinen Zugriff auf die zugrunde liegenden Tabellen haben. Welches Verfahren knnen Sie alternativ zum Erstellen einer Sicht verwenden, um dieses Ziel zu erreichen? Erstellen Sie mehrere gespeicherte Prozeduren, von denen jede einen bestimmten Task ausfhrt. Erteilen Sie den Benutzern in der Lohnbuchhaltung die EXECUTE-Berechtigung fr die gespeicherten Prozeduren.

60

Unterrichtseinheit 9: Implementieren gespeicherter Prozeduren

3. Sie mssen eine gespeicherte Prozedur in der Datenbank ndern. Mehrere Benutzer verfgen ber die Berechtigung zum Ausfhren dieser gespeicherten Prozedur. Welche Anweisung mssen Sie ausfhren, um die nderung ohne Auswirkung auf die bestehenden Berechtigungen durchzufhren? ALTER PROC. Wenn Sie die Anweisungen DROP PROC und CREATE PROC mit den gewnschten nderungen ausfhren, mssen Sie den Benutzern die EXECUTE-Anweisung erneut erteilen.

Inhalt bersicht Arten von benutzerdefinierten Funktionen Definieren von benutzerdefinierten Funktionen Beispiele fr benutzerdefinierte Funktionen Empfohlene Methoden bungseinheit A: Erstellen von benutzerdefinierten Funktionen Lernzielkontrolle

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen


1 2 3 9 17 18 24

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

iii

Hinweise fr den Kursleiter


Prsentation: 30 Minuten bungseinheit: 30 Minuten Diese Unterrichtseinheit gibt Kursteilnehmern Informationen zur Implementierung von benutzerdefinierten Funktionen. Es werden die drei Arten von benutzerdefinierten Funktionen und die allgemeine Syntax zum Erstellen und ndern der Funktionen erlutert. Auerdem wird zu jeder Art ein Beispiel gegeben. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der drei Arten von benutzerdefinierten Funktionen. Erstellen und ndern von benutzerdefinierten Funktionen. Erstellen der drei Arten von benutzerdefinierten Funktionen.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_10.ppt Die Beispieldatei C:\Moc\2328A\Demo\D10_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Arten von benutzerdefinierten Funktionen Kenntnisse im Hinblick auf integrierte Funktionen sind eine Voraussetzung fr diesen Kurs. Besprechen Sie eine einfache Funktion, wie z. B. COUNT oder SUM, um sicherzustellen, dass die Kursteilnehmer mit diesem Konzept vertraut sind. Stellen Sie die drei Arten von benutzerdefinierten Funktionen vor, und weisen Sie darauf hin, dass die Skalarfunktion am ehesten den integrierten Funktionen entspricht. Stellen Sie heraus, dass die beiden anderen Funktionen eine Tabelle zurckgeben.

iv

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Definieren von benutzerdefinierten Funktionen Erlutern Sie die allgemeine Syntax zum Erstellen einer Funktion, insbesondere den Befehl CREATE FUNCTION, den Funktionsnamen, die Eingabeparameter, die RETURNS-Klausel und den Inhaltsbereich. Verwenden Sie das Beispiel der Skalarfunktion auf der Folie, konzentrieren Sie die Diskussion aber auf die Teile der Syntax, die fr alle benutzerdefinierten Funktionen gleich sind. Erlutern Sie die Bedeutung des Begriffs nicht deterministisch, indem Sie darauf hinweisen, dass GETDATE() bei jedem Aufruf einen anderen Wert zurckgibt. Stellen Sie heraus, dass Schemabindung, Sicherheit sowie das ndern und Lschen von benutzerdefinierten Funktionen ganz hnlich wie bei Sichten ablaufen. Beispiele fr benutzerdefinierte Funktionen Weisen Sie darauf hin, dass das Beispiel, das beim Erstellen von benutzerdefinierten Funktionen besprochen wurde, eine Skalarfunktion war. Besprechen Sie das zweite Beispiel, und weisen Sie auf die Datentypdeklaration und die Platzierung von RETURN im BEGINEND-Block hin. Zeigen Sie, wie die Funktion aufgerufen wird, und weisen Sie auf den Besitzernamen in dem zweiteiligen Namenssystem hin. Besprechen Sie die Stichpunkte auf der Folie Verwenden einer Funktion mit mehreren Anweisungen und Tabellenrckgabe, und betonen Sie, dass Funktionen mit Tabellenrckgabe als Ergebnis eine Tabelle zurckgeben. Zeigen und besprechen Sie die Syntax zum Erstellen der Funktion. Stellen Sie heraus, wie die RETURNS-Klausel den Namen und die Struktur der Tabelle definiert. Besprechen Sie den BEGINEND-Block und die Anordnung von RETURN kurz vor dem Blockende. Fhren Sie die Verwendung der Funktion vor, und stellen Sie heraus, wie die Funktion eine Tabelle oder eine Sicht ersetzt. Vergegenwrtigen Sie den Kursteilnehmern, dass eine gespeicherte Prozedur nicht anstelle einer Tabelle oder Sicht verwendet werden kann. Betonen Sie, dass eine Funktion mit mehreren Anweisungen und Tabellenrckgabe im Prinzip eine gespeicherte Prozedur ist, die als Tabelle oder Sicht verwendet werden kann. Besprechen Sie die Stichpunkte auf der Folie Verwenden einer Inlinefunktion mit Tabellenrckgabe. Weisen Sie auf die Einschrnkung auf eine SELECT-Anweisung hin. Beachten Sie, dass der BEGINEND-Block aufgrund dieser Einschrnkung nicht erforderlich ist. Stellen Sie heraus, dass eine Inlinefunktion mit Tabellenrckgabe wegen der Einschrnkung auf eine einzige SELECT-Anweisung mit einer Sicht vergleichbar ist. Fahren Sie mit der Folie zur Syntax fort, und besprechen Sie die Syntax. Weisen Sie dann darauf hin, dass eine Inlinefunktion mit Tabellenrckgabe sich darin von einer Sicht unterscheidet, dass sie einen Parameter annehmen kann. Fhren Sie das Beispiel vor, indem sie die Funktion aufrufen. Betonen Sie, dass eine indizierte Sicht mit Aggregationen mglicherweise eine lngere Erstellungszeit beansprucht, aber schnell Antworten auf Abfragen bereitstellt. Die Anwendung einer Inlinefunktion mit Tabellenrckgabe auf die indizierte Sicht ist eine einfache Methode, um die gewnschten Aggregationen abzurufen.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Im folgenden Abschnitt werden die Anforderungen zum Einrichten der bungseinheit in dieser Unterrichtseinheit beschrieben.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit in dieser Unterrichtseinheit muss sich die ClassNorthwind-Datenbank in dem fr die bungseinheit erforderlichen Zustand befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der folgenden Aktionen aus: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore10.cmd. Achtung Falls dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore10.cmd ausfhren, um sicherzustellen, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

This page is intentionally left blank.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Arten von benutzerdefinierten Funktionen Definieren von benutzerdefinierten Funktionen Beispiele fr benutzerdefinierte Funktionen

Einstieg

In dieser Unterrichtseinheit lernen Sie, wie benutzerdefinierte Funktionen erstellt und verwendet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit gibt eine bersicht ber benutzerdefinierte Funktionen. Sie erlutert, warum und wie benutzerdefinierte Funktionen verwendet werden, und beschreibt die Syntax fr ihre Erstellung. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der drei Arten von benutzerdefinierten Funktionen. Erstellen und ndern von benutzerdefinierten Funktionen. Erstellen der drei Arten von benutzerdefinierten Funktionen.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Arten von benutzerdefinierten Funktionen


Stellen Sie das Konzept einer benutzerdefinierten Funktion vor, und erlutern Sie ihre Vorteile.

Thema

Skalarfunktionen hneln einer integrierten Funktion Funktionen mit mehreren Anweisungen und Tabellenrckgabe Inhalt entspricht dem einer gespeicherten Prozedur

Einstieg

Es gibt drei Arten von benutzerdefinierten Funktionen.

Verweise wie bei einer Sicht


Inlinefunktionen mit Tabellenrckgabe hneln einer Sicht mit Parametern Geben eine Tabelle als Ergebnis einer einzelnen SELECT-Anweisung zurck

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Microsoft SQL Server 2000 knnen Sie eigene Funktionen entwerfen und so die integrierten Systemfunktionen erweitern und neue hinzufgen. An eine benutzerdefinierte Funktion knnen mehrere Eingabeparameter bergeben werden, sie kann aber auch ohne Eingabeparameter ausgefhrt werden. Sie gibt entweder einen skalaren Wert oder eine Tabelle zurck. Als Eingabeparameter knnen alle Datentypen auer timestamp, cursor und table verwendet werden. Benutzerdefinierte Funktionen untersttzen keine Ausgabeparameter. SQL Server 2000 untersttzt drei Arten von benutzerdefinierten Funktionen:

Methodischer Hinweis

Diese Folie gibt eine Einfhrung in die drei Arten von benutzerdefinierten Funktionen. Weisen Sie die Kursteilnehmer darauf hin, dass in den nachfolgenden Themen die Unterschiede zwischen den Funktionsarten besprochen werden.

Skalarfunktionen
Eine Skalarfunktion hnelt einer integrierten Funktion.

Funktionen mit mehreren Anweisungen und Tabellenrckgabe


Eine Funktion mit mehreren Anweisungen und Tabellenrckgabe gibt eine Tabelle zurck, die von einer oder mehreren Transact-SQL-Anweisungen erstellt wurde, und sie hnelt einer gespeicherten Prozedur. Im Gegensatz zu einer gespeicherten Prozedur kann auf eine Funktion mit mehreren Anweisungen und Tabellenrckgabe jedoch wie auf eine Sicht in der FROM-Klausel einer SELECT-Anweisung verwiesen werden.

Inlinefunktionen mit Tabellenrckgabe


Eine Inlinefunktion mit Tabellenrckgabe gibt eine Tabelle zurck, die das Ergebnis einer einzelnen SELECT-Anweisung ist. Die Funktion hnelt einer Sicht, bietet aber bei der Verwendung von Parametern mehr Flexibilitt als Sichten und erweitert die Funktionen von indizierten Sichten.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Definieren von benutzerdefinierten Funktionen


Geben Sie eine bersicht ber die Themen dieses Abschnitts.

Thema

Erstellen einer benutzerdefinierten Funktion Erstellen einer Funktion mit Schemabindung Festlegen von Berechtigungen fr benutzerdefinierte Funktionen ndern und Lschen von benutzerdefinierten Funktionen

Einstieg

In diesem Abschnitt wird das Erstellen, ndern und Lschen von benutzerdefinierten Funktionen behandelt. Auerdem werden Berechtigungen behandelt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird das Erstellen, ndern und Lschen von benutzerdefinierten Funktionen behandelt. Auerdem werden Berechtigungen behandelt.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Erstellen einer benutzerdefinierten Funktion


Thema
Beschreiben Sie die allgemeine CREATE FUNCTION-Anweisung.

Erstellen einer Funktion


USE Northwind USE Northwind GO GO CREATE FUNCTION fn_NewRegion CREATE FUNCTION fn_NewRegion (@myinput nvarchar(30)) (@myinput nvarchar(30)) RETURNS nvarchar(30) RETURNS nvarchar(30) BEGIN BEGIN IF @myinput IS NULL IF @myinput IS NULL SET @myinput = 'Not Applicable' SET @myinput = 'Not Applicable' RETURN @myinput RETURN @myinput END END

Einstieg

Sie erstellen eine benutzerdefinierte Funktion auf fast dieselbe Weise wie eine Sicht oder eine gespeicherte Prozedur.

Einschrnkungen fr Funktionen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Sie erstellen eine benutzerdefinierte Funktion auf fast dieselbe Weise wie eine Sicht oder eine gespeicherte Prozedur.

Fragen Sie die Kursteilnehmer, welche Art von benutzerdefinierter Funktion im Beispiel verwendet wird. Das Beispiel zeigt eine benutzerdefinierte Skalarfunktion. Fhren Sie die Diskussion aber so allgemein, dass sie fr alle benutzerdefinierten Funktionen gilt.

Erstellen einer Funktion


Benutzerdefinierte Funktionen werden mit der CREATE FUNCTION-Anweisung erstellt. Jeder vollgekennzeichnete benutzerdefinierte Funktionsname (database_name.owner_name.function_name) muss eindeutig sein. Die Anweisung gibt die Eingabeparameter mit ihrem jeweiligen Datentyp, die Verarbeitungsanweisungen und den Wert an, der mit jedem Datentyp zurckgegeben wird. CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type [ WITH < function_option> [,...n] ] [ AS ] BEGIN function_body RETURN scalar_expression END

Syntax

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Beispiel

In diesem Beispiel wird eine benutzerdefinierte Funktion erstellt, mit der ein NULL-Wert durch die Wrter Not Applicable ersetzt wird.
USE Northwind GO CREATE FUNCTION fn_NewRegion (@myinput nvarchar(30)) RETURNS nvarchar(30) BEGIN IF @myinput IS NULL SET @myinput = 'Not Applicable' RETURN @myinput END

Geben Sie bei einem Verweis auf eine benutzerdefinierte Skalarfunktion den Funktionsbesitzer und den Funktionsnamen in einer zweiteiligen Syntax an.
SELECT LastName, City, dbo.fn_NewRegion(Region) AS Region, Country FROM dbo.Employees

Ergebnis
LastName Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth City Seattle Tacoma Kirkland Redmond London London London Seattle London Region WA WA WA WA Not Not Not WA Not Country USA USA USA USA UK UK UK USA UK

Applicable Applicable Applicable Applicable

Einschrnkungen fr Funktionen
Nicht deterministische Funktionen, z. B. GETDATE(), knnen unterschiedliche Ergebniswerte zurckgeben, auch wenn Sie jedes Mal mit denselben Eingabewerten aufgerufen werden. Integrierte, nicht deterministische Funktionen drfen im Hauptteil von benutzerdefinierten Funktionen nicht verwendet werden. Die folgenden integrierten Funktionen sind nicht deterministisch. @@ERROR @@IDENTITY @@ROWCOUNT @@TRANCOUNT APP_NAME CURRENT_TIMESTAMP CURRENT_USER DATENAME FORMATMESSAGE GETANSINULL GETDATE GetUTCDate HOST_ID HOST_NAME IDENT_INCR IDENT_SEED IDENTITY NEWID PERMISSIONS SESSION_USER STATS_DATE SYSTEM_USER TEXTPTR TEXTVALID USER_NAME @@ERROR @@IDENTITY @@ROWCOUNT @@TRANCOUNT

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Erstellen einer Funktion mit Schemabindung


Erlutern Sie den Zweck und die Einschrnkungen der Schemabindung.

Thema

Einstieg

Alle benutzerdefinierten Funktionen und Sichten, auf die die Funktion verweist, sind ebenfalls schemagebunden Auf die Objekte, auf die die Funktion verweist, wird nicht mit einem zweiteiligen Namen verwiesen Die Funktion und die Objekte gehren zur gleichen Datenbank Der Benutzer verfgt ber die REFERENCEBerechtigung fr die erforderlichen Datenbankobjekte

Mit der Schemabindung knnen Sie die Funktion an die Datenbankobjekte binden, auf die sie verweist.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit der Schemabindung knnen Sie die Funktion an die Datenbankobjekte binden, auf die sie verweist. Wenn eine Funktion mit der Option SCHEMABINDING erstellt wird, knnen die Datenbankobjekte, auf die die Funktion verweist, nicht gendert (mit der ALTER-Anweisung) und nicht gelscht (mit der DROP-Anweisung) werden. Eine Funktion kann nur dann schemagebunden sein, wenn die folgenden Bedingungen erfllt sind: Alle benutzerdefinierten Funktionen und Sichten, auf die die Funktion verweist, sind ebenfalls schemagebunden. Auf die Objekte, auf die die Funktion verweist, wird nicht mit einem zweiteiligen Namen im owner.objectname-Format verwiesen. Die Funktion und die Objekte, auf die sie verweist, gehren zur gleichen Datenbank. Der Benutzer, der die CREATE FUNCTION-Anweisung ausgefhrt hat, verfgt ber die REFERENCE-Berechtigung fr alle Datenbankobjekte, auf die die Funktion verweist.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Festlegen von Berechtigungen fr benutzerdefinierte Funktionen


Erlutern Sie, dass es wichtig ist, Berechtigungen fr die Verwendung von benutzerdefinierten Funktionen festzulegen.

Thema

Erfordert die CREATE FUNCTION-Berechtigung Erfordert EXECUTE-Berechtigung Erfordert die REFERENCE-Berechtigung fr die Tabellen, Sichten oder Funktionen, auf die verwiesen wird Erfordert den Besitz der Funktion, wenn sie in einer CREATE- oder ALTER TABLE-Anweisung verwendet wird

Einstieg

Das Sicherheitsmodell fr benutzerdefinierte Funktionen entspricht weitgehend dem von Sichten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Benutzerdefinierte Funktionen haben weitgehend dieselben Anforderungen an Berechtigungen wie andere Datenbankobjekte. Sie mssen ber die CREATE FUNCTION-Berechtigung verfgen, um benutzerdefinierte Funktionen zu erstellen, zu ndern oder zu lschen. Andere Benutzer als der Besitzer bentigen die EXECUTE-Berechtigung fr eine Funktion, um sie in einer Transact-SQL-Anweisung verwenden zu knnen. Wenn die Funktion an ein Schema gebunden ist, bentigen Sie die REFERENCE-Berechtigung fr Tabellen, Sichten und Funktionen, auf die die Funktion verweist. REFERENCE- Berechtigungen knnen mit der GRANT-Anweisung fr Sichten und benutzerdefinierte Funktionen ebenso wie fr Tabellen erteilt werden. Wenn eine CREATE TABLE- oder ALTER TABLE-Anweisung auf eine benutzerdefinierte Funktion in einer CHECK-Einschrnkung, DEFAULTKlausel oder berechneten Spalte verweist, muss der Tabellenbesitzer auch Besitzer der Funktion sein.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

ndern und Lschen von benutzerdefinierten Funktionen


Thema
Beschreiben Sie die ALTER FUNCTION- und DROP FUNCTION-Anweisungen.

ndern von Funktionen


ALTER FUNCTION dbo.fn_NewRegion ALTER FUNCTION dbo.fn_NewRegion <New function content> <New function content>

Einstieg

Benutzerdefinierte Funktionen werden mit Hilfe der ALTER FUNCTIONAnweisung gendert.

Zugewiesene Berechtigungen bleiben erhalten Bewirkt, dass die neue Funktionsdefinition die vorhandene Definition ersetzt Lschen von Funktionen
DROP FUNCTION dbo.fn_NewRegion DROP FUNCTION dbo.fn_NewRegion

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Benutzerdefinierte Funktionen werden mit Hilfe der ALTER FUNCTIONAnweisung gendert und mit Hilfe der DROP FUNCTION-Anweisung gelscht. Eine Funktion zu ndern anstatt zu lschen und neu zu erstellen, ist mit denselben Vorteilen verbunden, die auch fr Sichten und Prozeduren gelten. Die Berechtigungen fr die Funktion bleiben erhalten und werden sofort auf die genderte Funktion angewandt.

ndern von Funktionen


Benutzerdefinierte Funktionen werden mit der ALTER FUNCTION-Anweisung gendert. Beispiel Dieses Beispiel zeigt, wie eine Funktion gendert wird.
ALTER FUNCTION dbo.fn_NewRegion <New function content>

Lschen von Funktionen


Benutzerdefinierte Funktionen werden mit der DROP FUNCTION-Anweisung gelscht. Beispiel Dieses Beispiel zeigt, wie eine Funktion gelscht wird.
DROP FUNCTION dbo.fn_NewRegion

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Beispiele fr benutzerdefinierte Funktionen


Geben Sie eine bersicht ber die Themen dieses Abschnitts.

Thema

Erstellen einer benutzerdefinierten Skalarfunktion Beispiel fr eine benutzerdefinierte Skalarfunktion Verwenden einer Funktion mit mehreren Anweisungen und Tabellenrckgabe Beispiel fr eine Funktion mit mehreren Anweisungen und Tabellenrckgabe Verwenden einer Inlinefunktion mit Tabellenrckgabe Beispiel fr eine Inlinefunktion mit Tabellenrckgabe

Einstieg

In diesem Abschnitt werden die drei Arten von benutzerdefinierten Funktionen beschrieben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt werden die drei Arten von benutzerdefinierten Funktionen beschrieben. Es werden ihre Aufgaben beschrieben und Beispiele fr die Syntax bereitgestellt, mit der sie erstellt und aufgerufen werden knnen.

10

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Erstellen einer benutzerdefinierten Skalarfunktion


Thema
Beschreiben Sie die Arbeitsweise einer Skalarfunktion.

Einstieg

Der Datentyp wird in der RETURNS-Klausel angegeben Die Funktion wird innerhalb eines BEGINEND-Blockes definiert Alle Datentypen auer text, ntext, image, cursor und timestamp knnen zurckgegeben werden

Eine benutzerdefinierte Skalarfunktion hnelt einer integrierten Funktion.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine Skalarfunktion gibt einen einzelnen Datenwert zurck, dessen Typ in einer RETURNS-Klausel definiert wird. Der Hauptteil der Funktion, der in einem BEGIN...END-Block definiert ist, enthlt die Reihe von Transact-SQL-Anweisungen, die den Wert zurckgeben. Es knnen alle Datentypen auer text, ntext, image, cursor und timestamp zurckgegeben werden.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

11

Beispiel fr eine benutzerdefinierte Skalarfunktion


Thema
Stellen Sie ein Beispiel fr eine benutzerdefinierte Skalarfunktion fr die Gruppendiskussion bereit.

Erstellen der Funktion


USE Northwind USE Northwind CREATE FUNCTION fn_DateFormat CREATE FUNCTION fn_DateFormat (@indate datetime, @separator char(1)) (@indate datetime, @separator char(1)) RETURNS Nchar(20) RETURNS Nchar(20) AS AS BEGIN BEGIN RETURN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator + @separator + CONVERT(Nvarchar(20), datepart(dd, @indate)) + CONVERT(Nvarchar(20), datepart(dd, @indate)) + @separator + @separator + CONVERT(Nvarchar(20), datepart(yy, @indate)) + CONVERT(Nvarchar(20), datepart(yy, @indate)) END END

Einstieg

Dies ist ein Beispiel fr eine benutzerdefinierte Skalarfunktion.

Aufrufen der Funktion


SELECT dbo.fn_DateFormat(GETDATE(), ':') SELECT dbo.fn_DateFormat(GETDATE(), ':')

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine benutzerdefinierte Skalarfunktion entsprecht einer integrierten Funktion. Einmal erstellt, knnen Sie sie immer wieder verwenden. Beispiel In diesem Beispiel wird eine benutzerdefinierte Funktion erstellt, die Datum und Spaltentrennzeichen als Variablen erhlt und das Datum als eine Zeichenfolge neu formatiert.
USE Northwind GO CREATE FUNCTION fn_DateFormat (@indate datetime, @separator char(1)) RETURNS Nchar(20) AS BEGIN RETURN CONVERT(Nvarchar(20), datepart(mm,@indate)) + @separator + CONVERT(Nvarchar(20), datepart(dd, @indate)) + @separator + CONVERT(Nvarchar(20), datepart(yy, @indate)) END

Dieses Beispiel zeigt, wie eine nicht deterministische Funktion wie GETDATE() beim Aufrufen einer benutzerdefinierten Funktion verwendet werden kann, obwohl sie nicht in einer benutzerdefinierten Funktion verwendet werden kann.

Methodischer Hinweis

Sie rufen eine benutzerdefinierte Skalarfunktion genau so wie eine integrierte Funktion auf.
SELECT dbo.fn_DateFormat(GETDATE(), ':')

12

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Verwenden einer Funktion mit mehreren Anweisungen und Tabellenrckgabe


Beschreiben Sie die Arbeitsweise einer Funktion mit mehreren Anweisungen und Tabellenrckgabe.

Thema

BEGIN und END schlieen mehrere Anweisungen ein Die RETURNS-Klausel gibt tableals Datentyp an Die RETURNS-Klausel benennt und definiert die Tabelle

Einstieg

Eine Funktion mit mehreren Anweisungen und Tabellenrckgabe ist eine Kombination aus einer Sicht und einer gespeicherten Prozedur.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine Funktion mit mehreren Anweisungen und Tabellenrckgabe ist eine Kombination aus einer Sicht und einer gespeicherten Prozedur. Sie knnen benutzerdefinierte Funktionen, die eine Tabelle zurckgeben, verwenden, um gespeicherte Prozeduren oder Sichten zu ersetzen. Eine Funktion mit Tabellenrckgabe kann (wie eine gespeicherte Prozedur) eine komplexe Logik und mehrere Transact-SQL-Anweisungen zum Erstellen einer Tabelle verwenden. Wie eine Sicht knnen Sie auch eine Funktion mit Tabellenrckgabe in der FROM-Klausel einer Transact-SQL-Anweisung verwenden. Beachten Sie beim Verwenden einer Funktion mit mehreren Anweisungen und Tabellenrckgabe die folgenden Punkte: BEGIN und END begrenzen den Hauptteil der Funktion. Die RETURNS-Klausel gibt table als Datentyp fr den Rckgabewert an. Die RETURNS-Klausel definiert einen Namen und das Format der Tabelle. Der Gltigkeitsbereich des Namens der Rckgabevariablen ist lokal zur Funktion.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

13

Beispiel fr eine Funktion mit mehreren Anweisungen und Tabellenrckgabe


Thema
Stellen Sie ein Beispiel fr eine Funktion mit mehreren Anweisungen und Tabellenrckgabe fr die Gruppendiskussion bereit.

Erstellen der Funktion


USE Northwind USE Northwind GO GO CREATE FUNCTION fn_Employees (@length nvarchar(9)) CREATE FUNCTION fn_Employees (@length nvarchar(9)) RETURNS @fn_Employees table RETURNS @fn_Employees table (EmployeeID int PRIMARY KEY NOT NULL, (EmployeeID int PRIMARY KEY NOT NULL, [Employee Name] nvarchar(61) NOT NULL) [Employee Name] nvarchar(61) NOT NULL) AS AS BEGIN BEGIN @length = 'ShortName' IF @length = 'ShortName' IF INSERT @fn_Employees SELECT EmployeeID, LastName INSERT @fn_Employees SELECT EmployeeID, LastName FROM Employees FROM Employees ELSE IF @length = 'LongName' ELSE IF @length = 'LongName' INSERT @fn_Employees SELECT EmployeeID, INSERT @fn_Employees SELECT EmployeeID, (FirstName + ' ' + LastName) FROM Employees (FirstName + ' ' + LastName) FROM Employees RETURN RETURN END END

Einstieg

Dies ist ein Beispiel fr eine Funktion mit mehreren Anweisungen und Tabellenrckgabe.

Aufrufen der Funktion


SELECT * FROM dbo.fn_Employees('LongName') SELECT * FROM dbo.fn_Employees('LongName') Oder Oder SELECT * FROM dbo.fn_Employees('ShortName') SELECT * FROM dbo.fn_Employees('ShortName')

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Erstellen von Funktionen knnen Sie viele Anweisungen verwenden, mit denen komplexe Operationen durchgefhrt werden. Beispiel In diesem Beispiel wird eine Funktion mit mehreren Anweisungen und Tabellenrckgabe erstellt, die abhngig vom bereitgestellten Parameter den Nachnamen oder den Vornamen und den Nachnamen eines Mitarbeiters zurckgibt.
USE Northwind GO CREATE FUNCTION fn_Employees (@length nvarchar(9)) RETURNS @fn_Employees TABLE (EmployeeID int PRIMARY KEY NOT NULL, [Employee Name] Nvarchar(61) NOT NULL) AS BEGIN IF @length = 'ShortName' INSERT @fn_Employees SELECT EmployeeID, LastName FROM Employees ELSE IF @length = 'LongName' INSERT @fn_Employees SELECT EmployeeID, (FirstName + ' ' + LastName) FROM Employees RETURN END

Sie knnen die Funktion anstelle einer Tabelle oder Sicht aufrufen.
SELECT * FROM dbo.fn_Employees('LongName')

Oder
SELECT * FROM dbo.fn_Employees('ShortName')

14

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Verwenden einer Inlinefunktion mit Tabellenrckgabe


Beschreiben Sie die Arbeitsweise einer Inlinefunktion mit Tabellenrckgabe.

Thema

Inhalt der Funktion ist eine SELECT-Anweisung BEGIN und END werden nicht verwendet Die RETURNS-Klausel gibt tableals Datentyp an Das Format wird durch das Resultset definiert

Einstieg

Eine Inlinefunktion mit Tabellenrckgabe kann nur eine einzige SELECTAnweisung enthalten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Benutzerdefinierte Inlinefunktionen geben eine Tabelle zurck. Auf sie wird ebenso wie auf Sichten in der FROM-Klausel verwiesen. Beachten Sie beim Verwenden von benutzerdefinierten Inlinefunktionen die folgenden Punkte: Die RETURN-Klausel enthlt eine einzige SELECT-Anweisung in Klammern. Das Resultset der SELECT-Anweisung bildet die Tabelle, die von der Funktion zurckgegeben wird. Fr die SELECT-Anweisung in einer Inlinefunktion gelten die gleichen Einschrnkungen wie fr SELECT-Anweisungen in Sichten. BEGIN und END begrenzen den Hauptteil der Funktion nicht. RETURNS gibt table als Datentyp fr den Rckgabewert an. Das Format der Rckgabevariablen muss nicht definiert werden, da es durch das Format des Resultsets der SELECT-Anweisung in der RETURNKlausel festgelegt wird.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

15

Beispiel fr eine Inlinefunktion mit Tabellenrckgabe


Thema
Stellen Sie ein Beispiel fr eine Inlinefunktion mit Tabellenrckgabe fr die Gruppendiskussion bereit.

Erstellen der Funktion


USE Northwind USE Northwind GO GO CREATE FUNCTION fn_CustomerNamesInRegion CREATE FUNCTION fn_CustomerNamesInRegion ( @RegionParameter nvarchar(30) ) ( @RegionParameter nvarchar(30) ) RETURNS table RETURNS table AS AS RETURN ( RETURN ( SELECT CustomerID, CompanyName SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers FROM Northwind.dbo.Customers WHERE Region = @RegionParameter WHERE Region = @RegionParameter ) )

Einstieg

Dies ist ein Beispiel fr eine Inlinefunktion mit Tabellenrckgabe.

Aufrufen der Funktion mit einem Parameter


SELECT * FROM fn_CustomerNamesInRegion(N'WA') SELECT * FROM fn_CustomerNamesInRegion(N'WA')

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Sie knnen mit Inlinefunktionen die Funktionalitt von parametrisierten Sichten erzielen. Beim Erstellen der Sicht darf kein benutzerdefinierter Parameter in die Sicht eingeschlossen werden. Sie knnen dieses Problem in der Regel lsen, indem Sie eine WHERE-Klausel beim Aufrufen der Sicht bereitstellen. Hierzu muss jedoch mglicherweise eine Zeichenfolge fr die dynamische Ausfhrung erstellt werden. Dies kann die Komplexitt der Anwendung erhhen. Sie knnen mit Hilfe einer Inlinefunktion mit Tabellenrckgabe die Funktionalitt einer parametrisierten Sicht erzielen. In diesem Beispiel wird eine Inlinefunktion mit Tabellenrckgabe erstellt, die einen Region-Wert als Parameter bernimmt.
USE Northwind GO CREATE FUNCTION fn_CustomerNamesInRegion ( @RegionParameter nvarchar(30) ) RETURNS table AS RETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @RegionParameter )

Weisen Sie darauf hin, dass Sichten wie die folgende nicht erstellt werden knnen: CREATE VIEW CustView AS SELECT <fields> FROM Customers WHERE Region = @RegionParameter

Beispiel

16

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Stellen Sie zum Aufrufen der Funktion den Funktionsnamen als FROM-Klausel und einen Region-Wert als Parameter bereit.
SELECT * FROM fn_CustomerNamesInRegion(N'WA')

Tipp Inlinefunktionen knnen die Leistung erheblich steigern, wenn sie mit indizierten Sichten verwendet werden. SQL Server fhrt bei der Indexerstellung komplexe Aggregations- und Verknpfungsoperationen durch. Nachfolgende Abfragen knnen eine Inlinefunktion mit einem Parameter verwenden, um Zeilen aus dem vereinfachten, gespeicherten Resultset zu filtern.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

17

Empfohlene Methoden
Thema
Erlutern Sie die empfohlenen Methoden zum Verwenden von benutzerdefinierten Funktionen.

Verwenden Sie komplexe Skalarfunktionen fr kleine Resultsets Verwenden Sie komplexe Skalarfunktionen fr kleine Resultsets

Einstieg

Die folgenden Tipps sind empfohlene Methoden zum Verwenden von benutzerdefinierten Funktionen.

Verwenden Sie Funktionen mit mehreren Anweisungen Verwenden Sie Funktionen mit mehreren Anweisungen anstelle von gespeicherten Prozeduren, die Tabellen zurckgeben anstelle von gespeicherten Prozeduren, die Tabellen zurckgeben Verwenden Sie Inlinefunktionen, um Sichten mit Hilfe von Parametern Verwenden Sie Inlinefunktionen, um Sichten mit Hilfe von Parametern zu erstellen zu erstellen

Verwenden Sie Inlinefunktionen, um Sichten zu filtern Verwenden Sie Inlinefunktionen, um Sichten zu filtern

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden sollen Ihnen beim Implementieren von benutzerdefinierten Funktionen helfen: Verwenden Sie komplexe Skalarfunktionen fr kleine Resultsets. Benutzerdefinierte Funktionen stellen eine Methode bereit, komplexe Zusammenhnge in einer einfachen Abfrage zusammenzufassen. Wenn aber nicht alle Benutzer der Funktion die Komplexitt der zugrunde liegenden Berechnung verstehen knnen, kann das zeitaufwendige Berechnungen, die der Benutzer nicht wahrnimmt, zur Folge haben. Wenden Sie eine komplexe Aggregation nicht auf alle Mitglieder eines umfangreichen Resultsets an. Verwenden Sie Funktionen mit mehreren Anweisungen anstelle von gespeicherten Prozeduren, die Tabellen zurckgeben. Das Schreiben von gespeicherten Prozeduren, die Tabellen zurckgeben, in Form von benutzerdefinierten Funktionen mit mehreren Anweisungen kann die Leistung verbessern. Verwenden Sie Inlinefunktionen, um Sichten mit Hilfe von Parametern zu erstellen. Parameter in Inlinefunktionen knnen Verweise auf Tabellen und Sichten vereinfachen. Verwenden Sie Inlinefunktionen, um Sichten zu filtern. Die Verwendung von Inlinefunktionen mit indizierten Sichten kann die Leistung erheblich verbessern. Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema Erstellen von benutzerdefinierten Funktionen Beschreiben der Aufgaben und Typen von benutzerdefinierten Funktionen Definition und Liste der deterministischen und nicht deterministischen Funktionen Suchbegriff "CREATE FUNCTION" "Benutzerdefinierte Funktionen" "Nicht deterministische Funktionen"

18

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

bungseinheit A: Erstellen von benutzerdefinierten Funktionen


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen Sie benutzerdefinierte Funktionen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von benutzerdefinierten Skalarfunktionen. Erstellen von benutzerdefinierten Funktionen mit mehreren Anweisungen und Tabellenrckgabe. Erstellen von benutzerdefinierten Inlinefunktionen mit Tabellenrckgabe.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L10 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L10\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore10.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

19

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

20

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

bung 1 Erstellen einer benutzerdefinierten Skalarfunktion


Die Produkte Ihres Unternehmens unterliegen unterschiedlichen Steuerstzen, die sich aus der Produktkategorie ableiten. Bestimmte Produkte, wie z. B. Getrnke, werden hoch besteuert. Andere Produkte, wie z. B. Gewrze, sind steuerfrei. Sie haben sich entschlossen, eine benutzerdefinierte Funktion zu erstellen, in der die gesamte Besteuerungslogik zusammengefasst wird. Diese benutzerdefinierte Funktion dient der zentralen Verwaltung der Steuerstze, und sie reduziert die Anzahl der Stellen, in denen die Logik wiederholt und verwaltet werden muss. In dieser bung werden Sie ein Skript erstellen und ausfhren, mit dem eine benutzerdefinierte Skalarfunktion erstellt wird. Nachdem Sie die Funktion erstellt haben, testen Sie sie, um die korrekte Funktionsweise zu berprfen. So erstellen Sie eine benutzerdefinierte Skalarfunktion In diesem Verfahren erstellen Sie eine benutzerdefinierte Skalarfunktion, indem Sie eine Skriptdatei ausfhren. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Microsoft Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen und berprfen Sie TaxRate.sql im Ordner C:\Moc\2328A\Labfiles\L10, und fhren Sie das Skript aus. In diesem Skript wird gezeigt, wie mit einer CASE-Anweisung fr jedes Produkt ein Steuersatz abhngig von der Produktkategorie berechnet wird. 5. Erstellen Sie eine benutzerdefinierte Skalarfunktion mit dem Namen fn_TaxRate, um die CASE-Anweisung zu kapseln. Nehmen Sie einen Parameter als @ProdID int an, und geben Sie einen numeric(5,4)-Datentyp zurck. C:\Moc\2328A\Labfiles\L10\Answers\fn_TaxRate.sql ist ein vollstndiges Skript, das diese Funktion enthlt.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

21

So testen Sie die Funktion In diesem Verfahren testen Sie die soeben erstellte Funktion, indem Sie Spalten aus der Products-Tabelle auswhlen. Fhren Sie die folgende SELECT-Anweisung aus, um ProductName, UnitPrice, CategoryID, TaxRate und einen berechneten PriceWithTaxWert aus der Products-Tabelle auszuwhlen:
SELECT ProductName, UnitPrice, CategoryID, ClassNorthwind.dbo.fn_TaxRate(ProductID) AS TaxRate, UnitPrice * ClassNorthwind.dbo. fn_TaxRate(ProductID) AS PriceWithTax FROM Products

Die TaxRate-Spalte sollte jetzt fr jedes Produkt den Wert 1.00, 1.05 oder 1.10 enthalten. Die PriceWithTax-Spalte sollte den Preis inklusive Steuer (ermittelt aus UnitPrice multipliziert mit TaxRate) enthalten.

22

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

bung 2 Erstellen einer benutzerdefinierten Funktion mit mehreren Anweisungen und Tabellenrckgabe
In dieser bung erstellen Sie eine benutzerdefinierte Funktion mit mehreren Anweisungen und Tabellenrckgabe. Die Funktion fragt die EmployeesTabelle in der ClassNorthwind-Datenbank ab und zeigt alle direkten und indirekten Berichte an. So erstellen Sie eine benutzerdefinierte Funktion mit mehreren Anweisungen und Tabellenrckgabe Die Employees-Tabelle in der ClassNorthwind-Datenbank enthlt eine Spalte mit dem Namen ReportsTo. Sie enthlt die Personalnummer (Employee ID) des Vorgesetzten, an den der betreffende Mitarbeiter berichtet. In diesem Beispiel erstellen Sie eine benutzerdefinierte Funktion, die die Personalnummer (EmployeeID) eines Vorgesetzten als Parameter bernimmt und aus der Employee-Tabelle alle Mitarbeiter entnimmt, die an diesen Vorgesetzten berichten. ffnen und berprfen Sie fn_FindReports.sql im Ordner C:\Moc\2328A\Labfiles\L10, und fhren Sie das Skript aus. Dieses Skript erstellt eine Funktion mit dem Namen fn_FindReports, die eine Tabelle der berichtenden Mitarbeiter zurckgibt. So testen Sie die Funktion In diesem Verfahren testen Sie die soeben erstellte Funktion, indem Sie Spalten aus der fn_FindReports-Funktion auswhlen. 1. Fhren Sie die folgende SELECT-Anweisung aus, um EmployeeID-, Name-, Title- und MgrEmployeeID-Spalten aus der fn_FindReportsFunktion auszuwhlen.
SELECT EmployeeID, [Name], Title, MgrEmployeeID FROM dbo.fn_FindReports(5)

Diese SELECT-Anweisung gibt die Mitarbeiter zurck, die an Steven Buchanan, den Vorgesetzten mit der Personalnummer 5 (EmployeeID 5), berichten. 2. Fhren Sie die folgende SELECT-Anweisung aus, um EmployeeID, Name, Title und MgrEmployeeID aus der fn_FindReports-Funktion auszuwhlen.
SELECT EmployeeID, Name, Title, MgrEmployeeID FROM dbo.fn_FindReports(2)

Diese Anweisung gibt eine Tabelle mit den Namen der Mitarbeiter zurck, die an Andrew Fuller, den Vorgesetzten mit der Personalnummer 2 (EmployeeID 2), berichten. C:\Moc\2328A\Labfiles\L10\Answers\Call_fn_FindReports.sql ist ein vollstndiges Skript, das diese Anweisung enthlt.

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

23

bung 3 Erstellen einer benutzerdefinierten Inlinefunktion mit Tabellenrckgabe


In dieser bung erstellen Sie eine benutzerdefinierte Inlinefunktion mit Tabellenrckgabe als Alternative zu einer Sicht. Diese Funktion mit dem Namen fn_LargeFreight nimmt einen Dollarbetrag als Parameter an und gibt Frachtauftrge zurck, deren Frachtkosten den Dollarbetrag bersteigt. So erstellen Sie eine benutzerdefinierte Inlinefunktion mit Tabellenrckgabe Die Orders-Tabelle in der ClassNorthwind-Datenbank enthlt eine Spalte mit dem Namen Freight. Sie enthlt den Dollarbetrag, der fr die Frachtkosten pro Auftrag berechnet wird. Sie mchten die Tabelle mit der Shippers-Tabelle verknpfen, um sowohl die Auftragsdaten als auch die Lieferdaten zurckzugeben. Auerdem mchten Sie das Resultset filtern, sodass nur die Auftrge mit hohen Frachtkosten angezeigt werden. In diesem Verfahren erstellen Sie eine benutzerdefinierte Inlinefunktion mit Tabellenrckgabe, die als parametrisierte Sicht dient. Erstellen Sie eine benutzerdefinierte Inlinefunktion mit Tabellenrckgabe mit dem Namen fn_LargeFreight, die einen Parameter mit dem Namen @FreightAmt vom Datentyp money annimmt und die Ausgabe der folgenden SELECT-Anweisung zurckgibt:
SELECT S.ShipperID, S.CompanyName, O.OrderID, O.ShippedDate, O.Freight FROM Shippers AS S JOIN Orders AS O ON S.ShipperID = O.ShipVia WHERE O.Freight > @FreightAmt

C:\Moc\2328A\Labfiles\L10\Answers\fn_LargeFreight.sql ist ein vollstndiges Skript, das diese Funktion enthlt. So testen Sie die Funktion In diesem Verfahren testen Sie die soeben erstellte Funktion, indem Sie Spalten aus der fn_LargeFreight-Funktion auswhlen. Fhren Sie die folgende SELECT-Anweisung aus, um Zeilen aus der fn_LargeFreight-Funktion auszuwhlen, die Frachtkosten ber 600 $ ausweisen.
SELECT * FROM fn_LargeFreight(600)

C:\Moc\2328A\Labfiles\L10\Answers\Call_fn_LargeFreight.sql ist ein vollstndiges Skript, das diese Anweisung enthlt.

24

Unterrichtseinheit 10: Implementieren von benutzerdefinierten Funktionen

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Arten von benutzerdefinierten Funktionen Definieren von benutzerdefinierten Funktionen Beispiele fr benutzerdefinierte Funktionen

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch.

1. Beschreiben Sie die drei Arten von benutzerdefinierten Funktionen. Skalarfunktionen hneln integrierten Funktionen. Funktion mit mehreren Anweisungen und Tabellenrckgabe hneln gespeicherten Prozeduren. Inlinefuntionen mit Tabellenrckgabe hneln Sichten.

Klren Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

2. Welche integrierten Funktionen drfen im Hauptteil einer benutzerdefinierten Funktion nicht verwendet werden? Nicht deterministische Funktionen, wie z. B. GETDATE(), drfen im Hauptteil nicht verwendet werden.

3. Bei welchen benutzerdefinierten Funktionen mssen Sie die Namen und Datentypen der Ausgabespalten angeben? Skalarfunktionen und benutzerdefinierte Funktionen mit mehreren Anweisungen und Tabellenrckgabe erfordern vollstndige Spaltenbeschreibungen, einschlielich der Definition der Spaltennamen und Datentypen. Inlinefunktionen verwenden die Spaltennamen und die impliziten Datentypen der Ausgabespalten.

Unterrichtseinheit 11: Implementieren von Triggern


Inhalt bersicht Einfhrung in Trigger Definieren von Triggern Funktionsweise von Triggern Beispiele fr Trigger Leistungsaspekte Empfohlene Methoden bungseinheit A: Erstellen von Triggern Lernzielkontrolle 1 2 10 16 31 34 35 36 44

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 11: Implementieren von Triggern

iii

Hinweise fr den Kursleiter


Prsentation: 45 Minuten bungseinheit: 30 Minuten In dieser Unterrichtseinheit erhalten die Kursteilnehmer eine bersicht darber, was Trigger sind und wie sie erstellt werden. Trigger sind hilfreiche Tools fr Datenbankimplementierer, die vordefinierte Aktionen ausfhren mchten, sobald in einer bestimmten Tabelle Daten eingefgt, aktualisiert oder gelscht werden. Sie eignen sich insbesondere fr das Durchsetzen von Geschftsregeln und das Sicherstellen der Datenintegritt. Die folgenden Bestandteile eines Triggers werden erlutert: Die Anweisungen, mit denen er aktiviert wird (INSERT, UPDATE oder DELETE) Die Tabelle, die vom Trigger geschtzt wird Die Manahme, die der Trigger ergreift, wenn er aufgerufen wird In diesem Abschnitt werden darber hinaus auch die Verwendungsmglichkeiten fr Trigger sowie die Aspekte erlutert, die bei der Ermittlung bercksichtigt werden mssen, ob ein Trigger das geeignete Tool zum Ausfhren einer Aufgabe ist. Im nachfolgenden Abschnitt wird das Verfahren zum Erstellen und Lschen von Triggern erlutert, und es werden detaillierte Informationen zu den Funktionsweisen der vier Triggerarten bereitgestellt: INSERT, UPDATE, DELETE und INSTEAD OF. Daneben wird erlutert, wie Trigger gendert werden. Darauf folgt eine Erluterung, wie Trigger funktionieren, einschlielich einiger Beispiele zum Schachteln von Triggern und wie Trigger sinnvoll eingesetzt werden knnen, um Datenintegritt, komplexe referenzielle Integritt und Geschftsregeln durchzusetzen. Die Unterrichtseinheit schliet mit einer Liste von empfohlenen Methoden und Leistungsaspekten, die Implementierer bercksichtigen sollten, wenn sie Trigger erstellen und mit Triggern arbeiten. In der bungseinheit erstellen die Kursteilnehmer Trigger und testen die Effektivitt dieser Trigger. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen eines Triggers. Lschen eines Triggers. ndern eines Triggers. Erlutern der Arbeitsweise verschiedener Trigger. Beurteilen der Leistungsaspekte, die Auswirkungen auf das Verwenden von Triggern haben.

iv

Unterrichtseinheit 11: Implementieren von Triggern

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_11.ppt Die Beispieldatei C:\Moc\2328A\Demo\D11_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

Sonstige Aktivitten
In diesem Abschnitt werden Verfahren bereitgestellt, mit denen interaktive Aktivitten zum Anzeigen und berprfen von Informationen implementiert werden, wie Spiele oder bungen mit Rollenspielen.

Anzeigen der PowerPoint-Animationen


Alle Animationen sind durch ein Hyperlinksymbol in der unteren linken Ecke der Folie gekennzeichnet. So zeigen Sie die Folie Funktionsweise eines INSERT-Triggers an Diese Folie zeigt, wie mit dem INSERT-Trigger eine Zeile eingefgt und wie die inserted-Tabelle verwendet wird. 1. Zeigen Sie die Folie an, die die Order Details-Tabelle zeigt, bevor irgendwelche nderungen vorgenommen wurden. 2. Zeigen Sie die nchste Folie an, auf der eine Zeile gezeigt wird, die in die Tabelle eingefgt wurde. Die Folie wechselt automatisch, um zu zeigen, dass die eingefgte Zeile auch in das Protokoll geschrieben wird und dass sie fr den Trigger und die Benutzer als die inserted-Tabelle zugnglich ist. 3. Zeigen Sie die nchste Folie an, die das Triggerdefinitionsskript zeigt, und erlutern Sie die Aktionen, die von den Anweisungen ausgefhrt werden. 4. Zeigen Sie die letzte Folie an, auf der die Funktionsweise des Triggers zusammengefasst wird.

Unterrichtseinheit 11: Implementieren von Triggern

So zeigen Sie die Folie Funktionsweise eines DELETE-Triggers an Diese Folie zeigt, wie mit dem DELETE-Trigger eine Zeile gelscht und wie die deleted-Tabelle verwendet wird. 1. Zeigen Sie die Folie an, die die Categories-Tabelle zeigt, bevor irgendwelche nderungen vorgenommen wurden. 2. Zeigen Sie die nchste Folie an, die zeigt, dass eine Zeile aus der Tabelle gelscht wurde und nun als die deleted-Tabelle zur Verfgung steht. 3. Zeigen Sie die nchste Folie an, die zeigt, welche Aktionen das Triggerdefinitionsskript und der Trigger in der Products-Tabelle ausfhren. 4. Zeigen Sie die letzte Folie an, auf der die Funktionsweise des Triggers zusammengefasst wird. So zeigen Sie die Folie Funktionsweise eines UPDATE-Triggers an Diese Folie zeigt, wie ein UPDATE-Trigger eine Zeile unter Verwendung der inserted- und deleted-Tabellen ndert. 1. Die Folie zeigt die Employees-Tabelle, fr die eine UPDATE-Anweisung ausgefhrt werden soll, bevor irgendwelche nderungen vorgenommen wurden. Die Folie zeigt darber hinaus auch die Zeilen, die in den insertedund deleted-Tabellen gespeichert werden. 2. Zeigen Sie die nchste Folie an, die das Triggerdefinitionsskript zeigt und die Aktionen illustriert, die vom Trigger ausgelst wurden. 3. Zeigen Sie die letzte Folie an, die die Reihenfolge der Ereignisse bei der Ausfhrung eines Triggers zusammenfasst. So zeigen Sie die Folie Funktionsweise eines INSTEAD OF-Triggers an Diese Folie zeigt, wie ein INSTEAD OF-Trigger verwendet werden kann, um eine Sicht zu aktualisieren und die Daten umzuleiten. 1. Die Folie zeigt eine Sicht, die auf zwei Tabellen basiert. Erlutern Sie, wie die Kunden mit diesen Tabellen nach Lndern aufgeteilt werden. 2. Zeigen Sie die nchste Folie an, auf der die Sicht aktualisiert wird. Erlutern Sie im weiteren Verlauf der Prsentation, wie die Aktualisierung umgeleitet wird und dass in der Customers-Sicht kein Einfgungsversuch erfolgt. 3. Zeigen Sie die letzte Folie an, die die Kernpunkte im Bezug auf INSTEAD OF-Trigger zusammenfasst. So zeigen Sie die Folie Durchsetzen von Geschftsregeln an Diese Folie zeigt, wie die Geschftsregel Produkte mit ausstehenden Bestellungen knnen nicht gelscht werden mit Hilfe eines Triggers durchgesetzt wird. 1. Die Folie zeigt anfnglich den DELETE-Trigger, der die Geschftsregel Produkte mit ausstehenden Bestellungen knnen nicht gelscht werden durchsetzt. Darber hinaus wird die Products-Tabelle angezeigt, aus der ProductID 2 entfernt wird. 2. Zeigen Sie die nchste Folie an, auf der das Produkt mit der ProductID 2 aus der Products-Tabelle entfernt wird.

vi

Unterrichtseinheit 11: Implementieren von Triggern

3. Zeigen Sie die nchste Folie an, die die Order Details-Tabelle mit markierter ProductID 2-Zeile zeigt und so angibt, dass Bestellungen fr dieses Produkt ausstehen. 4. Zeigen Sie die nchste Folie an, in der eine Fehlermeldung ausgegeben wird. 5. Zeigen Sie die letzte Folie an, in der die Zeile ProductID2 wieder in die Products-Tabelle eingefgt wird.

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung in Trigger Geben Sie den Kursteilnehmern eine Definition von Triggern. Weisen Sie darauf hin, dass es sich bei einem Trigger um eine spezielle Form einer gespeicherten Prozedur handelt, die einer bestimmten Tabelle zugewiesen ist. Erlutern Sie dann die drei Kernpunkte: dass Trigger automatisch aufgerufen werden, dass Trigger nur von einer Auslseraktion fr die Triggertabelle aufgerufen werden knnen und dass es sich um Transaktionen handelt. Befassen Sie sich kurz mit den wichtigsten Verwendungsmglichkeiten von Triggern. Mit Triggern knnen nderungen ber eine gesamte Datenbank kaskadiert werden. Hiermit knnen komplexere Geschftsregeln durchgesetzt werden als diejenigen, die mit CHECK-Einschrnkungen oder Regeln definiert werden knnen. Trigger bieten auch die Mglichkeit eines Statusvergleichs vor und nach einer Aktion (Abbild) bei Daten, die mit einer INSERT-, UPDATE- oder DELETE-Anweisung gendert wurden. Erwhnen Sie, dass kaskadierende Aktionen zur Durchsetzung von referenzieller Integritt alternativ zur Verwendung von Triggern eingesetzt werden knnen. Erlutern Sie einige der Aspekte und Richtlinien, die Implementierer bei der Entscheidung bercksichtigen mssen, ob Trigger anstelle anderer Tools verwendet werden sollen. Definieren von Triggern Erlutern Sie die CREATE TRIGGER-Anweisung und die verschiedenen Optionen, die den Benutzern bei der Erstellung eines Triggers zur Verfgung stehen. Betonen Sie, dass die Kursteilnehmer die vollstndige Kontrolle ber die Anweisungen haben, die von einem Trigger ausgefhrt werden, und dass die Benutzer die Auslsung des Triggers nicht umgehen knnen. Gehen Sie auf Berechtigungen, Microsoft SQL Server 2000-Anweisungen, die nicht in Triggerdefinitionen verwendet werden knnen, ein, und erlutern Sie, dass Benutzer die gespeicherte Systemprozedur sp_depends fr eine Tabelle verwenden knnen, um die mit der Tabelle verknpften Triggerinformationen anzuzeigen. Erklren Sie das Verfahren zum ndern eines Triggers und liefern Sie Beispiele fr Situationen (oder lassen Sie die Kursteilnehmer Beispiele nennen), in denen Triggerdefinitionen eventuell gendert werden knnten. Befassen Sie sich auch mit der DROP TRIGGER-Syntax.

Unterrichtseinheit 11: Implementieren von Triggern

vii

Funktionsweise von Triggern Erlutern Sie anhand der Animationen, wie die INSERT-, DELETE-, UPDATE- und INSTEAD OF-Anweisungen arbeiten. Beschreiben Sie die Verwendung von geschachtelten Triggern, und erwhnen Sie, dass Benutzer Schachtelung aktivieren oder deaktivieren knnen. Zeigen Sie Situationen auf, in denen die Kursteilnehmer mglicherweise mit Schachtelung arbeiten mchten, und erlutern Sie die Auswirkungen dieser Vorgehensweise, wie beispielsweise langwierige Transaktionen, Sperren und ROLLBACK TRANSACTION-Anweisungen. Befassen Sie sich abschlieend mit der Funktionsweise von rekursiven Triggern. Weisen Sie die Kursteilnehmer darauf hin, dass zwar ein Trigger sich selbst aufrufen kann, dass in diesem Fall jedoch eine Anweisung zur Beendigungsprfung der Rekursion in die Triggerdefinition aufgenommen werden sollte, damit der Trigger nicht in eine Endlosschleife gert. Beispiele fr Trigger Besprechen und erlutern Sie jedes Beispiel fr einen effektiven Trigger. Leistungsaspekte Erlutern Sie einige Leistungsaspekte, die bei der Verwendung von Triggern bercksichtigt werden mssen.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

viii

Unterrichtseinheit 11: Implementieren von Triggern

Einrichten der bungseinheit


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheit fr diese Unterrichtseinheit.

Einrichtungsanforderung
Fr die bungseinheit in dieser Unterrichtseinheit muss sich die ClassNorthwind-Datenbank in dem fr die bungseinheit erforderlichen Zustand befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der folgenden Aktionen aus: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore11.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore11.cmd ausfhren, damit sichergestellt ist, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

Unterrichtseinheit 11: Implementieren von Triggern

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung in Trigger Definieren von Triggern Funktionsweise von Triggern Beispiele fr Trigger Leistungsaspekte

Einstieg

In dieser Unterrichtseinheit erfahren Sie, wie Trigger erstellt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein Trigger ist eine gespeicherte Prozedur, die ausgefhrt wird, wenn Daten in einer angegebenen Tabelle gendert werden. Trigger werden hufig erstellt, um die referenzielle Integritt oder Konsistenz von logisch verknpften Daten in unterschiedlichen Tabellen durchzusetzen. Da Trigger vom Benutzer nicht umgangen werden knnen, knnen Sie Trigger verwenden, um komplexe Geschftsregeln durchzusetzen, mit denen die Datenintegritt sichergestellt wird. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen eines Triggers. Lschen eines Triggers. ndern eines Triggers. Erlutern der Arbeitsweise verschiedener Trigger. Beurteilen der Leistungsaspekte, die Auswirkungen auf das Verwenden von Triggern haben.

Unterrichtseinheit 11: Implementieren von Triggern

Einfhrung in Trigger
Stellen Sie das Konzept der Triggerobjekte vor.

Thema

Einstieg

Definition von Triggern Verwendungsmglichkeiten von Triggern berlegungen zum Verwenden von Triggern

In diesem Abschnitt erfahren Sie, wann und wie Trigger verwendet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt erhalten Sie eine Einfhrung zu Triggern, und es wird erlutert, wann und wie Trigger verwendet werden.

Unterrichtseinheit 11: Implementieren von Triggern

Definition von Triggern


Stellen Sie das Konzept von Triggern vor, und nennen Sie die Vorteile der Verwendung von Triggern.

Thema

Trigger sind mit einer Tabelle verknpft Trigger werden automatisch aufgerufen Trigger knnen nicht direkt aufgerufen werden Trigger sind Teil einer Transaktion

Einstieg

Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, die bei jedem Versuch, vom Trigger geschtzte Daten zu ndern, automatisch ausgefhrt wird. Trigger sind mit bestimmten Tabellen verbunden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Kernpunkte Ein Trigger ist eine spezielle Form einer gespeicherten Prozedur, die bei jedem Versuch ausgefhrt wird, vom Trigger geschtzte Daten einer Tabelle zu ndern. Trigger sind mit bestimmten Tabellen verbunden.

Ein Trigger ist eine besondere Art von gespeicherter Prozedur. Ein Trigger kann jede beliebige TransactSQL-Anweisung enthalten. Trigger verwenden zum Speichern des Ausfhrungsplanes den Prozedurcache.

Trigger sind mit einer Tabelle verknpft


Trigger werden fr eine bestimmte Tabelle definiert, die als Triggertabelle bezeichnet wird.

Trigger werden automatisch aufgerufen


Bei einem Versuch, Daten in eine Tabelle einzufgen oder Daten in einer Tabelle zu aktualisieren oder zu lschen, wird der Trigger automatisch ausgefhrt, wenn fr die spezielle Aktion ein Trigger fr die Tabelle definiert wurde. Der Trigger kann nicht umgangen werden.

Trigger knnen nicht direkt aufgerufen werden


Im Gegensatz zu gespeicherten Standardsystemprozeduren knnen Trigger nicht direkt aufgerufen werden und keine Parameter bergeben oder annehmen.

Trigger sind Teil einer Transaktion


Methodischer Hinweis
Gehen Sie nicht detailliert auf Transaktionen ein. Transaktionen werden in anderen Unterrichtseinheiten dieses Kurses erlutert.

Der Trigger und die den Trigger auslsende Anweisung werden als eine einzelne Transaktion behandelt, fr die an einer beliebigen Stelle innerhalb des Triggers ein Rollback ausgefhrt werden kann. Beachten Sie bei der Verwendung von Triggern die folgenden Aspekte und Richtlinien: Triggerdefinitionen knnen selbst dann eine ROLLBACK TRANSACTION-Anweisung einschlieen, wenn keine explizite BEGIN TRANSACTION-Anweisung vorhanden ist.

Unterrichtseinheit 11: Implementieren von Triggern

Wenn eine ROLLBACK TRANSACTION-Anweisung vorliegt, wird ein Rollback fr die gesamte Transaktion ausgefhrt. Wenn im Triggerskript auf die ROLLBACK TRANSACTION-Anweisung eine Anweisung folgt, wird diese Anweisung ausgefhrt. Daher kann es notwendig sein, eine RETURN-Klausel in einer IF-Anweisung zu verwenden, um die Verarbeitung anderer Anweisungen zu verhindern. Wenn ein Trigger, der eine ROLLBACK TRANSACTION-Anweisung enthlt, innerhalb einer benutzerdefinierten Transaktion ausgelst wird, wird durch die ROLLBACK TRANSACTION-Anweisung ein Rollback fr die gesamte Transaktion durchgefhrt. Ein Trigger, der innerhalb eines Batches zur Durchfhrung einer ROLLBACK TRANSACTION-Anweisung ausgefhrt wird, bricht die Ausfhrung des Batches ab; die nachfolgenden Anweisungen im Batch werden nicht ausgefhrt. Sie sollten die Verwendung von ROLLBACK TRANSACTION im Triggercode minimal halten oder ganz vermeiden. Mit dem Rollback einer Transaktion ergibt sich ein zustzlicher Aufwand, da alle Arbeiten rckgngig gemacht werden mssen, die bis zu diesem Punkt in der Transaktion ausgefhrt wurden. Dies hat einen negativen Einfluss auf die Leistung. Die Daten sollten daher auerhalb der Transaktion berprft werden. Starten Sie die Transaktion erst dann, wenn die berprfung vollstndig abgeschlossen ist. Der Benutzer, der den Trigger aufruft, muss auerdem berechtigt sein, alle Anweisungen fr alle Tabellen auszufhren.

Unterrichtseinheit 11: Implementieren von Triggern

Verwendungsmglichkeiten von Triggern


Thema
Stellen Sie die Vorteile der Verwendung von Triggern vor.

Einstieg

Kaskadieren von nderungen ber verknpfte Tabellen in einer Datenbank Durchsetzen einer komplexeren Datenintegritt als bei einer CHECK-Einschrnkung Festlegen benutzerdefinierter Fehlermeldungen Verwalten nicht normalisierter Daten Statusvergleiche vor und nach dem ndern von Daten

Das Verwenden von Triggern bietet mehrere Vorteile.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Die beste Verwendungsmglichkeit von Triggern liegt in der Sicherstellung der Datenintegritt auf der unteren Ebene, nicht im Zurckgeben von Abfrageergebnissen. Der Hauptvorteil von Triggern besteht darin, dass sie eine komplexe Verarbeitungslogik enthalten knnen. Mit Triggern knnen nderungen ber verknpfte Tabellen in einer Datenbank kaskadiert werden, es kann eine weitaus komplexere Datenintegritt als mit einer CHECK-Einschrnkung durchgesetzt werden, es knnen benutzerdefinierte Fehlermeldungen definiert werden, nicht normalisierte Daten knnen beibehalten werden, und es kann ein Statusvergleich vor und nach dem ndern von Daten vorgenommen werden.

Weisen Sie darauf hin, dass mit Triggern Aktualisierungen und Lschvorgnge ber verknpfte Tabellen in einer Datenbank kaskadiert werden knnen. Erwhnen Sie, dass viele Datenbanken, die mit frheren Versionen von SQL Server erstellt wurden, diesen Triggertyp enthalten.

Kaskadieren von nderungen ber verknpfte Tabellen in einer Datenbank


Sie knnen einen Trigger verwenden, um Aktualisierungen und Lschvorgnge ber verknpfte Tabellen in einer Datenbank zu kaskadieren. Mit einem DELETE-Trigger fr die Products-Tabelle in der Northwind-Datenbank knnen beispielsweise bereinstimmende Zeilen in anderen Tabellen gelscht werden, wenn diese Tabellen Zeilen enthalten, die mit den gelschten Werten fr ProductID bereinstimmen. Um diesen Vorgang durchzufhren, werden ber den Trigger die Zeilen in der Order Details-Tabelle mit Hilfe der ProductID-Fremdschlsselspalte lokalisiert.

Durchsetzen einer komplexeren Datenintegritt als bei einer CHECKEinschrnkung


Im Gegensatz zu CHECK-Einschrnkungen knnen Trigger auf Spalten in anderen Tabellen verweisen. Beispielsweise knnen Sie einen INSERT-Trigger fr die Order Details-Tabelle definieren, der die UnitsInStock-Spalte in der Products-Tabelle auf dieses Element berprft. Mit dem Trigger knnte ermittelt werden, dass die maximale Bestellmenge drei Einheiten betrgt, wenn der Wert von UnitsInStock kleiner als 10 ist. Diese Art der Prfung verweist auf Spalten in anderen Tabellen. Der Verweis auf Spalten in anderen Tabellen ist in einer CHECK-Einschrnkung nicht zulssig.

Unterrichtseinheit 11: Implementieren von Triggern

Mit Hilfe von Triggern knnen Sie eine komplexe referenzielle Integritt durchsetzen, indem Sie folgende Aufgaben ausfhren: Durchfhren von Aktionen oder Kaskadieren von Aktualisierungen oder Lschvorgngen. Eine referenzielle Integritt kann definiert werden, indem die Einschrnkungen FOREIGN KEY und REFERENCE zusammen mit der CREATE TABLE-Anweisung verwendet werden. Trigger sind ntzlich, um sicherzustellen, dass entsprechende Aktionen durchgefhrt werden, wenn ein Kaskadieren von Lschvorgngen oder Aktualisierungen erfolgen muss. Wenn Einschrnkungen fr die Triggertabelle vorhanden sind, werden diese vor der Ausfhrung des Triggers berprft. Wenn Einschrnkungen verletzt werden, wird der Trigger nicht ausgefhrt. Erstellen mehrzeiliger Trigger. Wenn mehr als eine Zeile eingefgt, aktualisiert oder gelscht wird, mssen Sie einen Trigger erstellen, der mehrere Zeilen verarbeiten kann. Durchsetzen einer referenziellen Integritt zwischen Datenbanken.

Festlegen benutzerdefinierter Fehlermeldungen


Gelegentlich kann der Einsatz benutzerdefinierter Fehlermeldungen, die den Status einer Aktion anzeigen, fr Ihre Implementation vorteilhaft sein. Mit Hilfe von Triggern knnen Sie vordefinierte oder dynamische benutzerdefinierte Fehlermeldungen aufrufen, wenn bei der Ausfhrung eines Triggers bestimmte Umstnde auftreten.

Verwalten nicht normalisierter Daten


Trigger knnen verwendet werden, um die Datenintegritt auf der unteren Ebene in nicht normalisierten Datenbankumgebungen aufrechtzuerhalten. Das Verwalten nicht normalisierter Daten unterscheidet sich vom Kaskadieren darin, dass sich Kaskadieren normalerweise auf die Beibehaltung der Beziehungen zwischen primren und Fremdschlsselwerten bezieht. Bei nicht normalisierten Daten handelt es sich in der Regel um eigens erstellte, abgeleitete oder redundante Datenwerte. In den folgenden Fllen mssen Sie einen Trigger verwenden: Wenn fr die referenzielle Integritt andere Aspekte als eine exakte bereinstimmung erforderlich sind, z. B. das Verwalten abgeleiteter Daten (Verkufe in diesem Jahr) oder das Hinzufgen von Attributen zu Spalten (Angabe von Y oder N, um anzuzeigen, ob ein Produkt verfgbar ist). Wenn Sie benutzerdefinierte Meldungen und komplexe Fehlermeldungen bentigen. Anmerkung Redundante Daten und abgeleitete Daten verlangen in der Regel den Einsatz von Triggern.

Unterrichtseinheit 11: Implementieren von Triggern

Statusvergleiche vor und nach dem ndern von Daten


Die meisten Trigger bieten die Mglichkeit, auf die nderungen zu verweisen, die ber die Anweisungen INSERT, UPDATE oder DELETE an den Daten vorgenommen werden. Dies ermglicht es Ihnen, auf die Zeilen zu verweisen, die von den nderungsanweisungen innerhalb des Triggers betroffen sind. Anmerkung Fehler im Rahmen von Einschrnkungen, Regeln und Standardwerten knnen ausschlielich ber standardisierte Systemfehlermeldungen ausgegeben werden. Wenn die Anwendung benutzerdefinierte Meldungen erfordert (oder diese von Vorteil wren) und eine komplexere Fehlerbehandlung bentigt, mssen Sie einen Trigger verwenden.

Unterrichtseinheit 11: Implementieren von Triggern

berlegungen zum Verwenden von Triggern


Erlutern Sie die verschiedenen Aspekte, die die Kursteilnehmer bei der Verwendung von Triggern bercksichtigen mssen.

Thema

Trigger sind reaktiv, Einschrnkungen sind proaktiv Einschrnkungen werden zuerst geprft Tabellen knnen mehrere Trigger fr beliebige Aktionen besitzen Tabellenbesitzer knnen den ersten und letzten auszulsenden Trigger angeben Sie mssen ber die Berechtigung zum Ausfhren smtlicher in einer Triggerdefinition verwendeten Anweisungen verfgen Der Tabellenbesitzer kann keine AFTER-Trigger fr Sichten oder temporre Tabellen erstellen

Einstieg

Beachten Sie bei der Arbeit mit Triggern die folgenden Aspekte und Richtlinien.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Beachten Sie bei der Arbeit mit Triggern die folgenden Aspekte und Richtlinien: Die meisten Trigger sind reaktiv, wohingegen Einschrnkungen und der INSTEAD OF-Trigger proaktiv sind. Trigger werden ausgefhrt, nachdem eine INSERT-, UPDATE- oder DELETE-Anweisung fr die Tabelle, fr die der Trigger definiert ist, durchgefhrt wurde. Beim Aktualisieren einer Zeile in einer Tabelle durch eine UPDATE-Anweisung wird beispielsweise der Trigger fr diese Tabelle automatisch ausgefhrt. Einschrnkungen werden vor der Ausfhrung einer INSERT-, UPDATE- oder DELETE-Anweisung berprft. Einschrnkungen werden zuerst geprft. Wenn Einschrnkungen fr die Triggertabelle vorhanden sind, werden diese vor der Ausfhrung des Triggers berprft. Wenn Einschrnkungen verletzt werden, wird der Trigger nicht ausgefhrt. Tabellen knnen mehrere Trigger fr beliebige Aktionen besitzen. SQL Server 2000 ermglicht das Schachteln von mehreren Triggern fr eine einzelne Tabelle. Fr eine Tabelle knnen mehrere Trigger definiert werden. Die einzelnen Trigger knnen so definiert werden, dass entweder eine einzelne Aktion oder mehrere Aktionen durchgefhrt werden. Tabellenbesitzer knnen den ersten und letzten auszulsenden Trigger angeben. Wenn fr eine Tabelle mehrere Trigger definiert wurden, kann der Tabellenbesitzer die gespeicherte Systemprozedur sp_settriggerorder verwenden, um den ersten und letzten auszulsenden Trigger anzugeben. Fr die verbleibenden Trigger kann keine Auslsungsreihenfolge festgelegt werden.

Achten Sie darauf, alle in der Aufzhlung befindlichen Punkte zu besprechen, auch wenn nicht alle auf der Folie angezeigt werden.

Unterrichtseinheit 11: Implementieren von Triggern

Sie mssen ber die Berechtigung zum Ausfhren smtlicher in einer Triggerdefinition verwendeten Anweisungen verfgen. Nur der Tabellenbesitzer sowie Mitglieder der festen Serverrolle sysadmin und Mitglieder der festen Datenbankrollen db_owner und db_ddladmin knnen Trigger fr diese Tabelle erstellen und lschen. Diese Berechtigungen sind nicht bertragbar. Darber hinaus muss der Ersteller des Triggers ebenfalls ber die Berechtigung zum Ausfhren aller Anweisungen fr smtliche betroffenen Tabellen verfgen. Wenn Berechtigungen fr einen Teil der Transact-SQL-Anweisungen innerhalb des Triggers verweigert werden, wird ein Rollback fr die gesamte Transaktion ausgefhrt. Tabellenbesitzer knnen keine AFTER-Trigger fr Sichten oder temporre Tabellen erstellen. Trigger knnen jedoch auf Sichten und temporre Tabellen verweisen. Der Tabellenbesitzer kann INSTEAD OF-Trigger fr Sichten und Tabellen erstellen; in diesem Fall werden die Aktualisierungstypen, die von einer Sicht untersttzt werden, von den INSTEAD OF-Triggern erheblich erweitert. Methodischer Hinweis Trigger sollten nicht zur Ausgabe von Resultsets verwendet werden. Trigger enthalten Transact-SQL-Anweisungen in einer Weise, die mit der von gespeicherten Prozeduren vergleichbar ist. Wie gespeicherte Prozeduren knnen auch Trigger Anweisungen enthalten, die ein Resultset zurckgeben. Das Einschlieen von Anweisungen in Triggern, durch die Werte ausgegeben werden, wird jedoch nicht empfohlen, da die Ausgabe eines Resultsets bei der Ausfhrung einer UPDATE-, INSERT- oder DELETE-Anweisung von Benutzern und Entwicklern nicht erwartet wird. Trigger knnen mehrzeilige Aktionen verarbeiten. Eine INSERT-, UPDATE- oder DELETE-Aktion, durch die ein Trigger ausgelst wird, kann mehrere Zeilen betreffen. Sie knnen einen der folgenden Schritte ausfhren: Gleichzeitiges Verarbeiten smtlicher Zeilen. In diesem Fall mssen alle betroffenen Zeilen den Triggerkriterien entsprechen, damit eine Aktion stattfinden kann. Zulassen bedingter Aktionen. Wenn Sie beispielsweise drei Kunden aus der Customers-Tabelle lschen mchten, knnen Sie einen Trigger definieren, um sicherzustellen, dass zu den einzelnen gelschten Kunden keine aktiven Bestellungen oder offenen Rechnungen vorhanden sind. Wenn fr einen der drei Kunden eine offene Rechnung vorhanden ist, wird dieser Kunde nicht gelscht. Die anderen beiden Kunden, die die Voraussetzungen erfllen, werden jedoch gelscht. Mit Hilfe der Systemfunktion @@ROWCOUNT knnen Sie ermitteln, ob mehrere Zeilen betroffen sind.
Erinnern Sie die Kursteilnehmer daran, dass Trigger keine Resultsets ausgeben oder Parameter bergeben knnen.

10

Unterrichtseinheit 11: Implementieren von Triggern

Definieren von Triggern


Stellen Sie die Themen vor, die in diesem Abschnitt behandelt werden: Erstellen, ndern und Lschen von Triggern.

Thema

Erstellen von Triggern ndern und Lschen von Triggern

Einstieg

Da Sie jetzt wissen, was Trigger sind, befassen wir uns nun mit dem Erstellen, ndern und Lschen von Triggern.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird das Erstellen, ndern und Lschen von Triggern behandelt. Darber hinaus werden die erforderlichen Berechtigungen sowie die Richtlinien besprochen, die beim Definieren von Triggern bercksichtigt werden mssen.

Unterrichtseinheit 11: Implementieren von Triggern

11

Erstellen von Triggern


Thema
Stellen Sie die CREATE TRIGGER-Syntax vor.

Einstieg

Entsprechende Berechtigungen sind erforderlich Bestimmte Anweisungen knnen nicht verwendet werden
Use Northwind Use Northwind GO GO CREATE TRIGGER Empl_Delete ON Employees CREATE TRIGGER Empl_Delete ON Employees FOR DELETE FOR DELETE AS AS IF (SELECT COUNT(*) FROM Deleted) > 1 IF (SELECT COUNT(*) FROM Deleted) > 1 BEGIN BEGIN RAISERROR( RAISERROR( 'You cannot delete more than one employee at a time.', 16, 1) 'You cannot delete more than one employee at a time.', 16, 1) ROLLBACK TRANSACTION ROLLBACK TRANSACTION END END

Beachten Sie beim Erstellen von Triggern diese Aspekte und Richtlinien.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Erstellen Sie Trigger mit Hilfe der CREATE TRIGGER-Anweisung. In der Anweisung wird die Tabelle angegeben, fr die der Trigger definiert wird, die Ereignisse, bei denen der Trigger ausgefhrt wird, und die besonderen Anweisungen fr den Trigger. Syntax CREATE TRIGGER [owner.] trigger_name ON [owner.] table_name [WITH ENCRYPTION] {FOR | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} AS [IF UPDATE (column_name)...] [{AND | OR} UPDATE (column_name)...] sql_statements} Wenn eine FOR UPDATE-Aktion angegeben wird, kann die Aktion mit Hilfe der IF UPDATE (column_name)-Klausel auf eine bestimmte Spalte gerichtet werden, die aktualisiert wird. Sowohl FOR als auch AFTER sind quivalente Syntaxelemente, mit denen der gleiche Triggertyp erstellt wird, der nach der initialisierenden Aktion (INSERT, UPDATE oder DELETE) ausgelst wird. Mit INSTEAD OF-Triggern wird die Triggeraktion abgebrochen und stattdessen eine neue Funktion ausgefhrt. Beim Erstellen eines Triggers werden Informationen ber den Trigger in die Systemtabellen sysobjects und syscomments eingefgt. Wird ein Trigger erstellt, der denselben Namen wie ein bereits vorhandener Trigger besitzt, wird der vorhandene Trigger durch den neuen Trigger berschrieben. Anmerkung Das Hinzufgen benutzerdefinierter Trigger in Systemtabellen wird von SQL Server nicht untersttzt. Sie knnen daher keine Trigger fr Systemtabellen erstellen.

12

Unterrichtseinheit 11: Implementieren von Triggern

Entsprechende Berechtigungen sind erforderlich


Tabellenbesitzer und Mitglieder der Rollen db_owner und sysadmin besitzen die Berechtigung zum Erstellen von Triggern. Um Situationen zu vermeiden, in denen der Besitzer einer Sicht und der Besitzer einer zugrunde liegenden Tabelle nicht identisch sind, wird empfohlen, dass der dbo-Benutzer smtliche Objekte in einer Datenbank besitzt. Da ein Benutzer Mitglied mehrerer Rollen sein kann, geben Sie beim Erstellen des Objekts immer den dbo-Benutzer als Besitzername an. Andernfalls wird beim Erstellen des Objekts Ihr Benutzername als Besitzer festgelegt.

Bestimmte Anweisungen knnen nicht verwendet werden


Unter SQL Server sind die folgenden Anweisungen in einer Triggerdefinition nicht zulssig: ALTER DATABASE CREATE DATABASE DISK INIT DISK RESIZE DROP DATABASE LOAD DATABASE LOAD LOG RECONFIGURE RESTORE DATABASE RESTORE LOG Um zu ermitteln, fr welche Tabellen Trigger vorhanden sind, fhren Sie die gespeicherte Systemprozedur sp_depends <tablename> aus. Um eine Triggerdefinition anzuzeigen, fhren Sie die gespeicherte Systemprozedur sp_helptext <triggername> aus. Um zu ermitteln, welche Trigger fr eine bestimmte Tabelle vorhanden sind, und um deren Aktionen anzuzeigen, fhren Sie die gespeicherte Systemprozedur sp_helptrigger <tablename> aus.

Unterrichtseinheit 11: Implementieren von Triggern

13

Beispiel

Im folgenden Beispiel wird ein Trigger fr die Employees-Tabelle erstellt, der verhindert, dass Benutzer mehr als einen Mitarbeiter gleichzeitig lschen. Der Trigger wird jedes Mal ausgelst, wenn ein Datensatz oder eine Datensatzgruppe aus der Tabelle gelscht wird. Der Trigger prft die Anzahl der zu lschenden Datenstze, indem er die Deleted-Tabelle abfragt. Wenn mehr als ein Datensatz gelscht werden soll, gibt der Trigger eine benutzerdefinierte Fehlermeldung aus und fhrt ein Rollback der Transaktion durch.
Use Northwind GO CREATE TRIGGER Empl_Delete ON NewEmployees FOR DELETE AS IF (SELECT COUNT(*) FROM Deleted) > 1 BEGIN RAISERROR( 'You cannot delete more than one employee at a time.', 16, 1) ROLLBACK TRANSACTION END

Die folgende DELETE-Anweisung lst den Trigger aus und verhindert die Transaktion.
DELETE FROM Employees WHERE EmployeeID > 6

Die folgende DELETE-Anweisung lst den Trigger aus und ermglicht die Transaktion.
DELETE FROM Employees WHERE EmployeeID = 6

14

Unterrichtseinheit 11: Implementieren von Triggern

ndern und Lschen von Triggern


Thema
Stellen Sie das Konzept zum ndern eines Triggers vor.

ndern eines Triggers ndern der Definition ohne Lschen des Triggers Deaktivieren und Aktivieren eines Triggers
USE Northwind USE Northwind GO GO ALTER TRIGGER Empl_Delete ON Employees ALTER TRIGGER Empl_Delete ON Employees FOR DELETE FOR DELETE AS AS IF (SELECT COUNT(*) FROM Deleted) > 6 IF (SELECT COUNT(*) FROM Deleted) > 6 BEGIN BEGIN RAISERROR( RAISERROR( 'You cannot delete more than six employees at a time.', 16, 1) 'You cannot delete more than six employees at a time.', 16, 1) ROLLBACK TRANSACTION ROLLBACK TRANSACTION END END

Einstieg

Wenn Sie die Definition eines vorhandenen Triggers ndern mssen, knnen Sie diese ndern, ohne den Trigger zu lschen.

Lschen eines Triggers


**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen einen Trigger ndern oder lschen.

ndern eines Triggers


Wenn Sie die Definition eines vorhandenen Triggers ndern mssen, knnen Sie diese ndern, ohne den Trigger zu lschen.

ndern der Definition ohne Lschen des Triggers


Das ndern der Definition ersetzt die Definition des vorhandenen Triggers durch die neue Definition. Die durch den Trigger ausgelste Aktion kann ebenfalls gendert werden. Wenn Sie beispielsweise einen Trigger fr INSERT erstellen und dann die Aktion in UPDATE ndern, wird der genderte Trigger bei jeder Aktualisierung der Tabelle ausgefhrt. Mit der verzgerten Namensauflsung knnen Sie Verweise auf Tabellen und Sichten in einem Trigger erstellen, die noch nicht existieren. Wenn das Objekt bei der Erstellung eines Triggers noch nicht vorhanden ist, wird eine Warnmeldung ausgegeben und die Triggerdefinition von SQL Server sofort aktualisiert. Syntax ALTER TRIGGER trigger_name ON table [WITH ENCRYPTION] {{FOR {[,] [DELETE] [,] [UPDATE] [,][INSERT]} [NOT FOR REPLICATION] AS sql_statement [...n] } | {FOR {[,] [INSERT] [,] [UPDATE]} [NOT FOR REPLICATION] AS IF UPDATE (column) [{AND | OR} UPDATE (column) [,...n]] sql_statement [...n] } }

Unterrichtseinheit 11: Implementieren von Triggern

15

Beispiel

In diesem Beispiel wird der im vorherigen Beispiel erstellte DELETE-Trigger gendert. Der Triggerinhalt wird dahingehend gendert, dass der Grenzwert fr zu lschende Datenstze von einen auf sechs Datenstze heraufgesetzt wird.
Use Northwind GO ALTER TRIGGER Empl_Delete ON Employees FOR DELETE AS IF (SELECT COUNT(*) FROM Deleted) > 6 BEGIN RAISERROR( 'You cannot delete more than six employees at a time.', 16, 1) ROLLBACK TRANSACTION END

Deaktivieren und Aktivieren eines Triggers


Sie knnen einen bestimmten Trigger oder smtliche Trigger fr eine Tabelle deaktivieren oder aktivieren. Wenn ein Trigger deaktiviert ist, ist dieser immer noch fr die Tabelle definiert. Wenn jedoch eine INSERT-, UPDATE- oder DELETE-Anweisung fr die Tabelle durchgefhrt wird, werden die Aktionen im Trigger nicht ausgefhrt, es sei denn, der Trigger wird wieder aktiviert. Sie knnen Trigger ber die ALTER TABLE-Anweisung aktivieren bzw. deaktivieren. Teilsyntax ALTER TABLE table {ENABLE | DISABLE} TRIGGER {ALL | trigger_name[,n]}

Lschen eines Triggers


Sie knnen einen Trigger entfernen, indem Sie ihn lschen. Trigger werden automatisch gelscht, wenn die mit dem Trigger verknpften Tabellen gelscht werden. Die Berechtigung zum Lschen eines Triggers ist standardmig dem Tabellenbesitzer zugewiesen und ist nicht bertragbar. Mitglieder der Rollen sysadmin und db_owner knnen jedoch durch Angabe des Besitzers in der DROP TRIGGER-Anweisung jedes beliebige Objekt lschen. Syntax DROP TRIGGER trigger_name

16

Unterrichtseinheit 11: Implementieren von Triggern

Funktionsweise von Triggern


Geben Sie eine Einfhrung in die Funktionsweise von Triggern.

Thema

Funktionsweise eines INSERT-Triggers Funktionsweise eines DELETE-Triggers Funktionsweise eines UPDATE-Triggers Funktionsweise eines INSTEAD OF-Triggers Funktionsweise von geschachtelten Triggern Rekursive Trigger

Einstieg

Schauen wir uns nun an, wie die verschiedenen Triggertypen funktionieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie sich mit dem Entwerfen von Triggern befassen, sollten Sie unbedingt Kenntnisse ber deren Funktionsweise besitzen. In diesem Abschnitt werden INSERT-, DELETE-, UPDATE-, INSTEAD OF-, geschachtelte und rekursive Trigger erlutert.

Unterrichtseinheit 11: Implementieren von Triggern

17

Funktionsweise eines INSERT-Triggers


Thema
Geben Sie ein Beispiel fr einen INSERT-Trigger.
INSERT-Anweisung fr eine Tabelle, fr die ein INSERT-Trigger Ausgefhrte Triggeraktionen definiert ist
Trigger Code: Trigger Code: INSERT [Order Details] VALUES USE Northwind INSERT [Order Details] VALUES USE Northwind 1 INSERT-Anweisung fr eine Tabelle, fr die ein 1 CREATE 5, 0.2) OrdDet_Insert (10525, 2, 19.00, 5, 0.2) OrdDet_Insert CREATE TRIGGER (10525, 2, 19.00, TRIGGER INSERT-Trigger definiert ist ON [Order Details] ON [Order Details] FOR INSERT Order Details FOR INSERT Order Details AS AS OrderID OrderID INSERT-Anweisung 2 ProtokollierteProductID UnitPrice Quantity Discount 2 UPDATE ProductID UnitPrice Quantity Discount UPDATE P SET P SET UnitsInStock = (P.UnitsInStock I.Quantity) 10522 10 77 0.2 UnitsInStock 31.00 = (P.UnitsInStock I.Quantity) 10522 10 31.00 0.2 FROM Products AS P INNER JOIN Inserted AS I FROM Products9.65 P INNER JOIN Inserted AS I AS 10523 41 99 10523 41 0.15 3 Ausgefhrte Triggeraktionen 0.15 ON P.ProductID 9.65I.ProductID = I.ProductID 3 ON P.ProductID =

Einstieg

Ein INSERT-Trigger wird bei dem Versuch aufgerufen, eine Zeile in eine Tabelle einzufgen, die durch einen Trigger geschtzt wird. Alle Einfgungen werden, wie in dieser Folie dargestellt, in einer speziellen inserted-Tabelle gespeichert.

OrderID ProductID UnitPrice Quantity Discount OrderID ProductID UnitPrice Quantity Discount Protokollierte INSERT- 77 10522 10 31.00 0.2 10522 10 31.00 0.2 Anweisung 10523 41 9.65 9 0.15

Order Details Order Details

10524 10524 10523

77 2

30.00 30.00 19.00

24 0.0 24 0.0 5Products 0.2 Products

ProductID UnitsInStock ProductID UnitsInStock

10523 41 9.65 10524 inserted 30.00 77 10524 inserted 30.00 10523 2 19.00 10523 22 10523

9 0.15 24 0.0 24 0.0 5 19.00 0.2 55 19.00

11 22 33 0.2 0.2 4 4

15 15 10 15 10 65 65 20 20

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Sie knnen einen Trigger so definieren, dass dieser ausgefhrt wird, sobald Daten durch eine INSERT-Anweisung in eine Tabelle eingefgt werden. Wenn ein INSERT-Trigger ausgelst wird, werden sowohl der Triggertabelle als auch der inserted-Tabelle neue Zeilen hinzugefgt. Die inserted-Tabelle ist eine logische Tabelle, die eine Kopie der eingefgten Zeilen enthlt. Die inserted-Tabelle enthlt die protokollierten Einfgeaktionen der INSERTAnweisung. Mit dieser Tabelle knnen Sie auf protokollierte Daten der gestarteten INSERT-Anweisung verweisen. Durch den Trigger kann die insertedTabelle berprft werden, um zu ermitteln, ob bzw. wie die Triggeraktionen ausgefhrt werden sollten. Die Zeilen in der inserted-Tabelle sind immer Duplikate einer oder mehrerer Zeilen in der Triggertabelle. Smtliche Aktivitten im Rahmen von Datennderungen (INSERT-, UPDATEund DELETE-Anweisungen) werden protokolliert, die Informationen im Transaktionsprotokoll knnen jedoch nicht gelesen werden. Die inserted-Tabelle ermglicht es Ihnen jedoch, auf die durch die INSERT-Anweisung verursachten protokollierten nderungen zu verweisen. Anschlieend knnen Sie die nderungen mit den eingefgten Daten vergleichen, um diese zu berprfen bzw. weitere Manahmen zu ergreifen. Sie knnen auch auf eingefgte Daten verweisen, ohne dass die Informationen in Variablen gespeichert sein mssen.

Zeigen Sie den Kursteilnehmern, wie CREATE TRIGGER-Anweisungen schnell gelesen werden knnen, um den Triggernamen, die Tabelle und die Aktion festzustellen. Der gesamte Text unter der ASAnweisung stellt die Aktion dar, die vom Trigger ausgefhrt wird.

18

Unterrichtseinheit 11: Implementieren von Triggern

Beispiel

Der Trigger in diesem Beispiel wurde erstellt, um eine Spalte (UnitsInStock) in der Products-Tabelle immer dann zu aktualisieren, wenn ein Produkt bestellt wird (immer wenn ein Datensatz in die Order Details-Tabelle eingefgt wird). Der neue Wert wird auf den vorherigen Wert abzglich der Bestellmenge festgelegt.
USE Northwind GO CREATE TRIGGER OrdDet_Insert ON [Order Details] FOR INSERT AS UPDATE P SET UnitsInStock = (P.UnitsInStock I.Quantity) FROM Products AS P INNER JOIN Inserted AS I ON P.ProductID = I.ProductID

Unterrichtseinheit 11: Implementieren von Triggern

19

Funktionsweise eines DELETE-Triggers


Geben Sie ein Beispiel fr einen DELETE-Trigger.

Thema

Einstieg

Ein DELETE-Trigger wird bei dem Versuch aufgerufen, Informationen aus der Tabelle, fr die der Trigger definiert ist, zu lschen. Wenn Zeilen aus einer Tabelle gelscht werden, werden diese, wie in dieser Folie dargestellt, in einer speziellen deleted-Tabelle gespeichert.

DELETE-Anweisung fr eine Tabelle, fr die eine DELETEAusgefhrte Triggeraktionen Anweisung definiert ist Categories Categories 1 DELETE-Anweisung fr eine Tabelle, fr die Picture 1 CategoryID CategoryName Description CategoryID CategoryNameProducts Description Picture Products DELETE eine DELETE-Anweisung definiert ist coffees 0x15 DELETE Categories Categories 11 Beverages ProductID Discontinued Soft drinks, coffees 0x15 Beverages ProductID Discontinued Soft drinks, WHERE WHERE 22 Condiments Condiments Sweet and savory 0x15 Sweet and 0 savory 0x15 CategoryID = 4 11 CategoryID = 4 0 2 Protokollierte DELETE-Anweisung candies, 0x15 2 33 Confections Confections Desserts, candies, 0x15 Desserts, 1 22 00 USE Northwind 4 Dairy Products Cheeses 0x15 USE Northwind 33 00 CREATE TRIGGER Category_Delete 3 CREATEAusgefhrte Triggeraktionen TRIGGER Category_Delete 3 44 00 ON Categories ON Categories
AS AS FOR DELETE FOR DELETE UPDATE P SET Discontinued = 1 UPDATE P SET Discontinued = 1 FROM Products AS P INNER JOIN deleted AS d FROM Products AS P INNER JOIN deleted AS d ON Protokollierte DELETE-Anweisung ON P.CategoryID = d.CategoryID P.CategoryID = d.CategoryID

Deleted Deleted 44 Dairy Products Cheeses 0x15 Dairy Products Cheeses 0x15

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn ein DELETE-Trigger ausgelst wird, werden die aus der betroffenen Tabelle gelschten Zeilen in einer speziellen deleted-Tabelle gespeichert. Die deleted-Tabelle ist eine logische Tabelle, die eine Kopie der gelschten Zeilen enthlt. Mit dieser Tabelle knnen Sie auf protokollierte Daten der gestarteten DELETE-Anweisung verweisen. Beachten Sie bei der Verwendung des DELETE-Triggers die folgenden Aspekte: Wenn eine Zeile an die deleted-Tabelle angehngt wird, ist diese nicht mehr in der Datenbanktabelle vorhanden. Daher besitzen die deleted-Tabelle und die Datenbanktabellen keine gemeinsamen Zeilen. Fr die Erstellung der deleted-Tabelle wird freier Speicherplatz aus dem Arbeitsspeicher reserviert. Die deleted-Tabelle ist immer im Cache gespeichert. Ein Trigger, der fr eine DELETE-Aktion definiert ist, wird nicht fr die TRUNCATE TABLE-Anweisung ausgefhrt, da TRUNCATE TABLE nicht protokolliert wird.

20

Unterrichtseinheit 11: Implementieren von Triggern

Beispiel

Der Trigger in diesem Beispiel wurde erstellt, um die Discontinued-Spalte in der Products-Tabelle immer dann zu aktualisieren, wenn eine Kategorie gelscht wird (immer wenn ein Datensatz aus der Categories-Tabelle gelscht wird). Alle betroffenen Produkte werden als 1 markiert, um anzuzeigen, dass sie nicht weiter gefhrt werden.
USE Northwind GO CREATE TRIGGER Category_Delete ON Categories FOR DELETE AS UPDATE P SET Discontinued = 1 FROM Products AS P INNER JOIN deleted AS d ON P.CategoryID = d.CategoryID

Unterrichtseinheit 11: Implementieren von Triggern

21

Funktionsweise eines UPDATE-Triggers


Geben Sie ein Beispiel fr einen UPDATE-Trigger.

Thema

Ausfhren der Triggeraktionen UPDATE-Anweisung fr eine Tabelle, fr die ein UPDATE-Trigger


definiert ist USE Northwind USE Northwind GO UPDATE Employees GO UPDATE Employees CREATE EmployeeID = 17 TRIGGER Employee_Update fr eine Tabelle, fr SET TRIGGER Employee_Update 1 UPDATE-Anweisung CREATE EmployeeID = 17 1 ON SET ON Employees Employees WHERE EmployeeID = 2 WHERE EmployeeID = 2 FOR UPDATE ein UPDATE-Trigger definiert ist die FOR UPDATE Employees AS AS Employees AS IF UPDATE (EmployeeID)EmployeeID LastName FirstName UPDATE (EmployeeID) IF UPDATE (EmployeeID) IF HireDate Title HireDate EmployeeID LastName FirstName Title BEGIN TRANSACTION TRANSACTION BEGIN2 TRANSACTION BEGIN UPDATE-Anweisung als INSERT- und 2 RAISERROR ('Transaction 1cannot be processed.\ RAISERROR ('Transaction cannot be processed.\ cannot be processed.\ Rep. ~~~ RAISERROR ('Transaction 1 Davolio Nancy Sales Rep. Davolio modified.', 10, 1) ~~~ Nancy Sales ***** Employee ID number cannot be modified.', 10, 1) ***** Employee ID number cannot be DELETE-Anweisung Fuller protokolliert Vice Pres. ~~~ Andrew R 22 Barr ROLLBACK TRANSACTION Barr Andrew R ~~~ ROLLBACK TRANSACTION ROLLBACK TRANSACTION
Transaction cannot be processed. 44 Transaction cannot be processed. Peacock Margaret Sales Rep. ~~~ 3 Ausfhren der Triggeraktionen Peacock Margaret Sales Rep. ~~~ ***** 3 ***** Member number cannot be modified Member number cannot be modified

Einstieg

Ein Trigger, der fr eine UPDATE-Anweisung definiert ist, wird bei dem Versuch aufgerufen, Daten in einer Tabelle, fr die der Trigger definiert ist, zu aktualisieren.

33

Leverling Janet Leverling Janet

Sales Rep. ~~~ Sales Rep. ~~~

Employees Employees UPDATE-Anweisung als INSERT- und DELETE-Anweisung EmployeeID LastName FirstName Title HireDate HireDate protokolliert inserted EmployeeID LastName FirstName Title inserted 11 Davolio Nancy Sales Rep. ~~~ Davolio Nancy Sales Rep. ~~~ 17 Fuller 2Andrew Vice Pres. Fuller 2Andrew Vice Pres. ~~~Vice Pres. ~~~ ~~~ 17 Fuller Andrew R Barr Barr Andrew R ~~~ 33 Leverling Janet Sales Rep. ~~~ deleted Leverling Janet Sales Rep. ~~~ deleted Peacock Pres. ~~~ Sales Rep. ~~~ 22 Fuller 44Andrew Vice Pres. Margaret Fuller AndrewPeacock Margaret Sales Rep. ~~~ Vice ~~~

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Einstieg (Fortsetzung) Eine UPDATE-Anweisung kann als aus zwei Schritten bestehend betrachtet werden: der DELETE-Schritt, mit dem das Abbild der Daten vor der Aktion aufgezeichnet wird, und der INSERT-Schritt, mit dem das Abbild der Daten nach der Aktion aufgezeichnet wird. Wenn eine UPDATE-Anweisung fr eine Tabelle ausgefhrt wird, fr die ein Trigger definiert ist, werden die ursprnglichen Zeilen (Abbild vor der Aktion) in die deleted-Tabelle und die aktualisierten Zeilen (Abbild nach der Aktion) in die inserted-Tabelle eingefgt. Durch den Trigger knnen sowohl die Tabellen deleted und inserted als auch die aktualisierte Tabelle berprft werden, um zu ermitteln, ob mehrere Zeilen aktualisiert wurden und wie die Triggeraktionen durchgefhrt werden sollten. Mit Hilfe einer IF UPDATE-Anweisung knnen Sie einen Trigger definieren, um Datenaktualisierungen einer bestimmte Spalte zu berwachen. Mit dem Trigger kann so die Aktivitt im Zusammenhang mit einer bestimmten Spalte auf einfache Weise isoliert werden. Wenn der Trigger feststellt, dass die spezielle Spalte aktualisiert wurde, kann dieser geeignete Aktionen veranlassen, wie z. B. die Ausgabe einer Warnmeldung, die darauf aufmerksam macht, dass die Spalte nicht aktualisiert werden kann, oder die Verarbeitung einer Reihe von Anweisungen basierend auf dem neu aktualisierten Spaltenwert. Syntax IF UPDATE (<column_name>)

Durch eine UPDATE-Anweisung wird, wie in dieser Folie dargestellt, die ursprngliche Zeile in die deletedTabelle verschoben und die aktualisierte Zeile in die inserted-Tabelle eingefgt.

22

Unterrichtseinheit 11: Implementieren von Triggern

Beispiel 1

In diesem Beispiel wird verhindert, dass ein Benutzer die EmployeeID-Spalte in der Employees-Tabelle ndert.
USE Northwind GO CREATE TRIGGER Employee_Update ON Employees FOR UPDATE AS IF UPDATE (EmployeeID) BEGIN TRANSACTION RAISERROR ('Transaction cannot be processed.\ ***** Employee ID number cannot be modified.', 10, 1) ROLLBACK TRANSACTION

Methodischer Hinweis

Der umgekehrte Schrgstrich (\) in der RAISERROR-Anweisung ist ein Fortsetzungszeichen, das es ermglicht, den gesamten Text der Fehlermeldung in einer Zeile anzuzeigen.

Unterrichtseinheit 11: Implementieren von Triggern

23

Funktionsweise eines INSTEAD OF-Triggers


Geben Sie ein Beispiel fr einen INSTEAD OF-Trigger.

Thema

Erstellen einer Sicht, die zwei oder mehr Tabellen verbindet


CREATE wird UPDATE VIEW fr CREATE VIEW Customers AS Customers AS die 1 INSTEAD OF-Trigger knnen auf einer Tabelle oder Sicht erstellt 1

Einstieg

Mit einem INSTEAD OFTrigger wird die ursprngliche Triggeraktion abgebrochen und stattdessen eine eigene Funktion ausgefhrt.

SELECT * SELECT * FROMeiner Sicht definiert sein FROM CustomersMex Customers CustomersMex Customers UNION INSTEAD OFUNION CustomerID CompanyName Country Phone Phone CustomerID CompanyName Country SELECT * Trigger bergibt SELECT * 2 2 CustomersGer ALFKI Alfreds Aktion ist nicht zu sehen auslsende Fu Germany 030-0074321 ~~~ FROMDie den Trigger ALFKI dieFROM CustomersGer Aktualisierung

der Ursprungstabelle

3 Aktualisierungen sind auf Sichten mglich, die vorher 3 CustomersMex In der Sicht CustomersMex CustomerIDnichtist das Country Phone Customers aktualisierbar waren CompanyName Phone CustomerIDCompanyName Country CustomersGer CustomersGer urprnglichTrujill Mexico (5) CompanyName~~~ ANATR Ana Trujill Mexico (5)555-4729 ~~~ CustomerID CompanyName Country Phone ANATR Ana Country Phone CustomerID 555-4729 Eingefgte nicht Mexico (5) 555-3932 ~~~ ANTON Antonio M Mexico (5) 555-3932 ~~~ ANTON Antonio M ALFKI Alfreds Fu Germany 030-0074321 ~~~ ALFKI Alfreds Fu Germany 030-0074321 ~~~ zu sehen CENTC Centro Co Mexico (5) 555-3392 ~~~ CENTC Centro Co Mexico (5) 555-3392 ~~~ BLAUS Blauer Se Germany 0621-08460 ~~~ BLAUS Blauer Se Germany 0621-08460 ~~~ DRACD Drachenb Germany 0241-039123 ~~~ DRACD Drachenb Germany 0241-039123 ~~~

ALFKI Alfreds Fu Germany ANATR Ana Trujill Mexico ANATR Ana Trujill Mexico ANTON Antonio M Mexico ANTON Antonio M Mexico

030-0074321 ~~~ (5) 555-4729 ~~~ (5) 555-4729 ~~~ (5) 555-3932 ~~~ (5) 555-3932 ~~~

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Kernpunkte Sie knnen einen INSTEAD OF-Trigger sowohl fr Tabellen als auch fr Sichten angeben. Dieser Trigger wird dann anstelle der ursprnglichen Triggeraktion ausgefhrt. Mit INSTEAD OF-Triggern wird die Anzahl der Aktualisierungstypen erhht, die Sie fr eine Sicht ausfhren knnen. Jede Tabelle oder Sicht ist auf einen INSTEAD OF-Trigger fr jede Triggeraktion (INSERT, UPDATE oder DELETE) beschrnkt. Sie knnen keinen INSTEAD OF-Trigger fr Sichten erstellen, fr die WITH CHECK OPTION definiert wurde.

Vergleichen Sie einen INSTEAD OF-Trigger mit einem AFTER-Trigger. Weisen Sie darauf hin, dass bei Verwendung eines INSTEAD OF-Triggers die ursprngliche Triggeraktion (INSERT, UPDATE oder DELETE) nicht ausgefhrt wird. Beachten Sie, dass Sie einen INSTEAD OF-Trigger fr Tabellen und Sichten definieren knnen.

24

Unterrichtseinheit 11: Implementieren von Triggern

Beispiel

In diesem Beispiel wird eine Tabelle mit Kunden in Deutschland und eine Tabelle mit Kunden in Mexiko erstellt. Ein fr die Sicht definierter INSTEAD OF-Trigger leitet Aktualisierungen in die entsprechende zugrunde liegende Tabelle um. Die Einfgung in der CustomersGer-Tabelle erfolgt also anstelle (INSTEAD OF) der Einfgung in der Sicht. Erstellen Sie zwei Tabellen mit Kundendaten:
SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany' SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico' GO

Methodischer Hinweis

In diesem Beispiel werden die Tabellen CustomersGer und CustomersMex und anschlieend wird eine Sicht mit Namen CustomersView erstellt. Zeigen Sie, wie Aktualisierungen der Sicht fehlschlagen. Erstellen Sie dann den Trigger, und zeigen Sie, wie die Aktualisierung durch den Trigger umgeleitet wird.

Erstellen Sie eine Sicht dieser Daten:


CREATE VIEW CustomersView AS SELECT * FROM CustomersGer UNION SELECT * FROM CustomersMex GO

Erstellen Sie einen INSTEAD OF-Trigger fr die Sicht:


CREATE TRIGGER Customers_Update2 ON CustomersView INSTEAD OF UPDATE AS DECLARE @Country nvarchar(15) SET @Country = (SELECT Country FROM Inserted) IF @Country = 'Germany' BEGIN UPDATE CustomersGer SET CustomersGer.Phone = Inserted.Phone FROM CustomersGer JOIN Inserted ON CustomersGer.CustomerID = Inserted.CustomerID END ELSE IF @Country = 'Mexico' BEGIN UPDATE CustomersMex SET CustomersMex.Phone = Inserted.Phone FROM CustomersMex JOIN Inserted ON CustomersMex.CustomerID = Inserted.CustomerID END

Wenn Kursteilnehmer fragen, warum dieses Skript scheinbar CustomersView aktualisiert hat, weisen Sie darauf hin, dass die Informationen in der Sicht aus der CustomersGer-Tabelle stammen.

Testen Sie den Trigger, indem Sie die Sicht aktualisieren:


UPDATE CustomersView SET Phone = ' 030-007xxxx' WHERE CustomerID = 'ALFKI' SELECT CustomerID, Phone FROM CustomersView WHERE CustomerID = 'ALFKI' SELECT CustomerID, Phone FROM CustomersGer WHERE CustomerID = 'ALFKI'

Unterrichtseinheit 11: Implementieren von Triggern

25

Funktionsweise von geschachtelten Triggern


Erlutern Sie die Verwendung geschachtelter Trigger.

Thema

OrDe_Update OrDe_Update

OrderID ProductID UnitPrice Quantity Discount OrderID ProductID UnitPrice Quantity Discount

Order_Details Order_Details 10 10 41 41 77 2

Einstieg

Wie bereits erwhnt, knnen Trigger bis zu 32 Ebenen tief geschachtelt werden. Wenn die Option fr geschachtelte Trigger aktiviert ist, kann ein Trigger, durch den eine Tabelle gendert wird, einen zweiten Trigger aktivieren, der wiederum einen dritten aktiviert, und so weiter.

10522 10522 10523 10523 10524 10524 10525

31.00 31.00 9.65 9.65 30.00 30.00 19.00

77 99 24 24 5

0.2 0.2 0.15 0.15 0.0 0.0 0.2 Eingang einer Bestellung lst den OrDe_Update-Trigger aus Fhrt eine UPDATEAnweisung auf der Products-Tabelle aus InStock_Update-Trigger wird ausgefhrt Nachricht wird gesendet

InStock_Update InStock_Update

ProductID UnitsInStock ProductID UnitsInStock

Products Products 11 2 33 44

15 15 15 10 10 65 65 20 20

UnitsInStock + UnitsOnOrder ist < ReorderLevel fr ProductID 2

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein Trigger kann eine UPDATE-, INSERT- oder DELETE-Anweisung enthalten, die sich auf eine andere Tabelle auswirkt. Wenn die Option fr geschachtelte Trigger aktiviert ist, kann ein Trigger, durch den nderungen an einer Tabelle vorgenommen werden, einen zweiten Trigger aktivieren, der wiederum einen dritten aktiviert, und so weiter. Die Schachtelungsfunktion wird bei der Installation aktiviert, kann jedoch mit Hilfe der gespeicherten Systemprozedur sp_configure deaktiviert und erneut aktiviert werden. Trigger knnen bis zu 32 Ebenen tief geschachtelt werden. Wenn irgendein Trigger in einer geschachtelten Kette eine Endlosschleife verursacht, wird die Schachtelungsebene berschritten. Der Trigger wird nun beendet, und es wird ein Rollback der Transaktion durchgefhrt. Mit Hilfe geschachtelter Trigger knnen Funktionen, wie z. B. das Speichern einer Sicherungskopie von Zeilen, die durch einen vorherigen Trigger beeinflusst wurden, ausgefhrt werden. Beachten Sie bei der Verwendung geschachtelter Trigger die folgenden Aspekte: Standardmig ist die Konfigurationsoption fr geschachtelte Trigger aktiviert. Ein geschachtelter Trigger wird nicht zweimal in der gleichen Triggertransaktion ausgelst; ein Trigger ruft sich nicht selbst als Reaktion auf eine zweite, durch den Trigger bewirkte Aktualisierung der gleichen Tabelle auf. Wenn ein Trigger beispielsweise eine Tabelle ndert, die wiederum die ursprngliche Triggertabelle ndert, wird der Trigger nicht erneut ausgelst. Da es sich bei einem Trigger um eine Transaktion handelt, wird, wenn in einer Reihe geschachtelter Trigger auf einer beliebigen Ebene ein Fehler auftritt, die gesamte Aktion abgebrochen und fr alle Datennderungen ein Rollback ausgefhrt. Sie sollten daher beim Testen Ihrer Trigger PRINTAnweisungen einsetzen, damit Sie ermitteln knnen, wo der Fehler aufgetreten ist.

26

Unterrichtseinheit 11: Implementieren von Triggern

In einer Produktionsumgebung, in der in der Regel keine Trigger eingesetzt werden, ist fr Tests und zur Fehlerbehebung die Funktion @@NESTLEVEL ntzlich.

Methodischer Hinweis

berprfen der Schachtelungsebene


Bei jedem Auslsen eines geschachtelten Triggers wird die Schachtelungsebene erhht. Unter SQL Server werden 32 Schachtelungsebenen untersttzt, es empfiehlt sich jedoch, die Anzahl der Schachtelungsebenen zu begrenzen, damit die hchste Schachtelungsebene nicht berschritten wird. Sie knnen die aktuellen Schachtelungsebenen mit Hilfe der Funktion @@NESTLEVEL anzeigen.

Verwenden der Schachtelungsfunktion


Die Option fr geschachtelte Trigger ist eine leistungsfhige Funktion, mit deren Untersttzung Sie die Datenintegritt innerhalb einer Datenbank aufrechterhalten knnen. Gelegentlich kann es jedoch sinnvoll sein, die Schachtelungsfunktion zu deaktivieren. Wenn die Option fr geschachtelte Trigger deaktiviert ist, ruft ein Trigger, der eine andere Tabelle ndert, keinen der Trigger fr die zweite Tabelle auf. Deaktivieren Sie die Schachtelungsfunktion mit Hilfe der folgenden Anweisung: Syntax sp_configure 'nested triggers', 0 Aus folgenden Grnden kann eine Deaktivierung der Schachtelungsfunktion sinnvoll sein: Das Entwerfen geschachtelter Trigger erfordert eine komplexe und gut geplante Struktur. Durch kaskadierende nderungen knnen Daten unbeabsichtigt gendert werden. Durch das ndern von Daten an einer beliebigen Stelle in einer Reihe geschachtelter Trigger wird die Triggerkette ausgelst. Obwohl Ihre Daten auf diese Weise wirkungsvoll geschtzt werden, kann dies ein Problem darstellen, wenn Ihre Tabellen in einer bestimmten Reihenfolge aktualisiert werden mssen. Sie knnen ein und dieselbe Funktionalitt mit und ohne die Schachtelungsfunktion erstellen: Die Struktur der Trigger wird sich jedoch erheblich unterscheiden. Beim Entwerfen geschachtelter Trigger sollte jeder einzelne Trigger ausschlielich die nchste Datennderung auslsen - die Struktur sollte modular sein. Beim Entwerfen nicht geschachtelter Trigger sollte jeder einzelne Trigger smtliche von Ihnen gewnschten Datennderungen auslsen.

Unterrichtseinheit 11: Implementieren von Triggern

27

Beispiel

Das folgende Beispiel illustriert, wie das Vornehmen einer Bestellung bewirkt, dass der OrDe_Update-Trigger ausgefhrt wird. Dieser Trigger fhrt eine UPDATE-Anweisung fr die UnitsInStock-Spalte der Products-Tabelle durch. Wenn die Aktualisierung vorgenommen wird, wird der Products_Update-Trigger ausgelst und vergleicht den neuen Wert des Lagerbestands plus den bestellten Warenbestand mit dem Mindestbestand. Wenn der Wert fr Lagerbestand plus bestellte Ware unter den Mindestbestand fllt, wird eine Meldung ausgegeben, mit der der Einkufer darauf hingewiesen wird, dass der Bestand aufgefllt werden muss.
USE Northwind GO CREATE TRIGGER Products_Update ON Products FOR UPDATE AS IF UPDATE (UnitsInStock) IF (Products.UnitsInStock + Products.UnitsOnOrder) < Products.ReorderLevel BEGIN --sendet eine Nachricht zu der Einkaufsabteilung END

28

Unterrichtseinheit 11: Implementieren von Triggern

Rekursive Trigger
Thema
Erlutern Sie die Verwendung rekursiver Trigger.

Einstieg

Rekursives Aktivieren eines Triggers Typen rekursiver Trigger Direkte Rekursion tritt auf, wenn ein Trigger ausgelst wird und eine Aktion ausfhrt, die das erneute Auslsen desselben Triggers verursacht Indirekte Rekursion tritt auf, wenn ein Trigger ausgelst wird und eine Aktion durchfhrt, die dazu fhrt, dass ein Trigger fr eine andere Tabelle ausgefhrt wird Verwenden rekursiver Trigger

Wenn die Option fr rekursive Trigger aktiviert ist, kann ein Trigger, durch den Daten in einer Tabelle gendert werden, einen zweiten Trigger aktivieren, der wiederum den ursprnglich aufgerufenen Trigger aktivieren kann, indem Daten in der ursprnglichen Tabelle gendert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Jeder Trigger kann eine UPDATE-, INSERT- oder DELETE-Anweisung enthalten, die dieselbe Tabelle oder eine andere Tabelle betrifft. Wenn die Option fr rekursive Trigger aktiviert ist, kann sich ein Trigger, durch den Daten in einer Tabelle gendert werden, selbst noch einmal aktivieren, und so einen rekursiven Vorgang ausfhren. Die Option fr rekursive Trigger ist bei der Erstellung einer Datenbank standardmig deaktiviert, Sie knnen die Option jedoch mit Hilfe der Anweisung ALTER DATABASE aktivieren.

Rekursives Aktivieren eines Triggers


Aktivieren Sie die Option fr rekursive Trigger mit Hilfe der folgenden Anweisung: Syntax ALTER DATABASE ClassNorthwind SET RECURSIVE_TRIGGERS ON sp_dboption databasename, 'recursive triggers', True Anmerkung Verwenden Sie die gespeicherte Systemprozedur sp_settriggerorder, um einen Trigger anzugeben, der als erster oder letzter AFTER-Trigger ausgelst wird. Es gibt keine feste Reihenfolge, in der mehrere Trigger, die fr ein bestimmtes Ereignis definiert sind, ausgefhrt werden. Jeder Trigger sollte unabhngig sein. Wenn die Option fr geschachtelte Trigger deaktiviert ist, ist die Option fr rekursive Trigger ebenfalls deaktiviert, unabhngig von der Datenbankeinstellung fr rekursive Trigger. Die Tabellen inserted und deleted fr einen bestimmten Trigger enthalten Zeilen, die sich ausschlielich auf die UPDATE-, INSERT- bzw. DELETEAnweisung bezieht, durch die der Trigger zuletzt aufgerufen wurde.

Unterrichtseinheit 11: Implementieren von Triggern

29

Die Rekursion von Triggern kann bis zu 32 Ebenen tief erfolgen. Wenn durch einen der Trigger in einer rekursiven Schleife eine Endlosschleife ausgelst wird, wird die Schachtelungsebene berschritten, woraufhin der Trigger beendet und ein Rollback fr die Transaktion durchgefhrt wird.

Typen rekursiver Trigger


Es werden zwei Rekursionstypen unterschieden: Direkte Rekursion, die auftritt, wenn ein Trigger ausgelst wird und eine Aktion ausfhrt, die das erneute Auslsen desselben Triggers verursacht. Eine Anwendung aktualisiert z. B. die T1-Tabelle, wodurch der Trig1Trigger ausgelst wird. Trig1 aktualisiert die Tabelle T1 noch einmal, wodurch der Trigger Trig1 ein weiteres Mal ausgelst wird. Die indirekte Rekursion, die auftritt, wenn ein Trigger ausgelst wird und eine Aktion durchfhrt, die dazu fhrt, dass ein Trigger fr eine andere Tabelle ausgefhrt und daraufhin eine Aktualisierung der ursprnglichen Tabelle verursacht wird. Dadurch wird der ursprngliche Trigger noch einmal ausgelst. Eine Anwendung aktualisiert z. B. die T2-Tabelle, wodurch der Trig2Trigger ausgelst wird. Trig2 aktualisiert die Tabelle T3, wodurch der Trigger Trig3 ausgelst wird. Trig3 wiederum aktualisiert die Tabelle T2, wodurch der Trigger Trig2 noch einmal ausgelst wird.

Verwenden rekursiver Trigger


Rekursive Trigger stellen eine komplexe Funktion dar, mit deren Hilfe Sie komplexe Beziehungen, wie z. B. auf sich selbst verweisende Beziehungen (auch als transitive Beziehungen bezeichnet) auflsen knnen. In diesen speziellen Situationen kann es sinnvoll sein, die Option fr rekursive Trigger zu aktivieren. Methodischer Hinweis Rekursive Trigger knnten sich als ntzlich erweisen, wenn Sie folgende Aufgaben erledigen mssen: Beibehalten der Anzahl von Berichtsspalten in der Employee-Tabelle, wobei die Tabelle eine Employee ID-Spalte und eine Manager ID-Spalte enthlt. Nehmen Sie beispielsweise an, dass zwei Aktualisierungstrigger, tr_update_employee und tr_update_manager fr die employee-Tabelle definiert sind. Die employee-Tabelle wird vom tr_update_employeeTrigger aktualisiert. Die Trigger tr_update_employee und tr_update_manager werden beide je einmal von einer UPDATE-Anweisung ausgelst. Darber hinaus wird durch die Ausfhrung von tr_update_employee die nochmalige Ausfhrung von tr_update_employee (rekursiv) und tr_update_manager ausgelst. Verwalten eines Diagramms fr Produktionsplanungsdaten, in dem eine implizierte Planungshierarchie vorhanden ist. Verwalten eines Fertigungsberwachungssystems, bei dem untergeordnete Teile in Abhngigkeit von den bergeordneten Teilen verfolgt werden.

Weisen Sie darauf hin, dass das erste Beispiel nicht auf die Employees-Tabelle in der Northwind-Datenbank zutrifft bzw. sich nicht darauf bezieht.

30

Unterrichtseinheit 11: Implementieren von Triggern

Beachten Sie vor der Verwendung rekursiver Trigger die folgenden Richtlinien: Rekursive Trigger sind komplex und mssen gut geplant und grndlich getestet werden. Fr rekursive Trigger ist ein logischer Code fr die Steuerung von Schleifen (Beendigungsprfung) erforderlich. Andernfalls wird die Schachtelungsgrenze von 32 Ebenen berschritten. Die Triggerkette kann durch eine Datennderung an einer beliebigen Stelle abgebrochen werden. Obwohl auf diese Weise komplexe Beziehungen verarbeitet werden knnen, kann dies ein Problem darstellen, wenn Ihre Tabellen in einer speziellen Reihenfolge aktualisiert werden mssen. Sie knnen eine hnliche Funktionalitt auch ohne die Funktion fr rekursive Trigger erstellen, die Struktur der Trigger wird jedoch vllig anders aussehen. Beim Entwerfen rekursiver Trigger muss jeder Trigger eine Bedingungsprfung enthalten, um die rekursive Ausfhrung anzuhalten, wenn die Bedingung falsch wird. Beim Entwerfen nicht rekursiver Trigger muss jeder Trigger die vollstndigen Programmschleifenstrukturen und -tests enthalten.

Unterrichtseinheit 11: Implementieren von Triggern

31

Beispiele fr Trigger
Erlutern Sie, warum Trigger in SQL Server notwendig sind.

Thema

Erzwingen der Datenintegritt Durchsetzen von Geschftsregeln

Einstieg

Mit Triggern werden Datenintegritt und Geschftsregeln durchgesetzt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Triggern werden Datenintegritt und Geschftsregeln durchgesetzt. Einige der von Triggern durchgefhrten Aktionen knnen mit Hilfe von Einschrnkungen ausgefhrt werden. Fr bestimmte Aktionen sollten Sie zunchst die Verwendung von Einschrnkungen in Betracht ziehen. Trigger sind jedoch notwendig, um unterschiedliche Grade der Entnormalisierung sowie Geschftsregeln durchzusetzen.

32

Unterrichtseinheit 11: Implementieren von Triggern

Erzwingen der Datenintegritt


Thema
Zeigen Sie anhand eines Beispiels, wie die Datenintegritt mit Hilfe von Triggern durchgesetzt wird.
CREATE TRIGGER BackOrderList_Delete CREATE TRIGGER BackOrderList_Delete ON Products FOR UPDATE ON Products FOR UPDATE AS AS IF (SELECT BO.ProductID FROM BackOrders AS BO JOIN IF (SELECT BO.ProductID FROM BackOrders AS BO JOIN Inserted AS I ON BO.ProductID = I.Product_ID Inserted AS I ON BO.ProductID = I.Product_ID ) > 0 ) > 0 BEGIN BEGIN DELETE BO FROM BackOrders AS BO DELETE BO FROM BackOrders AS BO INNER JOIN Inserted AS I INNER JOIN Inserted AS I ON BO.ProductID = I.ProductID ON BO.ProductID = I.ProductID END END

Einstieg

Trigger knnen zur Aufrechterhaltung der Datenintegritt verwenden werden, indem nderungen an verknpften Tabellen in der gesamten Datenbank kaskadiert werden.

ProductID UnitsInStock ProductID UnitsInStock

Products Products 11 2 33 44

ProductID UnitsOnOrder ProductID UnitsOnOrder

BackOrders BackOrders 11 12 12 33 2

15 15 15 10 10 65 65 20 20

Aktualisierung Aktualisierung Trigger lscht Zeile Trigger lscht Zeile

15 15 10 10 65 65 15

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Trigger knnen zur Aufrechterhaltung der Datenintegritt verwenden werden, indem nderungen an verknpften Tabellen in der gesamten Datenbank kaskadiert werden. Beispiel Das folgende Beispiel zeigt, wie mit einem Trigger die Datenintegritt fr die BackOrders-Tabelle aufrecht gehalten wird. Mit dem Trigger BackOrderList_delete wird die Liste der Produkte in der BackOrders-Tabelle verwaltet. Wenn Produkte eingehen, lscht der UPDATE-Trigger fr die Products-Tabelle Datenstze aus der BackOrders-Tabelle.
CREATE TRIGGER BackOrderList_Delete ON Products FOR UPDATE AS IF (SELECT BO.ProductID FROM BackOrders AS BO JOIN Inserted AS I ON BO.ProductID = I.Product_ID ) > 0 BEGIN DELETE BO FROM BackOrders AS BO INNER JOIN Inserted AS I ON BO.ProductID = I.ProductID END

Weitere Informationen

Dieses Beispiel ist hypothetisch. Es gibt keine BackOrders-Tabelle in der Northwind-Datenbank.

Unterrichtseinheit 11: Implementieren von Triggern

33

Durchsetzen von Geschftsregeln


Thema
Zeigen Sie anhand eines Beispiels, wie Geschftsregeln durchgesetzt werden.

Produkte mit ausstehenden Bestellungen knnen nicht gelscht werden


IF (Select Count (*) IF (Select Count (*) FROM [Order Details] INNER JOIN deleted FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ON [Order Details].ProductID = deleted.ProductID ) > 0 ) > 0 ROLLBACK TRANSACTION ROLLBACK TRANSACTION

Einstieg

Trigger knnen auch zum Durchsetzen bestimmter Geschftsregeln, wie z. B. Keine Produkte mit einer Bestellhistorie lschen, verwendet werden.

DELETE-Anweisung auf der Product-Tabelle ausgefhrt


ProductID UnitsInStock ProductID UnitsInStock

Triggercode berprft die Order Details-Tabelle Order Details Order Details 10 10 22 41 41 77

Rollback der Transaktion

Products Products 11 22 33 44

OrderID ProductID UnitPrice Quantity Discount OrderID ProductID UnitPrice Quantity Discount

15 15 0 10 10 65 65 20 20

10522 10522 10523 10523 10524 10524 10525 10525

31.00 31.00 19.00 19.00 9.65 9.65 30.00 30.00

77 99 24 24

0.2 0.2 0.15 0.15 0.0 0.0

'Transaction cannot be processed' 'Transaction cannot be processed' 'This product has order history' 'This product has order history'

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen mit Hilfe von Triggern Geschftsregeln durchsetzen, die fr die CHECK-Einschrnkung zu komplex sind. Hierzu gehrt das Prfen des Status von Zeilen in anderen Tabellen. Sie mchten beispielsweise sicherstellen, dass die ausstehenden berziehungsgebhren der Mitglieder bezahlt sind, bevor sie die Mitgliedschaft beenden knnen. Beispiel In diesem Beispiel wird ein Trigger erstellt, der ermittelt, ob ein Produkt ber eine Bestellhistorie verfgt. Falls ja, wird ein Rollback der DELETE-Aktion durchgefhrt, und der Trigger gibt eine benutzerdefinierte Fehlermeldung zurck.
Use Northwind GO CREATE TRIGGER Product_Delete ON Products FOR DELETE AS IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = Deleted.ProductID ) > 0 BEGIN RAISERROR('Transaction cannot be processed. \ This product has order history.', 16, 1) ROLLBACK TRANSACTION END

34

Unterrichtseinheit 11: Implementieren von Triggern

Leistungsaspekte
Stellen Sie die Leistungsaspekte bei der Verwendung von Triggern vor.

Thema

Einstieg

Trigger arbeiten schnell, da die inserted- und deleted-Tabellen im Cache gespeichert sind Ausfhrungszeit wird bestimmt durch: Die Anzahl der referenzierten Tabellen Die Anzahl der betroffenen Zeilen Die in einem Trigger enthaltenen Aktionen sind implizit Teil einer Transaktion

Die folgenden Leistungsaspekte sollten bei der Verwendung von Triggern bercksichtigt werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden Leistungsaspekte sollten bei der Verwendung von Triggern bercksichtigt werden. Trigger arbeiten schnell, da die inserted- und deleted-Tabellen im Cache gespeichert sind. Die inserted- und deleted-Tabellen befinden sich immer im Arbeitsspeicher anstatt auf einer Festplatte, da es sich um logische Tabellen handelt, die in der Regel sehr klein sind. Die Anzahl der Tabellen, auf die verwiesen wird, und die Anzahl der betroffenen Zeilen bestimmt die Ausfhrungszeit. Die fr das Aufrufen eines Triggers bentigte Zeit ist minimal. Der grte Teil der Ausfhrungszeit wird durch Verweise auf andere Tabellen (die entweder im Arbeitsspeicher oder auf einer Festplatte gespeichert sind) und das ndern von Daten in Anspruch genommen, wenn diese Vorgnge durch die Triggerdefinition aufgerufen werden. Die in einem Trigger enthaltenen Aktionen sind implizit Teil einer Transaktion. Sobald ein Trigger definiert ist, ist die Benutzeraktion (eine INSERT-, UPDATE- oder DELETE-Anweisung) fr die Tabelle, durch die der Trigger ausgefhrt wird, zusammen mit dem Trigger selbst immer implizit Teil einer Transaktion. Wenn eine ROLLBACK TRANSACTION-Anweisung angetroffen wird, wird ein Rollback fr die gesamte Transaktion ausgefhrt. Wenn das Triggerskript nach der ROLLBACK TRANSACTIONAnweisung weitere Anweisungen enthlt, werden diese ausgefhrt. Daher kann es notwendig sein, eine RETURN-Klausel in einer IF-Anweisung zu verwenden, um die Verarbeitung anderer Anweisungen zu verhindern.

Unterrichtseinheit 11: Implementieren von Triggern

35

Empfohlene Methoden
Geben Sie eine bersicht ber die empfohlenen Methoden zur Verwendung von Triggern.

Thema

Verwenden Sie Trigger nur dann, wenn es notwendig ist Verwenden Sie Trigger nur dann, wenn es notwendig ist

Einstieg

Die folgenden Vorschlge enthalten die empfohlenen Methoden zur Verwendung von Triggern.

Halten Sie Triggerdefinitionen so einfach wie mglich Halten Sie Triggerdefinitionen so einfach wie mglich

Fgen Sie Anweisungen zur Beendigungsprfung der Rekursion Fgen Sie Anweisungen zur Beendigungsprfung der Rekursion in Definitionen fr rekursive Trigger ein in Definitionen fr rekursive Trigger ein

Verwenden Sie ROLLBACK-Anweisungen nur selten in Triggern Verwenden Sie ROLLBACK-Anweisungen nur selten in Triggern

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die im Folgenden empfohlenen Methoden sollen Ihnen bei der Verwaltung Ihrer Datenbanken behilflich sein: Verwenden Sie Trigger nur dann, wenn es notwendig ist. Ziehen Sie die Verwendung einer Einschrnkung in Betracht, bevor Sie auf einen Trigger zurckgreifen. Halten Sie Triggerdefinitionen so einfach wie mglich. Die meiste Zeit, die fr die Verarbeitung eines Triggers bentigt wird, wird fr das Verweisen auf Tabellen und das ndern von Daten aufgewendet. Da es sich bei Triggern im Grunde genommen um Transaktionen handelt, werden Sperren aufrechterhalten, bis die Transaktion beendet ist. Fgen Sie Anweisungen zur Beendigungsprfung der Rekursion in Definitionen fr rekursive Trigger ein. Dadurch wird verhindert, dass der Trigger in einer Endlosschleife stecken bleibt. Verwenden Sie ROLLBACK-Anweisungen nur selten in Triggern. Wenn Sie ein Rollback fr einen Trigger ausfhren, mssen smtliche nderungen, die bis zu diesem Punkt durchgefhrt wurden, von SQL Server wieder rckgngig gemacht werden. Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema CREATE TRIGGER ALTER TRIGGER DROP TRIGGER Erstellen eines Triggers Programmieren von Triggern Suchbegriff "create trigger" "alter trigger" "drop trigger" "Erstellen eines Triggers" "Programmieren von Triggern"

36

Unterrichtseinheit 11: Implementieren von Triggern

bungseinheit A: Erstellen von Triggern


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit erstellen Sie Trigger und testen diese.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erstellen von Triggern zur Aufrechterhaltung der Datenintegritt. Erstellen von Triggern zum Durchsetzen komplexer Geschftsregeln.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L11 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L11\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore11.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 11: Implementieren von Triggern

37

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

38

Unterrichtseinheit 11: Implementieren von Triggern

bung 1 Erstellen von Triggern


In dieser bung fhren Sie ein Skript aus, durch das ein Trigger erstellt wird. Nachdem der Trigger erstellt ist, testen Sie ihn, um zu berprfen, ob er funktioniert. So erstellen Sie einen Trigger Mit diesem Verfahren erstellen Sie einen Trigger, indem Sie eine Skriptdatei ausfhren. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie sind berechtigt, sich an SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet und damit Mitglied der lokalen Administratorgruppe von Microsoft Windows 2000 sind. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen Sie die Skriptdatei C:\Moc\2328A\Labfiles\OrdDetInsert.sql, und prfen Sie sie. Durch dieses Skript wird ein Trigger fr die Tabelle Order Details erstellt. Der Trigger aktualisiert die Spalte UnitsInStock der Products-Tabelle immer dann, wenn eine Zeile in die Order Details-Tabelle eingefgt wird (immer wenn ein Auftrag eingeht). 5. Fhren Sie C:\Moc\2328A\Labfiles\L11\OrdDetInsert.sql aus. 6. Fhren Sie die gespeicherte Systemprozedur sp_helptrigger fr die Order Details-Tabelle in der ClassNorthwind-Datenbank aus, um zu ermitteln, ob der Trigger erstellt wurde.

Unterrichtseinheit 11: Implementieren von Triggern

39

So testen Sie den Trigger Mit diesem Verfahren testen Sie den soeben erstellten Trigger, indem Sie eine Zeile in die Order Details-Tabelle einfgen. 1. Fhren Sie die folgende SELECT-Anweisung aus, um eine Zeile in der Products-Tabelle auszuwhlen und so die Anzahl der am Lager befindlichen Einheiten zu ermitteln:
SELECT * FROM Products WHERE ProductID = 22

Die UnitsInStock-Spalte sollte den Wert 104 enthalten. Wenn in dieser Spalte ein anderer Wert angegeben wird, machen Sie sich eine entsprechende Notiz. 2. Fgen Sie eine Zeile in die Order Details-Tabelle ein, mit der 50 Einheiten von Produkt 22 bestellt werden. Ihre INSERT-Anweisung sieht hnlich der Folgenden aus:
INSERT [Order Details] (OrderID, ProductID, UnitPrice, Quantity, Discount) VALUES (11077, 22, 21.00, 50, 0.0) GO

3. Fragen Sie die Products-Tabelle ab, um zu prfen, dass der Wert in der UnitsInStock-Spalte fr die angegebene ProductID auf 54 gendert wurde.

40

Unterrichtseinheit 11: Implementieren von Triggern

bung 2 Erstellen eines Triggers zur Aktualisierung abgeleiteter Daten


In dieser bung erstellen Sie zwei neue Tabellen (ohne PRIMARY- und FOREIGN KEY-Einschrnkungen) und anschlieend einen Trigger fr die NewCategories-Tabelle, um die Integritt in der NewProducts.DiscontinuedSpalte durchzusetzen. C:\Moc\2328A\Labfiles\L11\Answers\CategoryDelete.sql enthlt ein vollstndiges Skript fr diese bung. So erstellen Sie einen Trigger zur Aktualisierung abgeleiteter Daten In diesem Verfahren erstellen Sie zwei neue Tabellen mit Namen NewCategories und NewProducts. Fr keine der beiden sind PRIMARY- und FOREIGN KEY-Einschrnkungen definiert. Anschlieend erstellen Sie einen Trigger fr die NewCategories-Tabelle. Mit diesem Trigger wird die Discontinued-Spalte in der NewProducts-Tabelle immer dann aktualisiert, wenn eine Kategorie gelscht wird (immer wenn ein Datensatz aus der NewCategories-Tabelle gelscht wird). Alle betroffenen Produkte werden als 1 markiert, um anzuzeigen, dass sie nicht weiter gefhrt werden. Fhren Sie C:\Moc\2328A\Labfiles\L11\CategoryDelete.sql aus, und nehmen Sie die entsprechenden nderungen vor. 1. Geben Sie die folgende Abfrage ein, und fhren Sie sie aus, um zwei neue Tabellen mit Namen NewCategories und NewProducts zu erstellen.
USE ClassNorthwind GO --This creates a NewCategories table SELECT * INTO NewCategories FROM Categories --This creates a NewProducts table SELECT * INTO NewProducts FROM Products GO

2. Geben Sie die folgende Abfrage ein, und fhren Sie sie aus, um einen Trigger fr die NewCategories-Tabelle zu erstellen. Mit diesem Trigger wird die Discontinued-Spalte der NewProducts-Tabelle auf 1 aktualisiert, wenn das bergeordnete Verzeichnis eines Produkts gelscht wird (wenn eine Zeile aus der NewCategories-Tabelle gelscht wird).
CREATE TRIGGER Category_Delete ON NewCategories FOR DELETE AS UPDATE P SET Discontinued = 1 FROM NewProducts AS P INNER JOIN Deleted AS d ON P.CategoryID = D.CategoryID

Unterrichtseinheit 11: Implementieren von Triggern

41

3. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, mit der die NewProducts-Tabelle abgefragt wird, um die Werte fr die nicht weiter gefhrten Produkte (Discontinued-Spalte) in CategorieID 7 zu ermitteln.
SELECT ProductID, CategoryID, Discontinued FROM NewProducts WHERE CategoryID = 7

4. Erstellen Sie eine DELETE-Anweisung, durch die eine Zeile aus der NewCategories-Tabelle entfernt wird, und berprfen Sie anschlieend, ob der Trigger korrekt ausgefhrt wird. Sind diese Trigger zur Aufrechterhaltung der Datenintegritt in der ClassNorthwind-Datenbank erforderlich? Begrndung? Ja. Mit dem Kaskadieren von referenzieller Integritt knnten die entsprechenden Produkte zwar auch aus der NewProducts-Tabelle entfernt werden, ein Trigger ist jedoch die beste Mglichkeit zum Implementieren einer komplexeren Aktion wie beispielsweise dem Belassen der Datenstze in NewProducts, whrend die Discontinued-Spalte aktualisiert wird. ____________________________________________________________ ____________________________________________________________

42

Unterrichtseinheit 11: Implementieren von Triggern

bung 3 Erstellen eines Triggers zur Durchsetzung einer komplexen Geschftsregel


In dieser bung erstellen Sie einen DELETE-Trigger fr die NewProductsTabelle. Mit diesem Trigger wird ermittelt, ob in der Order Details-Tabelle eine Bestellhistorie vorliegt, bevor der Trigger Lschvorgnge in der NewProducts-Tabelle zulsst. So erstellen Sie einen Trigger fr die NewProducts-Tabelle In diesem Verfahren verwenden Sie die in der vorherigen bung erstellte NewProducts-Tabelle. Sie erstellen einen Trigger, mit dem ermittelt wird, ob ein Bestellhistorie fr ein Produkt existiert, das gelscht werden soll. Wenn das Produkt noch nie bestellt wurde, kann es gelscht werden. Wenn das Produkt ber eine Bestellhistorie verfgt, wird ein Rollback fr den Lschvorgang in der NewProducts-Tabelle durchgefhrt, und der Trigger gibt eine benutzerdefinierte Fehlermeldung aus. C:\Moc\2328A\Labfiles\L11\Answers\BusinessRule.sql enthlt ein vollstndiges Skript fr diese bung. 1. Sie erstellen einen DELETE-Trigger fr die NewProducts-Tabelle, mit dem ermittelt wird, ob eine Bestellhistorie fr ein Produkt existiert, das andernfalls gelscht werden soll. Wenn in der Order Details-Tabelle Datenstze fr dieses Produkt vorhanden sind, wird eine Meldung angezeigt und ein Rollback ausgefhrt. 2. Lschen Sie Produkt 6 aus der NewProducts-Tabelle, um den Trigger zu testen. Answers\BusinessRule.sql ist das vollstndige Skript fr diesen Schritt. Wurde der Trigger ausgelst? Begrndung? Ja. Fr das Produkt, das aus der NewProducts-Tabelle gelscht wurde, befinden sich Bestellungen in der Order Details-Tabelle. Der Trigger hat die Lschung verhindert und gibt eine Fehlermeldung aus. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 11: Implementieren von Triggern

43

bung 4 Prfen der Auslsungsreihenfolge von Einschrnkungen und Triggern


In dieser bung ndern Sie die Anweisung aus der vorherigen bung, um die Auslsungsreihenfolge von Einschrnkungen und Triggern zu prfen. C:\Moc\2328A\Labfiles\L11\Answers\BusinessRule.sql enthlt ein vollstndiges Skript fr diese bung. So ndern Sie den Trigger aus der vorherigen bung 1. Erstellen Sie einen Trigger fr die Products-Tabelle hnlich demjenigen, den Sie in der vorherigen bung erstellt haben, und nennen Sie ihn Product_Delete2. Erinnern Sie sich, dass in der vorherigen bung ein DELETE-Trigger mit Namen Product_Delete fr die NewProducts-Tabelle erstellt wurde.
CREATE TRIGGER Product_Delete2 ON Products FOR DELETE AS IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = Deleted.ProductID ) > 0 BEGIN RAISERROR('Transaction cannot be processed. This Product still has a history of orders.', 16, 1) ROLLBACK TRANSACTION END

2. Testen Sie den Trigger. Wurde der Trigger ausgelst? Begrndung? Nein. Die PRIMARY KEY-Einschrnkung hat verhindert, dass dieser Trigger ausgelst wurde. ____________________________________________________________ ____________________________________________________________

44

Unterrichtseinheit 11: Implementieren von Triggern

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Einfhrung in Trigger Definieren von Triggern Funktionsweise von Triggern Beispiele fr Trigger Leistungsaspekte

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf die Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klren Sie offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

1. Welche Schlsselwerte mssen sich in der Spaltendefinition befinden, wenn der Leiter der Lagerhaltungskontrolle in der INSERT-Anweisung keinen Wert fr die Products.ProductID-Spalte angibt? Die Spalte muss NULL-Werte zulassen oder muss, wenn keine NULLWerte zulssig sind, eine DEFAULT-Einschrnkung enthalten. ____________________________________________________________ ____________________________________________________________ 2. Wenn die Products-Tabelle eine PRIMARY KEY-Einschrnkung fr die ProductID-Spalte enthlt, wrde ein Trigger dann funktionieren? Begrndung? Nein. Einschrnkungen werden vor dem ndern (Einfgen) von Daten verarbeitet. Eine PRIMARY KEY-Einschrnkung lsst keine NULLWerte zu, die INSERT-Anweisung wrde daher nicht ausgefhrt werden. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 11: Implementieren von Triggern

45

3. Wie mssen Sie vorgehen, damit ein Trigger ausgefhrt werden kann? Sie knnten eine Standardaktion verwenden, durch die eine temporre ProductID-Nummer als Platzhalter eingefgt wird, und knnten dann den korrekten Wert durch den Trigger zuweisen lassen. Die temporre ProductID-Nummer msste ein Wert auerhalb des Bereichs mglicher ProductID-Nummern sein. Beispielsweise wre 9999999 eine gute ProductID-Nummer, da es unwahrscheinlich ist, dass sich mehr als 9.999.999 Produkte im Warenbestand befinden. Eine andere Mglichkeit bestnde darin, die PRIMARY KEY-Einschrnkung zu lschen. Sie mssten diese ersetzen, indem Sie einen zustzlichen Trigger zur Aufrechterhaltung und berprfung der referenziellen Integritt fr die ProductID-Spalte erstellen. Sie mssten mglicherweise auch einen eindeutigen Index fr die ProductID-Spalte erstellen. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 11: Implementieren von Triggern

This page is intentionally left blank.

Unterrichtseinheit 12: Programmieren fr mehrere Server


Inhalt bersicht Einfhrung in verteilte Abfragen Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle Einrichten einer Verbindungsserverumgebung Ausfhren einer Abfrage auf einem Verbindungsserver Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver Verwalten von verteilten Transaktionen ndern von Daten auf einem Verbindungsserver Verwenden partitionierter Sichten Empfohlene Methoden bungseinheit A: Verwenden von verteilten Daten Lernzielkontrolle 1 2 4 7 18 23 24 25 27 34 36 48

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 12: Programmieren fr mehrere Server

iii

Hinweise fr den Kursleiter


Prsentation: 60 Minuten bungseinheit: 60 Minuten Diese Unterrichtseinheit gibt den Kursteilnehmern eine Einfhrung in das Programmieren fr mehrere Server. Zunchst wird beschrieben, wie eine Ad-hoc-Abfrage fr eine Remotedatenquelle ausgefhrt wird. Anschlieend wird beschrieben, wie eine Verbindungsserverumgebung eingerichtet wird, einschlielich der Einrichtung von Verbindungsservern und der Herstellung von Sicherheit zwischen Servern. Darber hinaus wird erlutert, wie Verbindungsserver- und Pass-Through-Abfragen sowie gespeicherte Prozeduren auf einem Verbindungsserver ausgefhrt, verteilte Daten gendert und verteilte Transaktionen verwaltet werden. Im letzten Abschnitt wird beschrieben, wie die Leistung durch die Verwendung partitionierter Sichten optimiert werden kann. In der bungseinheit richten die Kursteilnehmer eine Verbindungsumgebung ein, fragen Verbindungsdatenquellen ab, fhren Pass-Through- und Ad-hocAbfragen sowie gespeicherte Remoteprozeduren aus und verwalten verteilte Transaktionen. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben verteilter Abfragen. Erstellen von Ad-hoc-Abfragen, die auf Daten zugreifen, die in einer Remotedatenquelle unter Microsoft SQL Server 2000 oder einer OLE DB-Datenquelle gespeichert sind. Einrichten einer Verbindungsserverumgebung fr den Zugriff auf Daten, die in einer Remotedatenquelle unter SQL Server 2000 oder einer OLE DBDatenquelle gespeichert sind. Erstellen von Abfragen, die auf Daten eines Verbindungsservers zugreifen. Ausfhren von gespeicherten Prozeduren auf einem Remoteserver oder einem Verbindungsserver. Verwalten von verteilten Transaktionen. ndern verteilter Daten mit Hilfe von verteilten Transaktionen. Verwenden partitionierter Sichten zur Leistungsverbesserung.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie die Microsoft PowerPoint-Datei 2328A_12.ppt.

iv

Unterrichtseinheit 12: Programmieren fr mehrere Server

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch. Wichtig Die Beispiele in dieser Unterrichtseinheit dienen lediglich als Referenz. Sie sind nicht ausfhrbar.

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung in verteilte Abfragen Beschreiben Sie verteilte Abfragen und wie mit ihnen auf Daten mehrerer heterogener Datenquellen, die auf demselben oder verschiedenen Computern gespeichert sein knnen, zugegriffen wird. Vergleichen Sie die beiden Techniken - Ad-hoc-Abfrage und Verbindungsserver-Abfrage - fr den Zugriff von SQL Server auf eine OLE DB-Datenquelle, und erlutern Sie, wann sie verwendet werden. Zeigen Sie, wie der Ort der Verarbeitung einer verteilten Abfrage, der lokale Server oder ein Remoteserver, angegeben wird. Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle Beschreiben Sie, wann und wie die OPENROWSET-Funktion zum Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle verwendet wird. Einrichten einer Verbindungsserverumgebung Erlutern Sie die Vorteile der Einrichtung einer Umgebung mit Verbindungsservern. In dieser Umgebung knnen Sie steuern, wo die Abfrage ausgefhrt wird (lokal oder remote). Verbindungsserver ermglichen eine flexiblere Sicherheitsumgebung fr den Zugriff auf Remotedaten. Sie haben die Mglichkeit, Benutzeranmeldeinformationen an den Verbindungsserver zu bergeben oder lokale SQL Server-Konten bzw. Microsoft Windows 2000-Gruppen Konten oder Gruppen auf dem Verbindungsserver zuzuordnen. Ausfhren einer Abfrage auf einem Verbindungsserver Weisen Sie die Kursteilnehmer auf die vierteiligen Namen hin, die zum Abfragen verknpfter Daten erforderlich sind. Erlutern Sie kurz, warum bestimmte Transact-SQL-Anweisungen und -Aktionen auf Verbindungsservern nicht ausgefhrt werden knnen. Beschreiben Sie ausfhrlich, wann und wie Verbindungsserver-Abfragen und Pass-Through-Abfragen ausgefhrt werden. Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver Weisen Sie darauf hin, dass gespeicherte Prozeduren auf Verbingungsservern ausgefhrt werden knnen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Verwalten von verteilten Transaktionen Weisen Sie die Kursteilnehmer darauf hin, dass sie verteilte Anwendungen mit Hilfe integrierter und benutzerdefinierter Komponenten, die eingekapselte Geschftslogik enthalten, erstellen knnen. Komponenten knnen die von den Windows 2000-Komponentendiensten bereitgestellten Dienste verwenden. ndern von Daten auf einem Verbindungsserver Weisen Sie darauf hin, dass nderungen, die in mehreren Datenbanken konsistent sein mssen, in einer verteilten Transaktion ausgefhrt werden sollten. Verwenden Sie die BEGIN DISTRIBUTED TRANSACTIONAnweisung mit einer entsprechenden COMMIT- oder ROLLBACK-Anweisung. Verwenden partitionierter Sichten Erlutern Sie, dass partitionierte Sichten die Leistung durch Verteilen der Verarbeitung auf mehrere Server verbessern knnen.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Im folgenden Abschnitt werden die Anforderung zum Einrichten der bungseinheit in dieser Unterrichtseinheit beschrieben.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit in dieser Unterrichtseinheit muss sich die ClassNorthwind-Datenbank in dem fr die bungseinheit erforderlichen Zustand befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der folgenden Aktionen aus: Bearbeiten der vorhergehenden bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore12.cmd. Achtung Wenn dieser Kurs angepasst wurde, mssen Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore12.cmd ausfhren, damit sichergestellt ist, dass die bungseinheit ordnungsgem durchgefhrt werden kann.

vi

Unterrichtseinheit 12: Programmieren fr mehrere Server

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung in verteilte Abfragen Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle Einrichten einer Verbindungsserverumgebung Ausfhren einer Abfrage auf einem Verbindungsserver Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver Verwalten von verteilten Transaktionen ndern von Daten auf einem Verbindungsserver Verwenden partitionierter Sichten

Einstieg

In dieser Unterrichtseinheit erhalten Sie Informationen zum Programmieren fr mehrere Server mit Hilfe von verteilten Abfragen, verteilten Transaktionen und partitionierten Sichten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Diese Unterrichtseinheit gibt eine Einfhrung in das Programmieren fr mehrere Server. Es wird beschrieben, wie eine Ad-hoc-Abfrage fr eine Remotedatenquelle ausgefhrt wird. Anschlieend wird beschrieben, wie eine Verbindungsserverumgebung eingerichtet wird, einschlielich der Einrichtung von Verbindungsservern und der Herstellung von Sicherheit zwischen Servern. Darber hinaus wird erlutert, wie Verbindungsserver- und Pass-Through-Abfragen auf einem Verbindungsserver sowie gespeicherte Prozeduren auf einem Verbindungsserver ausgefhrt, verteilte Daten gendert und verteilte Transaktionen verwaltet werden. Im letzten Abschnitt wird beschrieben, wie die Leistung durch die Verwendung partitionierter Sichten optimiert werden kann. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben verteilter Abfragen. Erstellen von Ad-hoc-Abfragen, die auf Daten zugreifen, die in einer Remotedatenquelle unter Microsoft SQL Server 2000 oder einer OLE DB-Datenquelle gespeichert sind. Einrichten einer Verbindungsserverumgebung fr den Zugriff auf Daten, die in einer Remotedatenquelle unter SQL Server 2000 oder einer OLE DBDatenquelle gespeichert sind. Erstellen von Abfragen, die auf Daten eines Verbindungsservers zugreifen. Ausfhren von gespeicherten Prozeduren auf einem Remoteserver oder einem Verbindungsserver. Verwalten von verteilten Transaktionen. ndern verteilter Daten mit Hilfe von verteilten Transaktionen. Verwenden partitionierter Sichten zur Leistungsverbesserung.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Einfhrung in verteilte Abfragen


Geben Sie eine bersicht ber verteilte Abfragen.

Thema

Einstieg

Zugreifen auf Remotedaten Ad-hoc-Abfrage Verbindungsserverabfrage Angeben des Verarbeitungsortes fr verteilte Abfragen Lokaler Server mit SQL Server OLE DB-Remotedatenquelle (Pass-Through-Abfrage ) berprfen von Verbindungseinstellungen

Durch verteilte Abfragen wird auf Daten mehrerer heterogener Datenquellen zugegriffen, die auf dem lokalen oder auf dem Remotecomputer gespeichert sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Durch verteilte Abfragen wird auf Daten mehrerer heterogener Datenquellen zugegriffen, die auf einem lokalen oder auf einem Remotecomputer gespeichert sind. SQL Server untersttzt verteilte Abfragen mit Hilfe von Microsoft OLE DB-Provider. Verteilte Abfragen ermglichen SQL Server-Benutzern den Zugriff auf: Verteilte Daten, die auf mehreren Computern mit SQL Server gespeichert sind. Heterogene Daten, die in verschiedenen relationalen und nicht relationalen Datenquellen gespeichert sind und fr die entweder ein OLE DB-Provider oder ein ODBC-Treiber (Open Database Connectivity) vorhanden ist.

Zugreifen auf Remotedaten


Fr den Zugriff auf OLE DB-Datenquellen ber SQL Server stehen Ihnen zwei Techniken zur Verfgung: Ad-hoc-Abfrage Wenn Sie auf Remotedaten zugreifen mchten, in Zukunft jedoch voraussichtlich keine weiteren Zugriffe auf die Datenquelle erfolgen werden, knnen Sie mit Hilfe der OPENROWSET- oder OPENDATASOURCE-Funktion eine Ad-hoc-Abfrage erstellen. Verbindungsserverabfrage Um wiederholt auf Remotedaten zuzugreifen, knnen Sie einen Verbindungsserver und einen vierteiligen Objektnamen verwenden. Ein Verbindungsserver ist eine OLE DB-Datenquelle, die bereits auf dem lokalen Server mit SQL Server registriert ist. Wenn auf diese verwiesen wird, wei der lokale Server, wo die Remotedaten und -objekte zu finden sind. Mit Hilfe von Verbindungsservern lassen sich SQL Server-bergreifende Verknpfungen und andere Abfragen auf effiziente Weise bereitstellen, wenn Sie bereits im Voraus wissen, dass bestimmte Datenquellen zur Verfgung stehen mssen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Angeben des Verarbeitungsortes fr verteilte Abfragen


Beim Abfragen einer OLE DB-Datenquelle knnen Sie angeben, ob die Abfrage lokal oder auf einem Remoteserver verarbeitet werden soll. Lokaler Server mit SQL Server Bei Verbindungsservern werden verteilte Abfragen von SQL Server standardmig auf dem lokalen Server verarbeitet. OLE DB-Remotedatenquelle Sie knnen die OPENQUERY-Funktion fr Verbindungsserver verwenden, um anzugeben, dass die Verarbeitung auf dem Remoteserver ausgefhrt wird. Eine solche Abfrage wird als Pass-Through-Abfrage bezeichnet. Wenn Sie mit Hilfe der OPENROWSET-Funktion eine Ad-hoc-Abfrage fr eine Remotedatenquelle ausfhren, wird die Abfrage ebenfalls auf dem Remotecomputer verarbeitet.

berprfen von Verbindungseinstellungen


Bei jeder Sitzung, whrend der verteilte Abfragen ausgegeben werden, mssen die Optionen ANSI_NULLS und ANSI_WARNINGS aktiviert sein. Wenn Sie verteilte Abfragen mit Hilfe von ODBC oder SQL Server Query Analyzer ausfhren, sind diese Optionen standardmig aktiviert. Wenn Sie das osqlBefehlszeilen-Dienstprogramm verwenden, mssen Sie diese Optionen explizit aktivieren.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle


Thema
Beschreiben Sie, wie eine Ad-hoc-Abfrage fr eine Remotedatenquelle ausgefhrt wird.

Verwenden Sie die OPENROWSET-Funktion, wenn Sie voraussichtlich nur gelegentlich auf die Datenquellen zugreifen werden Verwenden Sie die OPENROWSET-Funktion, um Zugriff auf Remotedaten, ohne dass ein Verbindungsserver eingerichtet werden muss, zu erhalten
SELECT a.* SELECT a.* FROM OPENROWSET('SQLOLEDB', 'LONDON1'; FROM OPENROWSET('SQLOLEDB', 'LONDON1'; 'newcustomer';'mypassword', 'newcustomer';'mypassword', 'SELECT ProductID, UnitPrice 'SELECT ProductID, UnitPrice FROM Northwind.dbo.Products ORDER BY UnitPrice') FROM Northwind.dbo.Products ORDER BY UnitPrice') AS a AS a

Einstieg

Mit Hilfe eines OLE DBProviders knnen Sie ad hoc auf Daten von Remoteressourcen zugreifen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe eines OLE DB-Providers knnen Sie ad hoc auf Daten von Remoteressourcen zugreifen. Die OPENROWSET-Funktion ermglicht es Ihnen, eine Verbindung zu einer Remotequelle herzustellen und auf Daten dieser Quelle zuzugreifen, ohne dass ein Verbindungsserver eingerichtet werden muss. Verwenden Sie die OPENROWSET-Funktion fr solche Datenquellen, auf die Sie in Zukunft voraussichtlich nur gelegentlich zugreifen werden. XOPENROWSET('provider_name' {'data -source'; 'user_id' ; 'password' | 'provider_string'}, {[catalog.][schema.]object | 'query'}) In der folgenden Tabelle sind die Parameter der OPENROWSET-Funktion beschrieben.
Parameter provider_name data_source user_id password provider_string catalog schema Beschreibung Eindeutiger, benutzerfreundlicher Name fr den OLE DB-Provider, der dieser Datenquelle entspricht. Der durch den OLE DB-Provider ausgewertete Name der Datenquelle. Benutzername, der an den angegebenen OLE DB-Provider bermittelt wird. Kennwort, das an den OLE DB-Provider bermittelt wird. OLE DB-Provider-spezifische Verbindungszeichenfolge, ber die eine eindeutige Datenquelle identifiziert wird. Katalog oder Datenbank, in dem/der sich das Objekt befindet. Schema oder Besitzer eines Objekts.

Unterrichtseinheit 12: Programmieren fr mehrere Server (Fortsetzung) Parameter object query Beschreibung Eindeutiger Name des Objekts, das verarbeitet wird. Zeichenfolge mit einer Abfrage, die an den Provider gesendet und von diesem ausgefhrt werden soll. Wenn anstatt eines Remoteobjektnamens eine Abfrage angegeben wird, wird die Abfrage als Pass-Through-Abfrage ausgefhrt.

In der folgenden Tabelle sind einige typische OLE DB-Providernamen aufgefhrt. Eine vollstndigere Liste mit OLE DB-Providernamen fr verschiedene Datenquellen finden Sie in der SQL Server-Onlinedokumentation.
Produkt SQL Server Microsoft OLE DB-Provider fr Access (Jet) Microsoft OLE DB-Provider fr Oracle Providername N'SQLOLEDB' 'Microsoft.Jet.OLEDB.4.0' 'MSDAORA' data_source ist der SQL*Net-Aliasname fr die Oracle-Datenbank, die als Verbindungsserver hinzugefgt werden soll. Der provider_name lautet 'MSDASQL' und die data_source lautet 'LocalServer'. Der provider_name lautet 'MSDASQL' und der provider_string lautet DRIVER={SQL Server} SERVER=servername UID=login;PWD=password;' DTSPackageDSO ADSDSOObject MSIDXS

OLE DB-Provider fr ODBC (Unter Verwendung des data_source-Parameters) OLE DB-Provider fr ODBC (Unter Verwendung des provider_string-Parameters)

Data Transformation Services (DTS) Microsoft-Verzeichnisdienste Microsoft-Indexdienst

Beachten Sie die folgenden Aspekte und Richtlinien, wenn Sie bei der Ausfhrung von Abfragen die OPENROWSET-Funktion verwenden: Sie mssen Katalog- und Schemanamen bereitstellen, wenn von der Datenquelle mehrere Kataloge und Schemata (bei SQL Server Datenbank- und Objektbesitzer) untersttzt werden. ber die an den OLE DB-Provider bermittelte user-id werden die der Verbindung zugeordneten Berechtigungen bestimmt. Anstelle eines Tabellennamens kann in der FROM-Klausel einer SELECTAnweisung die OPENROWSET-Funktion verwendet werden.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Beispiel 1

In diesem Beispiel wird ber den systemeigenen OLE DB-Provider fr SQL Server auf Informationen in der Northwind-Datenbank auf dem Server mit SQL Server London1 zugegriffen. Alle Verbindungsinformationen sowie die zu verarbeitende Abfrage sind in den Argumenten der OPENROWSETFunktion enthalten. Fr die Anmeldung an dem Remoteserver wird das newcustomer-Benutzerkonto verwendet.
SELECT a.* FROM OPENROWSET('SQLOLEDB', 'LONDON1'; 'newcustomer'; 'mypassword', 'SELECT ProductID, UnitPrice FROM Northwind.dbo.Products ORDER BY UnitPrice') AS a

Beispiel 2

In diesem Beispiel wird ber den OLE DB-Provider fr Microsoft Access (Jet) auf die Orders-Tabelle in der Northwind-Datenbank, die sich in einer AccessRemotedatenbank befindet, zugegriffen.
SELECT a.* FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0' 'C:\MSOffice\Access\Samples\Northwind.mdb'; 'newcustomer'; 'mypassword', Orders) AS a

Beispiel 3

In diesem Beispiel wird die Orders-Tabelle in der Northwind-Datenbank, die sich in einer Access-Remotedatenbank befindet, mit der Customers-Tabelle in der Northwind-Datenbank auf dem lokalen Server mit SQL Server verknpft.
USE Northwind SELECT cust.* ord.* FROM Customers as cust JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0' 'C:\MSOffice\Access\Samples\Northwind.mdb''; 'newcustomer'; 'mypassword', Orders) AS ord On cust.customerid = ord.customerid

Unterrichtseinheit 12: Programmieren fr mehrere Server

Einrichten einer Verbindungsserverumgebung


Beschreiben Sie die Vorteile einer verteilten Umgebung, und erlutern Sie die zum Einrichten einer solchen Umgebung erforderlichen Schritte.

Thema

SQL Server erlaubt den Zugriff auf andere Datenquellen Remoteserver muss mit dem lokalen Computer mit SQL Server verbunden sein

Lokaler Server mit SQL Server

Remoteserver mit SQL Server

Einstieg

Um mit Daten aus einer Remotedatenquelle von SQL Server oder einer anderen OLE DB-Datenquelle arbeiten zu knnen, mssen Sie einen Verbindungsserver einrichten.

Remoteserver mit SQL Server

Andere Datenquellen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Um mit Daten aus einer Remotedatenquelle von SQL Server oder einer anderen OLE DB-Datenquelle arbeiten zu knnen, mssen Sie einen Verbindungsserver einrichten. Ein Verbindungsserver ist eine OLE DB-Datenquelle, die bereits auf dem lokalen Server mit SQL Server registriert ist. Wenn auf diese verwiesen wird, wei der lokale Server, wo die Remotedaten und -objekte zu finden sind.

Vorteile von Verbindungsservern


Verbindungsserver ermglichen das Erstellen SQL Server-bergreifender Verknpfungen und anderer Abfragen, wenn Sie bereits im Voraus wissen, dass bestimmte Datenquellen zur Verfgung stehen sollen. Mit Hilfe eines Verbindungsservers knnen Sie Transact-SQL-Anweisungen direkt an eine Remoteinstanz von SQL Server senden. Diese Aktionen knnen als Teil einer verteilten Transaktion ausgefhrt werden. Beachten Sie bei der Verwendung von Verbindungsservern die folgenden Aspekte und Richtlinien: Sie knnen auf verteilte Daten zugreifen, die auf mehreren Servern mit SQL Server gespeichert sind, und Sie knnen auf heterogene Daten zugreifen, die in verschiedenen relationalen und nicht relationalen Datenquellen gespeichert sind. Es kann eine andere Datenquelle als SQL Server als Verbindungsserver definiert werden, wenn fr diese Quelle ein OLE DB-Provider vorhanden ist. Wenn Sie regelmig auf Informationen zugreifen, die sich auf einem anderen Computer mit SQL Server befinden, sollten Sie diesen Remoteserver auf Ihrem lokalen SQL Server-Computer als Verbindungsserver definieren. Informationen ber Verbindungsserver finden Sie in der sysserversSystemtabelle.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Einrichten von Verbindungsservern


Um Verbindungsserver einzurichten, mssen Sie zunchst eine Verbindung mit einer Remotedatenquelle herstellen und dann die Sicherheit zwischen den Servern einrichten.

Unterrichtseinheit 12: Programmieren fr mehrere Server

Herstellen einer Verbindung mit einer Remotedatenquelle


Thema
Beschreiben Sie, wie eine Verbindung mit einem Remoteserver oder einer OLE DB-Datenquelle hergestellt wird.

Herstellen einer Verbindung mit einem Remoteserver mit SQL Server


EXEC sp_addlinkedserver EXEC sp_addlinkedserver @server = 'AccountingServer', @server = 'AccountingServer', @svrproduct = 'SQL Server' @svrproduct = 'SQL Server'

Einstieg

Um Transact-SQL-Anweisungen auf einem Remoteserver mit SQ Server oder fr eine OLE DB-Datenquelle auszufhren, mssen Sie eine Verbindung mit dem Server oder der Datenquelle herstellen.

Herstellen einer Verbindung mit einer OLE DBDatenquelle


EXEC sp_addlinkedserver EXEC sp_addlinkedserver @server = 'OracleFinance', @server = 'OracleFinance', @svrproduct = 'Oracle', @svrproduct = 'Oracle', @provider = 'MSDAORA', @provider = 'MSDAORA', @datasrc = 'OracleDB' @datasrc = 'OracleDB'

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Um Transact-SQL-Anweisungen auf einem Remoteserver mit SQL Server oder fr eine OLE DB-Datenquelle auszufhren, mssen Sie eine Verbindung mit dem Server oder der Datenquelle herstellen. Sie knnen eine Verbindung mit dem Remoteserver mit SQL Server mit Hilfe von SQL Server Enterprise Manager oder der gespeicherten Systemprozedur sp_addlinkedserver herstellen. Mit der gespeicherten Systemprozedur sp_addlinkedserver wird ein Remoteserver mit SQL Server auf dem lokalen Computer definiert und der OLE DB-Provider angegeben. sp_addlinkedserver [ @server = ] 'server' [ , [ @srvproduct = ] 'product_name' ] [ , [ @provider = ] 'provider_name' ] [ , [ @datasrc = ] 'data_source' ] [ , [ @location = ] 'location' ] [ , [ @provstr = ] 'provider_string' ] [ , [ @catalog = ] 'catalog' ] Die gespeicherte Systemprozedur sp_addserver ist abwrtskompatibel, Sie sollten jedoch sp_addlinkedserver verwenden. In der folgenden Tabelle sind die Parameter der gespeicherten Systemprozedur sp_addlinkedserver beschrieben.
Parameter @server @svrproduct @provider @datasrc @location Beschreibung Name des zu erstellenden Verbindungsservers. Produktname der OLE DB-Datenquelle. Eindeutiger, benutzerfreundlicher Name fr den OLE DB-Provider, der dieser Datenquelle entspricht. Durch den OLE DB-Provider ausgewerteter Name der Datenquelle. Durch den OLE DB-Provider ausgewerteter Speicherort der Datenquelle.

Fhren Sie vor, wie mit Hilfe von SQL Server Enterprise Manager eine Verbindung mit einer Remotedatenquelle hergestellt wird.

Syntax

10

Unterrichtseinheit 12: Programmieren fr mehrere Server (Fortsetzung) Parameter @provstr @catalog Beschreibung OLE DB-Provider-spezifische Verbindungszeichenfolge, ber die eine eindeutige Datenquelle identifiziert wird. Katalog, der beim Herstellen der Verbindung mit dem OLE DBProvider verwendet wird.

Herstellen einer Verbindung mit einem Remoteserver mit SQL Server


Wenn Sie eine Verbindung mit einem Server mit SQL Server herstellen mchten, mssen Sie lediglich die Parameter @srvproduct und @server angeben. Die Parameter @provider, @datasrc, @location, @provstr und @catalog mssen nicht angegeben werden. Es wird automatisch der OLE DB-Provider von SQL Server (N'SQLOLEDB') verwendet. Beispiel 1 In diesem Beispiel wird AccountingServer, ein Computer mit SQL Server, der Liste der Verbindungsserver, die auf dem lokalen SQL Server-Computer zur Verfgung stehen, hinzugefgt.
EXEC sp_addlinkedserver 'AccountingServer', 'SQL Server'

Herstellen einer Verbindung mit einer OLE DB-Datenquelle


Wenn Sie eine Verbindung mit einer anderen Datenquelle als SQL Server herstellen mchten, mssen Sie beim Erstellen eines Verbindungsservers sowohl die Parameter @provider, @datasrc, @location, @provstr und @catalog als auch die Parameter @srvproduct und @server angeben. Beispiel 2 In diesem Beispiel wird der Oracle-Server OracleFinance der Liste der Verbindungsserver, die auf dem lokalen SQL Server-Computer zur Verfgung stehen, hinzugefgt. In diesem Beispiel wird vorausgesetzt, dass ein SQL*NetAlias von OracleDB erstellt wurde. Dieser Alias wird fr den @datasrcParameter verwendet.
EXEC sp_addlinkedserver 'OracleFinance', 'Oracle', 'MSDAORA', 'OracleDB'

Unterrichtseinheit 12: Programmieren fr mehrere Server

11

Einrichten der Sicherheit fr Verbindungsserver


Beschreiben Sie, wie die Sicherheit zwischen Verbindungsservern eingerichtet wird.

Thema

Der lokale Server muss sich im Namen des Benutzers am Remoteserver mit SQL Server anmelden Wenn das Anmeldekonto des Benutzers auf beiden Servern vorhanden ist, kann es zur Anmeldung am Remoteserver verwendet werden Mit Hilfe von sp_addlinkedsrvlogin knnen Sie Anmeldekonten und Kennwrter zwischen Servern zuordnen Mit Hilfe von Security Account Delegation knnen Sie sich mit mehreren Servern und einer Authentifizierung verbinden Ohne Security Delegation mssen Sie die Verbindung von einem lokalen Anmeldekonto zu einem Anmeldekonto auf dem Verbindungsserver einrichten

Einstieg

Sie mssen gegebenenfalls die Sicherheit zwischen dem lokalen Server und einem Remoteserver einrichten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie mssen gegebenenfalls die Sicherheit zwischen dem lokalen Server und einem Remoteserver einrichten. Beachten Sie beim Einrichten der Sicherheit zwischen lokalen Servern und Remoteservern mit SQL Server die folgenden Aspekte: Wenn sich ein Benutzer am lokalen Server mit SQL Server anmeldet und eine verteilte Abfrage ausfhrt, meldet sich der lokale Server mit SQL Server im Namen des Benutzers am Remoteserver mit SQL Server an. Wenn das Anmeldekonto und das Kennwort des Benutzers sowohl auf dem lokalen Server als auch auf dem Remoteserver mit SQL Server vorhanden sind, kann der lokale Server mit SQL Server die Anmeldeinformationen des Benutzers zur Anmeldung am Remoteserver mit SQL Server verwenden. Es ist zweckmig, die Sicherheit auf diese Weise einzurichten, wenn von beiden Servern Domnenkonten verwendet werden. Mit Hilfe der gespeicherten Systemprozedur sp_addlinkedsrvlogin knnen Sie Anmeldekonten und Kennwrter zwischen lokalen Servern und Remoteservern mit SQL Server zuordnen. Wenn Sie einem Remoteanmeldekonto ein lokales Konto zuordnen, ist es nicht erforderlich, dass Sie auf dem Remoteserver mit SQL Server fr jeden Benutzer ein Anmeldekonto und ein Kennwort erstellen. Ein Benutzer kann sich beispielsweise an einer Clientanwendung anmelden, die auf einen lokalen Server mit SQL Server zugreift. Der lokale Server mit SQL Server greift anschlieend im Namen des Benutzers auf den Verbindungsserver zu und verwendet dazu fr alle Endbenutzer ein einziges Anmeldekonto. Das Anmeldekonto auf dem Verbindungsserver, dem das lokale Anmeldekonto zugeordnet ist, besitzt die Berechtigung fr den Zugriff auf eine bestimmte Tabelle.

12

Unterrichtseinheit 12: Programmieren fr mehrere Server

Es ist mglich, Verbindungen mit mehreren Servern herzustellen und bei jedem Serverwechsel die Authentifizierungs-Anmeldeinformationen des ursprnglichen Clients beizubehalten Dies wird als Delegieren des Sicherheitskontos bezeichnet. Um diese Delegierung nutzen zu knnen, mssen alle Server unter Microsoft Windows 2000 ausgefhrt werden und Provider verwenden, die SSPI (Security Support Provider Interface) einsetzen. Auerdem mssen Sie den Active Directory-Verzeichnisdienst verwenden. Anmerkung Weiter Informationen zum Delegieren von Sicherheitskonten finden Sie in der Windows 2000-Dokumentation. Wenn der Verbindungsserver das Delegieren von Sicherheitskonten nicht untersttzt, mssen Sie eine lokale Anmeldezuordnung zwischen einem Anmeldekonto fr die Windows-Authentifizierung und einem Anmeldekonto auf dem Verbindungsserver einrichten. Sie mssen eine Kontozuordnung einrichten, um eine Kommunikation ber Verbindungsserver zu ermglichen. Syntax sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' [ , [ @useself = ] 'useself' ] [ , [ @locallogin = ] 'locallogin' ] [ , [ @rmtuser = ] 'rmtuser' ] [ , [ @rmtpassword = ] 'rmtpassword' In der folgenden Tabelle sind die Parameter der gespeicherten Systemprozedur sp_addlinkedsrvlogin aufgelistet.
Parameter @rmtsrvname @useself Beschreibung Name eines Verbindungsservers, auf den sich die Benutzernamenzuordnung bezieht. Bestimmt, ob von den SQL Server-Anmeldekonten die eigenen Anmeldeinformationen oder die Werte der Argumente @rmtuser und @rmtpassword verwendet werden, um eine Verbindung mit dem Server herzustellen, der ber das Argument @rmtsrvname angegeben wurde. Fr ein Anmeldekonto fr die Windows-Authentifizierung ist der Wert TRUE fr @useself ungltig. Ein optionales Anmeldekonto auf dem lokalen Server. Falls dieser Parameter verwendet wird, muss @locallogin bereits auf dem lokalen Server vorhanden sein. Wenn dieser Wert NULL ist, werden alle Anmeldekonten auf dem lokalen Server mit SQL Server dem mit @rmtuser angegebenen Konto auf dem Remoteserver zugeordnet. Der optionale Benutzername fr die Verbindung mit @rmtsrvname, wenn der Wert fr @useself FALSE ist. Das optionale Kennwort, das @rmtuser zugeordnet ist.

@locallogin

@rmtuser @rmtpassword

Unterrichtseinheit 12: Programmieren fr mehrere Server

13

Beispiel 1

In diesem Beispiel kann ein Benutzer, der sich mit dem Anmeldekonto AccountWriter an dem lokalen Server mit SQL Server anmeldet, ber die Anmeldeinformationen des Anmeldekontos rmtAccountWriter auf Remotedaten auf dem Server mit SQL Server AccountingServer zugreifen.
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'AccountingServer', @useself = 'false', @locallogin = 'Accountwriter', @rmtuser = 'rmtAccountWriter', @rmtpassword = 'financepass'

Beispiel 2

In diesem Beispiel wird die Sicherheit zwischen einem lokalen Server mit SQL Server und einem Verbindungsserver mit SQL Server eingerichtet. Benutzer des lokalen Servers mit SQL Server, die auf Remotedaten auf dem Verbindungsserver AccountingServer zugreifen, sind ber das Benutzerkonto AccountingServer/allcustomers am Remoteserver mit SQL Server angemeldet.
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'AccountingServer', @useself = 'false', @rmtuser= 'allcustomers'

14

Unterrichtseinheit 12: Programmieren fr mehrere Server

Konfigurieren von Optionen fr Verbindungsserver


Thema
Beschreiben Sie, wie die Sicherheit zwischen Verbindungsservern eingerichtet wird.

Kompatibel mit Sortierung


USE master USE master EXEC sp_serveroption 'AccountingServer', EXEC sp_serveroption 'AccountingServer', 'collation compatible', true 'collation compatible', true

Einstieg

Sie mssen gegebenenfalls die Sicherheit zwischen dem lokalen Server und einem Remoteserver einrichten.

Name der Sortierung und Remotesortierung verwenden Datenzugriff RPC und RPC-Ausgabe Verzgerte Schemagltigkeitsprfung

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe der gespeicherten Systemprozedur sp_serveroption knnen Sie Optionen fr Verbindungsserver festlegen. Die sp_serveroption-Prozedur kann nur von Mitgliedern der sysadmin-Serverrolle zum Einstellen von Serveroptionen verwendet werden. Syntax sp_serveroption ['server'] [, 'option_name'] [, 'option_value'] Die folgenden Optionen wirken sich auf Verbindungsserver aus.

Kompatibel mit Sortierung


Diese Option wirkt sich auf die Ausfhrungsleistung einer verteilten Abfrage fr Verbindungsserver aus. Wenn fr diese Option true festgelegt ist, geht SQL Server davon aus, dass alle Spalten und Zeichenstze auf dem Remoteserver mit dem Zeichensatz und der Sortierung des lokalen Servers kompatibel sind. Dies ermglicht SQL Server, Vergleiche fr Zeichenspalten an den Provider zu senden. Wenn diese Option nicht aktiviert ist, muss SQL Server alle Zeilen an den lokalen Server zurckgeben, um Vergleiche in Zeichenspalten durchzufhren. Diese Option sollte nur dann aktiviert werden, wenn die Datenquelle, die den Verbindungsserver darstellt, denselben Zeichensatz und dieselbe Sortierung besitzt wie der lokale Server. Beispiel In diesem Beispiel wird der Verbindungsserver AccountingServer so konfiguriert, dass er mit der Sortierung des lokalen Servers mit SQL Server kompatibel ist.
USE master EXEC sp_serveroption 'AccountingServer', 'collation compatible', true

Unterrichtseinheit 12: Programmieren fr mehrere Server

15

Name der Sortierung und Remotesortierung verwenden


Die folgenden beiden Optionen werden oft gemeinsam verwendet. Name der Sortierung Diese Option gibt den Namen der Sortierung an, die von der Remotedatenquelle verwendet wird, wenn Remotesortierung verwenden auf true gesetzt ist und die Datenquelle keine SQL Server-Datenquelle ist. Fr diese Option gelten folgende Bedingungen: Der Name muss eine von SQL Server untersttzte Sortierung sein. Verwenden Sie diese Option, wenn Sie auf eine andere OLE DB-Datenquelle als SQL Server zugreifen und diese Datenquelle eine Sortierung besitzt, die mit einer der SQL Server-Sortierungen bereinstimmt. Der Verbindungsserver muss eine einzelne Sortierung untersttzen, die fr alle Spalten in diesem Server verwendet wird. Remotesortierung verwenden Diese Option bestimmt, ob SQL Server die Sortierung einer Remotespalte oder eines lokalen Servers verwendet. Wenn true festgelegt ist, wird fr SQL Server-Datenquellen die Sortierung der Remotespalten und fr Datenquellen, die keine SQL Server-Datenquellen sind, die in collation name angegebene Sortierung verwendet. Wenn false festgelegt ist, verwenden verteilte Abfragen immer die Standardsortierung des lokalen Servers. Der Standardwert ist false.

Datenzugriff
Diese Option aktiviert und deaktiviert einen Verbindungsserver fr Zugriffe ber verteilte Abfragen. Sie knnen die Option nur fr sysserver-Eintrge verwenden, die mit sp_addlinkedserver hinzugefgt werden. Beispiel In diesem Beispiel wird der Remoteserver AccountingServer fr den Datenzugriff konfiguriert und die Verwendung dieses Servers als Verbindungsserver ermglicht.
USE master EXEC sp_serveroption 'AccountingServer', 'data access', true

RPC und RPC-Ausgabe


Die Option RPC ermglicht RPCs (Remote Procedure Calls) von einem angegebenen Server. Die Option RPC-Ausgabe ermglicht RPCs an einen angegebenen Verbindungsserver.

Verzgerte Schemagltigkeitsprfung
Diese Option bestimmt, ob das Schema von Remotetabellen berprft wird. Wenn true festgelegt wird, wird das Schema von Remotetabellen am Anfang der Abfrage nicht von SQL Server berprft. Eine Verzgerung der Schemaberprfung kann die Leistung verbessern.

16

Unterrichtseinheit 12: Programmieren fr mehrere Server

Abrufen von Informationen ber Verbindungsserver


Thema
Beschreiben Sie, wie Informationen ber Verbindungsserver gesammelt werden.
Gespeicherte Gespeicherte Systemprozedur Systemprozedur sp_linkedservers sp_linkedservers sp_catalogs sp_catalogs sp_indexes sp_indexes sp_primarykeys sp_primarykeys sp_foreignkeys sp_foreignkeys sp_tables_ex sp_tables_ex sp_columns_ex sp_columns_ex Rckgabe Rckgabe Liste der Verbindungsserver, die auf dem lokalen Liste der Verbindungsserver, die auf dem lokalen Server definiert sind Server definiert sind Liste der Kataloge und Beschreibungen zu einem Liste der Kataloge und Beschreibungen zu einem bestimmten Verbindungsserver bestimmten Verbindungsserver Indexinformationen zu der angegebenen Remotetabelle Indexinformationen zu der angegebenen Remotetabelle Primre Schlsselspalten, und zwar eine Zeile pro Primre Schlsselspalten, und zwar eine Zeile pro Schlsselspalte, fr die angegebene Tabelle Schlsselspalte, fr die angegebene Tabelle Fremdschlssel, die in der angegebenen Fremdschlssel, die in der angegebenen Remotetabelle definiert sind Remotetabelle definiert sind Tabelleninformationen aus Tabellen des angegebenen Tabelleninformationen aus Tabellen des angegebenen Verbindungsservers Verbindungsservers Spalteninformationen, entweder fr alle Spalten oder Spalteninformationen, entweder fr alle Spalten oder Eine bestimmte Spalte fr verbundene Tabellen Eine bestimmte Spalte fr verbundene Tabellen

Einstieg

Informationen ber Verbindungsserver knnen Sie ber SQL Server Enterprise Manager, aber auch ber die folgenden gespeicherten Prozeduren abrufen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Informationen ber Verbindungsserver knnen Sie mit Hilfe von SQL Server Enterprise Manager, aber auch mit Hilfe der folgenden gespeicherten Prozeduren sammeln. sp_linkedservers Von dieser gespeicherten Systemprozedur wird eine Liste der Verbindungsserver, die auf dem lokalen Server definiert sind, zurckgegeben. sp_catalogs Von dieser gespeicherten Systemprozedur wird eine Liste der Kataloge und Beschreibungen zu einem bestimmten Verbindungsserver zurckgegeben. Bei Remoteservern mit SQL Server ist dies eine Liste der verfgbaren Datenbanken. sp_indexes Von dieser gespeicherten Systemprozedur werden Indexinformationen zu der angegebenen Remotetabelle zurckgegeben. Syntax Beispiel sp_indexes {'table_server'} [, 'table_name'] [, 'table_schema'] [, 'table_catalog'][, 'index'] [, 'is_unique'] In diesem Beispiel werden alle Indexinformationen aus der Employees-Tabelle der Northwind-Datenbank zurckgegeben, die auf dem Server Cairo gespeichert ist.
USE master EXEC sp_indexes 'CAIRO', 'Employees', 'dbo', 'Northwind', NULL, 0

sp_primarykeys Von dieser gespeicherten Systemprozedur werden die primren Schlsselspalten, und zwar eine Zeile pro Schlsselspalte, fr die angegebene Tabelle zurckgegeben. sp_foreignkeys Von dieser gespeicherten Systemprozedur werden die Fremdschlssel zurckgegeben, die in der angegebenen Remotetabelle definiert sind.

Unterrichtseinheit 12: Programmieren fr mehrere Server

17

sp_tables_ex Diese gespeicherte Systemprozedur ist eine Version von sp_tables, die bei Remotedatenquellen verwendet wird. Von dieser Prozedur werden Tabelleninformationen aus Tabellen, die auf dem angegebenen Verbindungsserver gespeichert sind, zurckgegeben. Syntax sp_tables_ex {'table_server'} [, 'table_name'] [, 'table_schema'] [, 'table_catalog'] [, 'table_type'] sp_columns_ex Dies ist eine Version von sp_columns fr Verbindungsserver. Von dieser gespeicherten Systemprozedur werden die Spalteninformationen, entweder fr alle Spalten oder eine bestimmte Spalte, fr die angegebene Tabelle auf dem Verbindungsserver zurckgegeben. Wenn eine Spalte angegeben ist, werden nur Informationen zu dieser speziellen Spalte zurckgegeben. Syntax sp_columns_ex {'table_server'} [, 'table_name'] [, 'table_schema'] [, 'table_catalog'] [, 'column']

18

Unterrichtseinheit 12: Programmieren fr mehrere Server

Ausfhren einer Abfrage auf einem Verbindungsserver


Thema
Geben Sie eine bersicht ber die Art der Ausfhrung einer Abfrage auf einem Verbindungsserver.

Arbeiten mit Verbindungsservern Ausfhren von Verbindungsserverabfragen Ausfhren von Pass-Through-Abfragen

Einstieg

Mit SQL Server kann eine verteilte Abfrage lokal auf dem lokalen Server oder remote auf einem Verbindungsserver verarbeitet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit SQL Server kann eine verteilte Abfrage lokal auf dem lokalen Server oder remote auf einem Verbindungsserver verarbeitet werden.

Unterrichtseinheit 12: Programmieren fr mehrere Server

19

Arbeiten mit Verbindungsservern


Thema
Beschreiben Sie, wie auf Daten in Tabellen zugegriffen wird, die auf einem Verbindungsserver gespeichert sind.

Optimieren von Remoteabfragen durch SQL Server Verweisen auf Objekte, die auf Verbindungsservern gespeichert sind Zulssige Transact-SQL-Anweisungen
SELECT, INSERT, UPDATE, DELETE

Einstieg

Sie knnen mehrere Datenquellen in eine Abfrage einschlieen.

Nicht zulssige Transact-SQL-Anweisungen


CREATE, ALTER, DROP ORDER BY auf Remotetabellen mit groen Objekten READTEXT, WRITETEXT, UPDATETEXT

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit verteilten Abfragen kann auf Daten mehrerer Datenquellen, z. B. OLE DBProvider und andere Server mit SQL Server, zugegriffen werden.

Optimieren von Remoteabfragen durch SQL Server


SQL Server versucht, die Auswertung verteilter Abfragen an die OLE DBProvider zu delegieren. SQL Server extrahiert diejenigen syntaktischen Elemente aus der ursprnglichen verteilten Abfrage, die nur auf die Remotetabellen in der Datenquelle des Providers zugreifen, und fhrt dann die reduzierte Abfrage auf dem Provider aus. Durch dieses Verfahren wird die Anzahl der Zeilen, die vom Provider zurckgegeben werden, reduziert und dem Provider die Mglichkeit gegeben, seine Indizes zur Auswertung der Abfrage zu verwenden.

Verweisen auf Objekte, die auf Verbindungsservern gespeichert sind


Beim Ausfhren verteilter Abfragen mssen Sie fr den Verweis auf die Verbindungsobjekte vierteilige Namen verwenden, die das folgende Format besitzen: linked-server-name.catalog-name.schema-name.object-name Die folgende Tabelle enthlt eine Beschreibung dieser Parameter:
Parameter linked-server-name catalog-name schema-name Beschreibung Der netzwerkweite Name eines Verbindungsservers. Der Name einer Datenbank. Die Sammlung von Objekten, die sich im Besitz eines bestimmten Benutzers befinden - der Name entspricht dem des Objektbesitzers. Verweist auf die Tabelle, auf die Sie zugreifen mchten.

object-name

20

Unterrichtseinheit 12: Programmieren fr mehrere Server

Um beispielsweise auf die Orders-Tabelle zu verweisen, die sich im Besitz der database owner (dbo)-Rolle in der Northwind-Datenbank auf dem Verbindungsserver Corpserver befindet, verwenden Sie in Ihrer Abfrage den vierteiligen Namen corpserver.Northwind.dbo.Orders.

Zulssige Transact-SQL-Anweisungen
Wenn Sie einen Verbindungsserver mit SQL Server verwenden, knnen Sie folgende Transact-SQL-Anweisungen auf Verbindungsdaten ausfhren: SELECT-Anweisung mit einer WHERE-Klausel oder einer JOIN-Klausel INSERT-, UPDATE- und DELETE-Anweisungen

Nicht zulssige Transact-SQL-Anweisungen


Betonen Sie, dass dies nur eine unvollstndige Liste ist.

Methodischer Hinweis

Bei der Verwendung eines Verbindungsservers mit SQL Server ist Folgendes nicht zulssig: Verwenden von CREATE-, ALTER- oder DROP-Anweisungen auf Verbindungsservern. Sie knnen daher keine CREATE TABLE-Anweisung ausfhren, die eine SELECT INTO-Anweisung enthlt. Sie knnen jedoch Verbindungsdaten als Quelle fr Tabellen verwenden, die mit der SELECT INTO-Anweisung auf dem lokalen Server erstellt werden. Einschlieen einer ORDER BY-Klausel in eine SELECT-Anweisung, wenn die Auswahlliste der SELECT-Anweisung eine umfangreiche Objektspalte aus einer Verbindungstabelle enthlt. Verwenden von READTEXT-, WRITETEXT- und UPDATETEXT-Anweisungen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

21

Ausfhren von Verbindungsserverabfragen


Thema
Beschreiben Sie, wie ein Verbindungsserver abgefragt wird.

Verwenden von voll gekennzeichneten Namen beim Verweisen auf Objekte auf Verbindungsservern
Beispiel 1 SELECT CompanyName SELECT CompanyName FROM AccountingServer.NorthwindRemote.dbo.Suppliers FROM AccountingServer.NorthwindRemote.dbo.Suppliers Beispiel 3 SELECT CompanyName, Phone SELECT CompanyName, Phone INTO PhoneList INTO PhoneList FROM AccountingServer.NorthwindRemote.dbo.Suppliers FROM AccountingServer.NorthwindRemote.dbo.Suppliers

Einstieg

Beim Abfragen eines Verbindungsservers sollten Sie fr den Verweis auf Objekte die voll gekennzeichneten, vierteiligen Objektnamen verwenden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Abfragen eines Verbindungsservers sollten Sie fr den Verweis auf Objekte die voll gekennzeichneten, vierteiligen Objektnamen verwenden. Beispiel 1 In diesem Beispiel werden die Firmennamen aus der Suppliers-Tabelle in der NorthwindRemote-Datenbank abgerufen, die auf dem Verbindungsserver AccountingServer gespeichert ist.
SELECT CompanyName FROM AccountingServer.NorthwindRemote.dbo.Suppliers

Beispiel 2

In diesem Beispiel wird die Suppliers-Tabelle in der NorthwindRemoteDatenbank, die auf dem Verbindungsserver gespeichert ist, mit der ProductsTabelle auf dem lokalen Server mit SQL Server verknpft.
SELECT ProductName, CompanyName FROM Products p JOIN AccountingServer.NorthwindRemote.dbo.Suppliers ON p.supplierid = s.supplierid

Beispiel 3

In diesem Beispiel werden Daten aus einer Tabelle auf einem Verbindungsserver mit SQL Server mit Hilfe einer SELECT INTO-Anweisung erstellt und in eine permanente Tabelle auf dem lokalen Server mit SQL Server bertragen. Wenn Sie dieses Beispiel ausfhren mchten, mssen Sie die SELECT INTO/BULK COPY-Datenbankoption aktivieren.
SELECT CompanyName, Phone INTO PhoneList FROM AccountingServer.NorthwindRemote.dbo.Suppliers

22

Unterrichtseinheit 12: Programmieren fr mehrere Server

Ausfhren von Pass-Through-Abfragen


Thema
Beschreiben Sie, wie PassThrough-Abfragen auf einem Verbindungsserver ausgefhrt werden.

Verwenden der OPENQUERY-Funktion, um PassThrough-Abfragen auf Verbindungsservern auszufhren Verwenden der OPENQUERY-Funktion in einer SELECTAnweisung anstelle eines Tabellennamens Verwenden des Ergebnisses einer OPENQUERYFunktion als Zieltabelle einer INSERT-, UPDATE- oder DELETE-Anweisung
SELECT * FROM OPENQUERY SELECT * FROM OPENQUERY (AsiaServer, 'SELECT ProductID, Royalty (AsiaServer, 'SELECT ProductID, Royalty FROM Northwind.dbo.ProductInfo') FROM Northwind.dbo.ProductInfo')

Einstieg

Beim Abfragen eines Verbindungsservers knnen Sie angeben, dass SQL Server eine Pass-Through-Abfrage ausfhren soll.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Abfragen eines Verbindungsservers knnen Sie angeben, dass SQL Server eine Pass-Through-Abfrage ausfhren soll. Verwenden Sie die OPENQUERY-Funktion, um Pass-Through-Abfragen auf einem Verbindungsserver auszufhren. Syntax OPENQUERY (linked_server, 'query') Beachten Sie die folgenden Aspekte, wenn Sie Pass-Through-Abfragen mit Hilfe der OPENQUERY-Funktion ausfhren: Sie knnen das Ergebnis der OPENQUERY-Funktion mit einer SELECTAnweisung anstelle eines Tabellennamens verwenden. Sie knnen das Ergebnis der OPENQUERY-Funktion als Zieltabelle einer INSERT-, UPDATE- oder DELETE-Anweisung verwenden, wenn diese Aktionen vom OLE DB-Provider fr die Datenquelle untersttzt werden. Beispiel 1 In diesem Beispiel wird mit Hilfe der OPENQUERY-Funktion eine SELECTAnweisung auf dem Verbindungsserver AsiaServer verarbeitet und das Ergebnis an den lokalen Server mit SQL Server zurckgegeben. Gehen Sie davon aus, dass AsiaServer bereits als Verbindungsserver eingerichtet und die Sicherheit hergestellt wurde.
SELECT * FROM OPENQUERY(AsiaServer, 'SELECT ProductID, Royalty FROM Northwind.dbo.ProductInfo')

Beispiel 2

In diesem Beispiel werden mit Hilfe der OPENQUERY-Funktion nicht mehr im Lieferprogramm enthaltene Produkte aus der Northwind.Products-Tabelle auf dem Verbindungsserver AsiaServer gelscht. Die gesamte Verarbeitung der DELETE-Anweisung wird auf dem Verbindungsserver AsiaServer ausgefhrt.
DELETE FROM OPENQUERY(AsiaServer, 'Northwind.dbo.Products') WHERE Discontinued = 1

Unterrichtseinheit 12: Programmieren fr mehrere Server

23

Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver


Thema
Beschreiben Sie, wie eine gespeicherte Prozedur auf einem Remoteserver ausgefhrt werden kann.
Lokaler Server
Aufruf einer gespeicherten Prozedur

Verbindungsserver

Einstieg

Parameter und Ausgabe

Es ist mglich, eine gespeicherte Prozedur auf einem Verbindungsserver auszufhren.

Verarbeitung von gespeicherten Prozeduren

Benutzer

EXEC accounting.master.dbo.sp_helpntgroup EXEC accounting.master.dbo.sp_helpntgroup

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein Client, der mit einem Server mit SQL Server verbunden ist, kann ber gespeicherte Prozeduren auf einem Verbindungsserver eine gespeicherte Prozedur auf einem anderen Server mit SQL Server ausfhren, ohne dass eine Clientverbindung mit diesem Server hergestellt werden muss. Der Server, mit dem der Client verbunden ist, akzeptiert die Clientanfrage und sendet sie an den Verbindungsserver. Die EXECUTE-Anweisung muss den Namen des Verbindungsservers als Teil der Syntax enthalten. Der Verbindungsserver verarbeitet die Anforderung und gibt alle Ergebnisse an den ursprnglichen Server zurck, der diese Ergebnisse wiederum an den Client weiterleitet. Anforderungen fr das Ausfhren gespeicherter Prozeduren auf einem Verbindungsserver knnen sowohl von Anwendungen auf dem Client als auch von Anwendungen auf dem Server initiiert werden. Syntax Beispiel EXECUTE servername.dbname.owner. procedure_name Mit der folgenden Batchdatei wird die gespeicherte Systemprozedur sp_helpntgroup auf dem Remoteserver Accounting ausgefhrt. Die gespeicherte Systemprozedur listet die Windows 2000-Gruppen auf und gibt die Datenbanken an, auf die die Gruppen zugreifen knnen.
EXEC accounting.master.dbo.sp_helpntgroup

24

Unterrichtseinheit 12: Programmieren fr mehrere Server

Verwalten von verteilten Transaktionen


Beschreiben Sie, wie verteilte Transaktionen verwaltet werden.

Thema

Verwalten von verteilten Transaktionen mit MS DTC Verwalten von verteilten Transaktionen ber die Komponentendienste

Einstieg

Mit verteilten Transaktionen werden Aktivitten auf mehreren Ressourcen als eine einzelne Arbeitseinheit koordiniert.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit verteilten Transaktionen werden Aktivitten auf mehreren Ressourcen als eine einzelne Arbeitseinheit koordiniert. SQL Server untersttzt verteilte Transaktionen, die es Benutzern ermglichen, mehrere SQL Server-Datenbanken und andere Datenquellen zu aktualisieren. Sie haben auch die Mglichkeit, verteilte Transaktionen zwischen Komponenten mit Hilfe der Windows 2000-Komponentendienste zu koordinieren.

Verwalten von verteilten Transaktionen mit MS DTC


MS DTC (Microsoft Distributed Transaction Coordinator) koordiniert die Ausfhrung des Commits fr eine verteilte Transaktion ber alle Server, die an der Transaktion beteiligt sind. Diese Server knnen neben Komponenten der mittleren Ebene auch SQL Server einschlieen. Sie knnen MS DTC mit Hilfe einer gespeicherten SQL Server-Prozedur verwenden, um Transaktionen ber mehrere SQL Server-Computer hinweg oder zwischen einem Server mit SQL Server und Verbindungsservern zu koordinieren. Sie knnen Remotecomputer mit SQL Server in eine verteilte Transaktion aufnehmen. Eine gespeicherte Prozedur gibt eine BEGIN DISTRIBUTED TRANSACTION-Anweisung aus und fhrt dann einen gespeicherten RPC (Remote Procedure Call) mit einem Verweis auf einen Remoteserver oder eine verteilte Abfrage mit einem Verweis auf einen Remote- oder Verbindungsserver aus.

Verwalten von verteilten Transaktionen ber die Komponentendienste


Verwenden Sie die Komponentendienste zum Bereitstellen und Verwalten von verteilten Transaktionen. Der zugrunde liegende Mechanismus ist MS DTC. Komponenten der mittleren Ebene knnen an einer verteilten Transaktion teilnehmen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

25

ndern von Daten auf einem Verbindungsserver


Thema
Geben Sie eine bersicht ber verteilte Transaktionen.

Verteilte Transaktion ausfhren durch: Ausfhren von BEGIN DISTRIBUTED TRANSACTION - ODER Aufrufen einer API-Funktion von einem Client Bedenken Sie Folgendes: BEGIN DISTRIBUTED TRANSACTION-Anweisungen knnen nicht geschachtelt werden ROLLBACK TRANSACTION fhrt einen Rollback fr die gesamte Transaktion aus Sicherungspunkte werden nicht untersttzt Aktivieren Sie die Sitzungsoption XACT_ABORT

Einstieg

Wenn Sie Daten auf einem Verbindungsserver ndern mchten, knnen Sie eine verteilte Transaktion ber die BEGIN DISTRIBUTED TRANSACTION-Anweisung ausfhren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie Daten auf einem Verbindungsserver ndern mchten, mssen Sie eine verteilte Transaktion ausfhren. Sie knnen eine BEGIN DISTRIBUTED TRANSACTION-Anweisung ausfhren oder in einer Clientanwendung die API-Funktionen referenzieren. Syntax Beispiel BEGIN DISTRIBUTED TRANSACTION [transaction_name] Im folgenden Beispiel wird ein Geldbetrag ber eine verteilte Transaktion zwischen zwei Bankkonten, die sich auf verschiedenen Servern befinden, berwiesen. Mit Hilfe der gespeicherten Prozedur withdraw auf dem lokalen Server wird Geld von einem Sparkonto abgehoben. Auf einem Verbindungsserver wird dann eine gespeicherte Prozedur mit dem Namen deposit ausgefhrt, um das Geld auf ein Girokonto zu berweisen. Von dem Konto 1234 auf dem lokalen Server werden einhundert Dollar abgehoben und auf das entsprechende Girokonto auf dem Verbindungsserver Centralserver berwiesen. Sowohl von der lokalen Datenbank als auch von der Verbindungsdatenbank wird ein Commit bzw. ein Rollback fr die Transaktion durchgefhrt.
SET XACT_ABORT ON BEGIN DISTRIBUTED TRANSACTION EXEC Savingsdb.dbo.withdraw 1234, 100 EXEC Centralserver.Checkingdb.dbo.deposit 1234, 100 COMMIT TRAN

26

Unterrichtseinheit 12: Programmieren fr mehrere Server

Beachten Sie beim Ausfhren von verteilten Transaktionen die folgenden Aspekte: BEGIN DISTRIBUTED TRANSACTION-Anweisungen knnen nicht geschachtelt werden. SQL Server erkennt solche Aufrufe, weist sie zurck und gibt eine Fehlermeldung aus. Mit einer ROLLBACK TRANSACTION-Anweisung wird ein Rollback fr die gesamte verteilte Transaktion durchgefhrt. Sicherungspunkte werden nicht untersttzt. Wenn SQL Server ein Rollback fr eine verteilte Transaktion ausfhrt, erfolgt das Rollback fr die gesamte Transaktion bis zum Beginn der verteilten Transaktion, wobei Sicherungspunkte nicht beachtet werden. Bei der Ausfhrung von verteilten Transaktionen zwischen Verbindungsservern mssen Sie die Sitzungsoption XACT_ABORT aktivieren. Wenn die Sitzungsoption XACT_ABORT aktiviert ist und bei der Ausfhrung der Transact-SQL-Anweisung ein Fehler auftritt, wird ein Rollback fr die gesamte Transaktion ausgefhrt. Ist diese Option nicht aktiviert, wird ein Rollback nur fr die fehlerhafte Anweisung ausgefhrt und die Verarbeitung der Transaktion fortgesetzt.

Unterrichtseinheit 12: Programmieren fr mehrere Server

27

Verwenden partitionierter Sichten


Geben Sie eine bersicht ber die Verwendung partitionierter Sichten zur Leistungsverbesserung.

Thema

Verwenden von partitionierten Sichten Funktionsweise von partitionierten Sichten Implementieren von verteilten partitionierten Sichten Aspekte zum Partitionieren von Daten

Einstieg

Partitionierte Sichten knnen die Leistung verbessern, indem sie die Verarbeitung auf mehrere Server verteilen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Partitionierte Sichten knnen die Leistung verbessern, indem sie die Verarbeitungsvorgnge auf mehrere Server verteilen.

28

Unterrichtseinheit 12: Programmieren fr mehrere Server

Verwenden von partitionierten Sichten


Beschreiben Sie die Verwendungsmglichkeiten von verteilten partitionierten Sichten.

Thema

Skalierbarkeit
Einem einzelnen Server mehr Hardware hinzufgen Arbeitsauslastung und Datenbank ber mehrere unabhngige Computer verteilen

Einstieg

Bei zunehmender Arbeitsauslastung mssen Sie auf einfache Weise Ressourcen hinzufgen knnen.

Vorteile von partitionierten Sichten


Ergebnisse aus verschiedenen Tabellen knnen wie eine einzige Tabelle angezeigt werden Datenspeicherort ist fr die Anwendung transparent Datenbank wird wie eine Einzelentitt programmiert

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei zunehmender Arbeitsauslastung mssen Sie auf einfache Weise Ressourcen hinzufgen knnen.

Skalierbarkeit
Verwenden Sie das Verfahren der Skalierbarkeit, um die Ressourcen eines Computers auszubauen, damit sie die Anforderungen einer zunehmenden Arbeitsauslastung langfristig erfllen. Sie knnen Skalierbarkeit erreichen, indem Sie entweder in einem Einzelserver Hardware hinzufgen oder die Datenbank auf mehrere unabhngige Computer verteilen. Das Partitionieren der Arbeitsauslastung in einem Array eignet sich besonders fr E-CommerceAnwendungen, die sich durch ein sehr groes Wachstum auszeichnen.

Vorteile von partitionierten Sichten


Mit Hilfe von Sichten knnen Sie Daten auf mehrere Datenbanken oder Instanzen von SQL Server verteilen. Die Verwendung von partitionierten Sichten hat folgende Vorteile: Die Ergebnisse einzelner Tabellen knnen zu einem einzigen Resultset zusammengefasst werden, das sich dem Benutzer wie eine einzelne Tabelle, eine partitionierte Sicht, darstellt. Der Speicherort der Daten ist fr die Anwendung transparent. Die Datenbank wird wie eine Einzelentitt programmiert.

Unterrichtseinheit 12: Programmieren fr mehrere Server

29

Funktionsweise von partitionierten Sichten


Thema
Beschreiben Sie die Funktionsweise von partitionierten Sichten.
Kunde Kunde AA ~~ ~~ ~~ ~~ ~~ ~~ BB ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ Tabelle B Tabelle B BB ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

Einstieg

Mit Hilfe partitionierter Sichten knnen Daten in einer groen Tabelle horizontal in kleinere Tabellen partitioniert werden.

Tabelle A Tabelle A AA ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

CREATE VIEW CREATE VIEW Cust_View Cust_View SELECT Table A Mitglied SELECT Table A Server 1 UNION ALL UNION ALL SELECT Table B SELECT Table B
Kunde Kunde AA ~~ ~~ ~~ ~~ ~~ ~~ BB ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~ ~~

CREATE VIEW CREATE VIEW Cust_View Cust_View SELECT Table A Mitglied SELECT Table A UNION ALL Server 2 UNION ALL SELECT Table B SELECT Table B

Partitionierte Sicht

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe partitionierter Sichten knnen Daten in einer groen Tabelle horizontal in kleinere Mitgliedstabellen partitioniert werden. Jede Mitgliedstabelle hat dasselbe Format wie die ursprngliche Tabelle, enthlt jedoch nur einen Teil der Zeilen. Ein Server mit einer Mitgliedstabelle wird als Mitgliedsserver bezeichnet. Jeder Mitgliedsserver enthlt eine Mitgliedstabelle und eine verteilte partitionierte Sicht. Eine Anwendung, die auf die partitionierte Sicht auf einem der Server verweist, erhlt dieselben Ergebnisse, die sie auch erhalten wrde, wenn auf den Servern eine vollstndigen Kopie der ursprnglichen Tabelle verfgbar wre.

Lokale und verteilte partitionierte Sichten


Sie knnen partitionierte Sichten lokal auf einem Einzelserver oder in einer verteilten Umgebung auf mehreren Servern implementieren. Lokal partitionierte Sichten verweisen auf Mitgliedstabellen auf einem Server. Verteilte partitionierte Sichten verweisen auf Mitgliedstabellen auf mehreren Servern. Sie werden in den meisten Fllen verteilte partitionierte Sichten verwenden. Die Abbildung zeigt die Customer-Tabelle, die nach Regionen partitioniert ist. Region A befindet sich auf Mitgliedsserver 1 und Region B auf Mitgliedsserver 2. Auf jedem Server wird eine Sicht erstellt, mit deren Hilfe es mglich ist, die partitionierten Daten wie eine einzige Tabelle anzuzeigen. Diese Sicht wird als virtuelle Tabelle der ursprnglichen Tabelle angezeigt.

30

Unterrichtseinheit 12: Programmieren fr mehrere Server

Zum Implementieren partitionierter Sichten bentigte Features


Zum Implementieren partitionierter Sichten werden bestimmte SQL ServerFeatures bentigt. Diese Features sind in der folgenden Tabelle beschrieben.
Feature Sichten CHECKEinschrnkungen Verteilte Abfragen INSTEAD OF-Trigger Vorteil Ermglichen Benutzern die Anzeige aller partitionierten Tabellen als eine einzige Tabelle. Definieren und erzwingen die Integritt von Partitionen. Dienen zum Abfragen und Aktualisieren partitionierter Daten. Verwalten Aktualisierungen von Sichten.

Unterrichtseinheit 12: Programmieren fr mehrere Server

31

Implementieren von verteilten partitionierten Sichten


Beschreiben Sie die Schritte, die zum Implementieren von verteilten partitionierten Sichten erforderlich sind.

Thema

Einrichten von verteilten partitionierten Sichten:


1 1 2 2 3 3 4 4

Einstieg

Erstellen mehrerer Datenbanken, jede auf einem anderen Mitgliedsserver Horizontales Partitionieren der Tabellen Erstellen von Verbindungsserverdefinitionen auf den einzelnen Mitgliedsservern Erstellen einer partitionierten Sicht auf jedem Mitgliedsserver mit Hilfe des UNION ALL-Mengenoperators

Zum Einrichten von verteilten partitionierten Sichten sind vier Schritte erforderlich.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zum Einrichten von verteilten partitionierten Sichten sind vier Schritte erforderlich. 1. Erstellen mehrerer Datenbanken, jede auf einem anderen Mitgliedsserver mit einer SQL Server-Instanz. 2. Horizontales Partitionieren der Tabellen durch Erstellen von Tabellen auf den einzelnen Mitgliedsservern. 3. Erstellen von Verbindungsserverdefinitionen auf den einzelnen Mitgliedsservern. Die Verbindungsserverdefinition wird zum Senden verteilter Abfragen an die einzelnen Mitgliedsserver verwendet. 4. Erstellen einer partitionierten Sicht auf jedem Mitgliedsserver mit Hilfe des UNION ALL-Mengenoperators, um alle Zeilen aus den einzelnen Mitgliedsservertabellen zusammenzufassen. Alle Sichten sollten denselben Namen haben. Auf diese Weise knnen Abfragen, die auf den Namen der verteilten partitionierten Sicht verweisen, auf jedem Mitgliedsserver ausgefhrt werden.

32

Unterrichtseinheit 12: Programmieren fr mehrere Server

Aspekte zum Partitionieren von Daten


Beschreiben Sie einige der Aspekte, die beim Partitionieren von Daten zu bercksichtigen sind.

Thema

Aspekte zum Entwurf


Partitionieren der Daten, um verwandte Daten auf demselben Server zu belassen Minimieren von Zugriffszeit auf Daten auf anderen Mitgliedsservern Platzieren vollstndiger Datenstze auf demselben Mitgliedsserver Abrufen der geeigneten Spalte, um die Partition zu definieren

Einstieg

Ein guter Datenbankentwurf ist eine wichtige Voraussetzung fr das Partitionieren von Daten.

Methoden der Partitionierung Regeln fr die Partitionierung


**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Partitionieren ist dann problemlos, wenn die Tabellen in der Datenbank so aufgebaut sind, dass sie in hnliche Partitionen aufgeteilt werden knnen, wobei sich die meisten Zeilen, auf die eine SQL Server-Anweisung zugreift, auf demselben Mitgliedsserver befinden.

Aspekte zum Entwurf


Fr das Partitionieren sind die folgenden Aspekte zum Entwurf wichtig: Partitionieren der einzelnen Tabellen in der ursprnglichen Datenbank, sodass die meisten verwandten Daten auf einem Mitgliedsserver platziert werden. Minimieren von Anforderungen fr Daten auf anderen Mitgliedsservern. Verteilte Abfragen sollten nur fr maximal 20 Prozent der Daten erforderlich sein. Platzieren vollstndiger Datenstze auf demselben Mitgliedsserver. Eine Partition sollte es ermglichen, alle Zeilen auf demselben Mitgliedsserver zu platzieren wie die Zeilen mit den referenzierenden Fremdschlsseln. Um die Arbeitsauslastung gleichmig zu verteilen, sollten Sie die Partitionierung fr die Spalte definieren, ber die die Daten am gleichmigsten auf die partitionierten Tabellen verteilt werden. Beispielsweise kann ein Primrschlssel die beste Partitionierungsmethode sein, wenn Sie dabei einen Datenbereich fr jede Tabelle angeben. In einigen Fllen kann es vorteilhafter sein, nach einer Spalte, die keinen Primrschlssel enthlt, z. B. die Region, zu partitionieren.

Unterrichtseinheit 12: Programmieren fr mehrere Server

33

Methoden der Partitionierung


Ihnen stehen verschiedene Methoden zur Verfgung, mit denen Sie Daten auf verschiedene Tabelle ber alle Mitgliedsdatenbanken hinweg verteilen knnen. Folgende Punkte sollten Sie beachten: Partitionieren einiger Tabellen Erstellen vollstndiger Kopien anderer Tabellen in jeder Mitgliedsdatenbank. Beibehalten einiger Tabellen in unverndertem Zustand auf dem ursprnglichen Server.

Regeln fr die Partitionierung


Fr die Partitionierung gelten folgende Regeln: Tabellen mssen dasselbe Format haben wie die ursprngliche Tabelle. Tabellen mssen dieselbe Anzahl von Spalten mit denselben Attributen enthalten. Partitionsbereiche drfen sich nicht berlagern. Sie mssen den partitionierten Wertebereich fr jede Mitgliedstabelle mit Hilfe einer CHECK-Einschrnkung erzwingen.

34

Unterrichtseinheit 12: Programmieren fr mehrere Server

Empfohlene Methoden
Fassen Sie Tipps und Techniken zum Optimieren der Programmierung fr mehrere Server zusammen.

Thema

Verwenden Sie Verbindungsserver fr einen regelmigen RemoteVerwenden Sie Verbindungsserver fr einen regelmigen Remotedatenzugriff datenzugriff Verwenden Sie Ad-hoc-Abfragen fr einen unregelmigen RemoteVerwenden Sie Ad-hoc-Abfragen fr einen unregelmigen Remotedatenzugriff datenzugriff Richten Sie Verbindungsserver ein, um gespeicherte Prozeduren Richten Sie Verbindungsserver ein, um gespeicherte Prozeduren auf einem Remoteserver oder verteilte Abfragen auszufhren auf einem Remoteserver oder verteilte Abfragen auszufhren Schrnken Sie den Zugriff auf Verbindungsressourcen ein Schrnken Sie den Zugriff auf Verbindungsressourcen ein Vermeiden Sie das Einrichten doppelter Anmeldekonten auf Vermeiden Sie das Einrichten doppelter Anmeldekonten auf verschiedenen Servern verschiedenen Servern Whlen Sie die geeignete Spalte zum Definieren der Partition aus Whlen Sie die geeignete Spalte zum Definieren der Partition aus

Einstieg

Verwenden Sie die empfohlenen Methoden, um das Programmieren fr mehrere Server zu optimieren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden sollen Ihnen beim Programmieren fr mehrere Server helfen: Verwenden Sie Verbindungsserver, wenn Sie voraussichtlich regelmig auf Remotedaten zugreifen werden. Verwenden Sie Ad-hoc-Abfragen, wenn in Zukunft voraussichtlich nur wenige Zugriffe auf eine Datenquelle erfolgen werden. Richten Sie eine Verbindungsserverumgebung ein, in der Sie entweder gespeicherte Prozeduren auf einem Remoteserver oder verteilte Abfragen ausfhren. Schrnken Sie den Zugriff auf Verbindungsressourcen mit Hilfe von Anwendungsrollen oder lokalen Konten ein, die den Konten auf dem Verbindungsserver zugeordnet sind. Vermeiden Sie das Einrichten doppelter Anmeldekonten auf verschiedenen Servern. Ordnen Sie Benutzerkonten auf einem Server nur einem einzelnen Konto auf dem Verbindungsserver zu (mit den entsprechenden Berechtigungen), um auf Daten auf dem Verbindungsserver zuzugreifen. Whlen Sie die geeignete Spalte zum Definieren der Partition aus.

Unterrichtseinheit 12: Programmieren fr mehrere Server

35

Zustzliche Informationen zu den folgenden Themen erhalten Sie in der SQL Server-Onlinedokumentation.
Thema OLE DB-Provider Verbindungsserver Verbindungsserver-Sicherheit Pass-Through-Abfragen Ad-hoc-Abfragen Zulssige und nicht zulssige Transact-SQL-Anweisungen und -Aktionen Einschrnkungen fr verteilte Abfragen Suchbegriff "Mit SQL Server getestete OLE DB-Provider" sp_addlinkedserver sp_addlinkedsrvlogin OPENQUERY OPENROWSET "Zugreifen auf externe Daten mit Hilfe verteilter Abfragen" "externe Daten und Transact-SQL"

36

Unterrichtseinheit 12: Programmieren fr mehrere Server

bungseinheit A: Verwenden von verteilten Daten


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit richten Sie Verbindungsserver ein und fragen Remotedaten ab.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Einrichten eines Verbindungsservers und Herstellen der Sicherheit. Abfragen von Daten auf einem Verbindungsserver. Importieren von Daten von einem Verbindungsserver.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L12 befinden. Die Antwortdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L12\Answers befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore12.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Unterrichtseinheit 12: Programmieren fr mehrere Server

37

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 60 Minuten

38

Unterrichtseinheit 12: Programmieren fr mehrere Server

bung 1 Einrichten von Verbindungsservern


In dieser bung arbeiten Sie mit einem anderen Kursteilnehmer zusammen. Sie richten Ihren lokalen Server mit SQL Server als Remotedatenquelle fr Ihren Partner ein. Darber hinaus stellen Sie eine Verbindung zum Server mit SQL Server Ihres Partners her und verwalten die Sicherheit fr den Remotedatenzugriff. So erstellen Sie die ProductInfo-Tabelle auf Ihrem lokalen Server und fllen diese mit Daten In diesem Verfahren erstellen Sie eine neue Tabelle in der ClassNorthwindDatenbank. Diese Tabelle wird von Ihrem Partner verwendet. 1. Melden Sie sich an der Schulungsraumdomne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. Lassen Sie dieses Abfragefenster bis zum Ende der bung geffnet. 3. ffnen Sie das Skript Labfiles\L12\RemoteTbl.sql, berprfen Sie es, und fhren Sie es aus. Dieses Skript erstellt die ProductInfo-Tabelle in der ClassNorthwind-Datenbank.

Unterrichtseinheit 12: Programmieren fr mehrere Server

39

So erstellen Sie Anmeldekonten fr lokale und Remotebenutzer In diesem Verfahren erstellen Sie zwei neue Anmeldekonten: Das eine Konto verwendet Ihr Partner fr die Verbindung mit Ihrem Server mit SQL Server, das andere Konto verwenden Sie fr den Zugriff auf Verbindungsserver. 1. ffnen Sie SQL Server Enterprise Manager. 2. Rufen Sie folgende Themen der SQL Server-Onlinedokumentation auf: Hinzufgen eines SQL Server-Benutzernamens (Enterprise Manager) und Erteilen von Anmeldezugriff auf SQL Server fr einen Windows NT-Benutzer oder eine Windows NT-Gruppe (Enterprise Manager). 3. Erstellen Sie mit Hilfe der Verfahren in der SQL Server-Onlinedokumentation und der Informationen in der folgenden Tabelle ein neues Anmeldekonto, das Remoteserver fr den Zugriff auf Informationen auf dem lokalen Computer verwenden.
Option Benutzername Authentifizierung Kennwort Standarddatenbank Datenbankzugriff In Datenbankrolle zulassen Eingabe NWInfoRemote SQL Server nwpassrmt ClassNorthwind ClassNorthwind public

4. Erstellen Sie ein weiteres Anmeldekonto mit den folgenden Eigenschaften. Dieses lokale Konto wird dem Anmeldekonto NWInfoRemote auf dem Server mit SQL Server Ihres Partners zugeordnet.
Option Benutzername Authentifizierung Kennwort Standarddatenbank Datenbankzugriff In Datenbankrolle zulassen Eingabe NWInfoLocal SQL Server nwpasslocal ClassNorthwind ClassNorthwind public

So erteilen Sie der ProductInfo-Tabelle die SELECT- und INSERTBerechtigungen und der Prozedur Sales By Year die EXECUTEBerechtigung In diesem Verfahren erteilen Sie der ProductInfo-Tabelle auf Ihrem lokalen SQL Server-Computer die Berechtigungen SELECT und INSERT fr das Anmeldekonto NWInfoRemote. Dadurch erhalten Remotebenutzer die Mglichkeit, Daten aus der ProductInfo-Tabelle zu lesen und Daten in die Tabelle einzufgen. 1. Rufen Sie das folgende Thema der SQL Server-Onlinedokumentation auf: Erteilen von Berechtigungen fr einen Benutzer, eine Gruppe oder eine Rolle fr mehrere Objekte (Enterprise Manager).

40

Unterrichtseinheit 12: Programmieren fr mehrere Server

2. Erteilen Sie mit Hilfe der Verfahren in der SQL Server-Onlinedokumentation dem Benutzerkonto NWInfoRemote die Berechtigungen SELECT und INSERT fr die ClassNorthwind.dbo.ProductInfo-Tabelle und die Berechtigung EXECUTE fr die ClassNorthwind.dbo.SalesbyYerProzedur. So fgen Sie der db_datareader-Rolle fr die ClassNorthwindDatenbank das Anmeldekonto NWInfoLocal hinzu In diesem Verfahren fgen Sie der db_datareader-Rolle fr die ClassNorthwind-Datenbank das Anmeldekonto NWInfoLocal hinzu. Die db_datareader-Rolle besitzt die SELECT-Berechtigung fr alle Benutzertabellen in der Datenbank. ber diese Rolle erfolgt der Zugriff auf die lokale Kopie der ClassNorthwind-Datenbank. 1. Rufen Sie das folgende Thema der SQL Server-Onlinedokumentation auf: Hinzufgen eines Mitglieds zu einer SQL Server-Datenbankrolle (Enterprise Manager). 2. Fgen Sie mit Hilfe des Verfahrens in der SQL Server-Onlinedokumentation der db_datareader-Rolle fr die ClassNorthwind-Datenbank das Anmeldekonto NWInfoLocal hinzu. So richten Sie einen Verbindungsserver ein In diesem Verfahren registrieren Sie den Computer Ihres Partners als Verbindungsserver auf Ihrem lokalen Server. 1. Wechseln Sie zu SQL Query Analyzer. 2. ffnen Sie das Skript Labfiles\L12\MakeLink.sql. 3. ndern Sie das Skript, indem Sie servername durch den Namen des Servers mit SQL Server Ihres Partners ersetzen. 4. Fhren Sie das Skript aus. So richten Sie die Sicherheit zwischen Ihrem lokalen Computer und dem Verbindungsserver mit SQL Server ein In diesem Verfahren ordnen Sie einem Anmeldekonto auf dem SQL ServerComputer Ihres Partners ein Anmeldekonto auf Ihrem lokalen SQL ServerComputer zu. 1. ffnen Sie das Skript Labfiles\L12\MapToLnk.sql mit SQL Query Analyzer. 2. ndern Sie das Skript, indem Sie servername durch den Namen des Servers mit SQL Server Ihres Partners ersetzen. 3. Fhren Sie das Skript aus. 4. Schlieen Sie SQL Query Analyzer.

Unterrichtseinheit 12: Programmieren fr mehrere Server

41

bung 2 Abfragen von Remotedaten


In dieser bung erstellen Sie Abfragen, die auf Daten auf dem Verbindungsserver, den Sie in der vorhergehenden bung eingerichtet haben, zugreifen. Anschlieend fhren Sie diese Abfragen aus. Sowohl Sie als auch Ihr Partner mssen bung 1 ausgefhrt haben, bevor Sie mit dieser bung beginnen. So greifen Sie auf Remotedaten auf dem Verbindungsserver zu In diesem Verfahren melden Sie sich mit Sicherheitsinformationen fr eine lokale Anwendung an Ihrem lokalen Server mit SQL Server an. Anschlieend erstellen Sie eine einfache Abfrage, mit der Daten aus der ProductInfo-Tabelle in der Northwind-Datenbank auf dem Computer Ihres Partners abgerufen werden. \L12\Answers\LnkSelect.sql enthlt ein fertiges Skript fr dieses Verfahren. So konfigurieren Sie SQL Server fr SQL Server-Authentifizierung Da alle Verbindungsserver die SQL Server-Authentifizierung verwenden, mssen sie so konfiguriert werden, dass sie sowohl SQL Server- als auch Windows-Authentifizierung ermglichen. 1. Erweitern Sie die Servergruppe in SQL Server Enterprise Manager. 2. Klicken Sie mit der rechten Maustaste auf Ihren Server, und klicken Sie anschlieend auf Eigenschaften. 3. Klicken Sie auf die Registerkarte Sicherheit. 4. Klicken Sie unter Authentifizierung auf SQL Server und Windows. 5. Beenden Sie SQL Server, und fhren Sie einen Neustart durch. So melden Sie sich mittels SQL Server-Authentifizierung an Ihrem Server an 1. Zeigen Sie im Startmen auf Programme, zeigen Sie auf Microsoft SQL Server, und klicken Sie dann auf Query Analyzer. Melden Sie sich am (lokalen) Server mittels SQL Server-Authentifizierung an. Stellen Sie als NWInfoLocal mit dem Kennwort nwpasslocal eine Verbindung her; diese Verbindung wird fr alle Verfahren in dieser bung verwendet. 2. Erstellen Sie eine Transact-SQL-Anweisung, mit der alle Spalten aus der Northwind.dbo.ProductInfo-Tabelle auf dem Verbindungsserver (dem Computer Ihres Partners) abgerufen werden, und fhren Sie diese Anweisung aus.
SELECT * FROM <servername>.ClassNorthwind.dbo.ProductInfo

42

Unterrichtseinheit 12: Programmieren fr mehrere Server

So greifen Sie ber eine Pass-Through-Abfrage auf Remotedaten zu In diesem Verfahren erstellen Sie eine Abfrage, mit der Daten mit Hilfe der OPENQUERY-Funktion aus der ProductInfo-Tabelle in der ClassNorthwindDatenbank auf dem Computer Ihres Partners abgerufen werden. Die Abfrage wird als Pass-Through-Abfrage auf dem Remotecomputer verarbeitet. Die Datei \L12\Answers\PassThru.sql enthlt ein fertiges Skript fr dieses Verfahren. Erstellen Sie eine Pass-Through-Abfrage, mit der die Spalten ProductID und Royalty aus der Northwind.dbo.ProductInfo-Tabelle auf dem Verbindungsserver (dem Computer Ihres Partners) abgerufen werden, und fhren Sie diese Abfrage aus. Verwenden Sie in der FROM-Klausel der SELECT-Anweisung die OPENQUERY-Funktion.
SELECT * FROM OPENQUERY(<servername>, 'SELECT ProductID, Royalty FROM ClassNorthwind.dbo. ProductInfo')

So verknpfen Sie lokale Tabellen mit Remotetabellen In diesem Verfahren erstellen Sie eine Abfrage, mit der die lokale Kopie der ClassNorthwind.dbo.Products-Tabelle mit der ClassNorthwind.dbo.ProductInfo-Tabelle auf dem Computer Ihres Partners verknpft wird. \L12\Answers\LnkJoin.sql enthlt ein fertiges Skript fr dieses Verfahren. Schreiben Sie eine Transact-SQL-Anweisung, mit der die lokale Kopie der ClassNorthwind.dbo.Products-Tabelle mit der ClassNorthwind.dbo.ProductInfo-Tabelle auf dem Verbindungsserver verknpft wird. Verknpfen Sie die Tabellen ber die ProductID-Spalte. Nehmen Sie die Spalten ProductName, ProductID und ImportTax auf, und sortieren Sie die Ergebnisse anschlieend nach ProductName.
USE ClassNorthwind SELECT ProductName, Products.ProductID, Royalty, ImportTax FROM Products JOIN <servername>.ClassNorthwind.dbo.ProductInfo CNWR ON Products.ProductID = CNWR.ProductID

So fgen Sie der Datenbankbesitzerrolle das Anmeldekonto NWInfoLocal hinzu In diesem Verfahren fgen Sie der db_owner-Rolle fr die ClassNorthwindDatenbank das Anmeldekonto NWInfoLocal hinzu. Da das Anmeldekonto NWInfoLocal nun Mitglied der db_owner-Rolle ist, knnen ber dieses Konto neue Tabellen in der ClassNorthwind-Datenbank erstellt werden. 1. Rufen Sie das folgende Thema der SQL Server-Onlinedokumentation auf: Hinzufgen eines Mitglieds zu einer SQL Server-Datenbankrolle (Enterprise Manager). 2. Fgen Sie mit Hilfe des Verfahrens in der SQL Server-Onlinedokumentation der db_owner-Rolle fr die ClassNorthwind-Datenbank das Anmeldekonto NWInfoLocal hinzu.

Unterrichtseinheit 12: Programmieren fr mehrere Server

43

So importieren Sie Daten von einem Verbindungsserver und erstellen eine neue lokale Tabelle In diesem Verfahren erstellen Sie eine neue Tabelle auf Ihrem lokalen Server und fllen diese mit den Ergebnissen einer Abfrage auf Ihrem Verbindungsserver. \L12\Answers\LnkImport.sql enthlt ein fertiges Skript fr dieses Verfahren. 1. Wechseln Sie zu SQL Query Analyzer. 2. Erstellen Sie eine Transact-SQL-Anweisung, mit der die Spalten ProductID und Royalty aus der ProductInfo-Tabelle auf dem Verbindungsserver abgerufen werden. 3. ndern Sie die Anweisung so, dass eine neue lokale, permanente Tabelle mit dem Namen LocalProdInfo erstellt wird, in der die Ergebnisse der Abfrage enthalten sind. 4. Prfen Sie den Inhalt der LocalProdInfo-Tabelle.
USE ClassNorthwind SELECT ProductID,Royalty FROM <servername>.ClassNorthwind.dbo.ProductInfo SELECT ProductID,Royalty INTO LocalProdInfo FROM <servername>.ClassNorthwind.dbo.ProductInfo SELECT * FROM LocalProdInfo

So fhren Sie eine gespeicherte Prozedur auf einem Verbindungsserver aus In diesem Verfahren fhren Sie die gespeicherte Prozedur Sales by Year auf dem Verbindungsserver aus. \L12\Answers \RmtProc.sql enthlt ein fertiges Skript fr dieses Verfahren. 1. Erstellen Sie eine Transact-SQL-Anweisung, mit der die gespeicherte Prozedur Sales by Year in der ClassNorthwind-Datenbank auf dem Verbindungsserver ausgefhrt wird. Verwenden Sie hierzu einen voll gekennzeichneten, vierteiligen Namen, und fhren Sie die Anweisung aus. Erstellen Sie diese Abfrage mit Hilfe der Informationen in der folgenden Tabelle.
Parameter Anfangsdatum Enddatum Eingabe '1996' '1997'

2. Schlieen Sie alle offenen Abfragefenster, und beenden Sie anschlieend SQL Server Query Analyzer.
EXECUTE <servername>.ClassNorthwind.dbo.[Sales by Year] '1996', '1997'

44

Unterrichtseinheit 12: Programmieren fr mehrere Server

So greifen Sie ber eine Ad-hoc-Abfrage auf Remotedaten zu In diesem Verfahren erstellen Sie eine Ad-hoc-Abfrage, mit der alle Spalten aus der ClassNorthwind.dbo.ProductInfo-Tabelle auf dem Remoteserver abgerufen werden. Stellen Sie mit Hilfe der OPENROWSET-Funktion eine Verbindung mit der Remotedatenquelle her. \L12\Answers\Adhoc.sql enthlt ein fertiges Skript fr dieses Verfahren. 1. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. Da Sie nicht das Benutzerkonto NWInfoLocal verwenden, kann der Server Ihres Partners ber diese Verbindung nicht direkt als Verbindungsserver genutzt werden. 2. Erstellen Sie eine Transact-SQL-Anweisung, mit der die Spalten ProductID und Royalty aus der ProductInfo-Tabelle auf dem Computer Ihres Partners abgerufen werden. Stellen Sie Verbindungsinformationen ber die OPENROWSET-Funktion bereit. Erstellen Sie diese Abfrage mit Hilfe der Informationen in der folgenden Tabelle.
Parameter provider_name data_source Benutzer-ID Kennwort Eingabe 'SQLOLEDB' <Servername> (Name des Computers Ihres Partners) 'nwinforemote' 'nwpassrmt'

SELECT * FROM OPENROWSET('SQLOLEDB', '<servername>'; 'NWInfoRemote'; 'nwpassrmt', 'SELECT ProductID, Royalty FROM ClassNorthwind.dbo.ProductInfo')

3. Schlieen Sie alle Verbindungen mit SQL Server Query Analyzer.

Unterrichtseinheit 12: Programmieren fr mehrere Server

45

Wenn Sie noch Zeit haben: Verwalten verteilter Transaktionen


In dieser bung erstellen Sie eine gespeicherte Prozedur, die in Verbindung mit verteilten Transaktionen verwendet werden soll. Sie berprfen, ob der MS DTC-Dienst gestartet wurde. Sie erstellen Transact-SQL-Anweisungen innerhalb einer verteilten Transaktion, um eine hohe Datenkonsistenz zwischen den beiden Servern mit SQL Server sicherzustellen, und fhren die Anweisungen anschlieend aus. So erstellen Sie eine gespeicherte Prozedur fr die Verwendung mit verteilten Transaktionen auf Ihrem lokalen Computer In diesem Verfahren melden Sie sich als Mitglied der sysadmin-Rolle an Ihrem lokalen Server mit SQL Server an. Sie berprfen ein Skript, mit dem die gespeicherte Prozedur DeleteProductInfo erstellt und dem Anmeldekonto NWInfoRemote die EXECUTE-Berechtigung erteilt wird, und fhren das Skript anschlieend aus. Diese gespeicherte Prozedur wird spter von Ihrem Partner verwendet, um Zeilen aus der ProductInfo-Tabelle auf Ihrem lokalen Computer zu lschen. Wichtig Sie und Ihr Partner mssen das vorhergehende Verfahren beendet haben, bevor Sie diese bung fortsetzen. 1. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 2. ffnen Sie das Skript Labfiles\L12\RemoteSP.sql, berprfen Sie es, und fhren Sie es aus. Dieses Skript erstellt die gespeicherte Prozedur DeleteProductInfo in der lokalen ClassNorthwind-Datenbank und erteilt dem Benutzerkonto NWInfoRemote die EXECUTE-Berechtigung. Diese gespeicherte Prozedur wird von Ihrem Partner verwendet, um Zeilen aus der ProductInfo-Tabelle auf Ihrem lokalen Computer zu lschen. 3. Schlieen Sie SQL Query Analyzer. So starten Sie den MS DTC-Dienst In diesem Verfahren starten Sie den MS DTC-Dienst. 1. ffnen Sie den SQL Server-Dienst-Manager. 2. Starten Sie den MS DTC-Dienst auf Ihrem lokalen Computer, falls dieser noch nicht ausgefhrt wird.

46

Unterrichtseinheit 12: Programmieren fr mehrere Server

So fhren Sie eine verteilte Transaktion zwischen dem lokalen Computer und einem Verbindungsserver aus ClassNorthwind Traders verfgt ber zwei Datenbankkopien, und zwar eine Kopie fr jedes Lager. Alle nderungen an einer Kopie sollen auch an der anderen Kopie vorgenommen werden. In diesem Verfahren fgen Sie Daten mit einer einzelnen Transaktion sowohl in Ihre lokale ProductInfo-Tabelle als auch in die ProductInfo-Tabelle auf dem Computer Ihres Partners ein. \L12\Answers \DistIns.sql enthlt ein fertiges Skript fr dieses Verfahren. 1. Zeigen Sie im Startmen auf Programme, zeigen Sie auf Microsoft SQL Server, und klicken Sie dann auf Query Analyzer. Melden Sie sich am (lokalen) Server mittels SQL Server-Authentifizierung an. Stellen Sie als NWInfoLocal mit dem Kennwort nwpasslocal eine Verbindung her. 2. Erstellen Sie eine Transact-SQL-Anweisung, mit der eine neue Zeile in die ProductInfo-Tabelle auf Ihrem lokalen Computer eingefgt wird. Whlen Sie eine Zeile aus der folgenden Tabelle aus. Ihr Partner sollte die andere Zeile auswhlen.
ProductID 55 56 Royalty 3 2 ImportTax .09 .08

3. Erstellen Sie eine Transact-SQL-Anweisung, mit der die von Ihnen ausgewhlte Zeile in die ClassNorthwind.dbo.ProductInfo-Tabelle auf dem Verbindungsserver (dem Computer Ihres Partners) eingefgt wird. Verwenden Sie einen voll gekennzeichneten, vierteiligen Namen. 4. Schlieen Sie die beiden Anweisungen in BEGIN DISTRIBUTED TRANSACTION und COMMIT TRANSACTION ein, und aktivieren Sie die Sitzungsoption XACT_ABORT. 5. Fhren Sie die Transaktion aus.
USE ClassNorthwind SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION -- Insert to the liked server. INSERT INTO <servername>.ClassNorthwind.dbo.ProductInfo VALUES (55, 3, .09) INSERT INTO ClassNorthwind.dbo.ProductInfo VALUES (55, 3, .09) COMMIT TRANSACTION

6. Erstellen Sie Abfragen, und fhren Sie diese aus, um zu berprfen, ob die hinzugefgte Zeile in beiden Tabellen angezeigt wird.
SELECT * FROM <servername>.ClassNorthwind.dbo.ProductInfo SELECT * FROM ClassNorthwind.dbo.ProductInfo

Unterrichtseinheit 12: Programmieren fr mehrere Server

47

So verwalten Sie verteilte Daten mit Hilfe einer gespeicherten Prozedur In diesem Verfahren berprfen Sie ein Skript, mit dem die zuvor den ClassNorthwind.dbo.ProductInfo-Tabellen hinzugefgten Zeilen auf dem lokalen und dem Verbindungsserver gelscht werden, und fhren es aus. 1. ffnen und berprfen Sie das Skript Labfiles\L12\DistDel.sql mit SQL Query Analyzer. Dieses Skript lscht die Zeile, die Sie der lokalen ProductInfo-Tabelle mit Hilfe einer Transact-SQL-Anweisung hinzugefgt haben. Die Zeile, die Sie in der ProductInfo-Tabelle auf dem Verbindungsserver eingefgt haben, wird durch eine gespeicherte Prozedur gelscht. Diese Schritte werden als Transaktion durchgefhrt. 2. ndern Sie das Skript, sodass der Computer Ihres Partners als Verbindungsserver dient. 3. ndern Sie das Skript, sodass die von Ihnen im vorhergehenden Verfahren hinzugefgte Product_id gelscht wird. 4. Fhren Sie das genderte Skript Labfiles\L12\DistDel.sql aus. 5. berprfen Sie die Ausgabe, um sicherzustellen, dass die Zeilen gelscht wurden.

48

Unterrichtseinheit 12: Programmieren fr mehrere Server

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Einfhrung in verteilte Abfragen Ausfhren einer Ad-hoc-Abfrage fr eine Remotedatenquelle Einrichten einer Verbindungsserverumgebung Ausfhren einer Abfrage auf einem Verbindungsserver Ausfhren einer gespeicherten Prozedur auf einem Verbindungsserver Verwalten von verteilten Transaktionen ndern von Daten auf einem Verbindungsserver Verwenden partitionierter Sichten

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie besitzen ein Mailauftragsunternehmen mit zwei Lagerstandorten, einen in den USA und einen in Asien. In jedem Lager gibt es einen Server mit SQL Server, der ber eine standortspezifische Kopie der Inventardatenbank verfgt. Die Server, mit den Namen USsales und Asiasales, sind ber ein WAN miteinander verbunden. Fr die Geschftsabwicklung ist es erforderlich, dass diese Datenbanken stndig aktuell und synchronisiert sind. 1. Welche Methode der Datenverteilung sollten Sie verwenden, um nderungen von einem Server an den anderen weiterzugeben? Sie sollten zur Aktualisierung beider Datenbanken verteilte Transaktionen verwenden, da eine hohe Konsistenz erforderlich ist. Verwenden Sie keine Replikation, da die Datenbanken zu jedem Zeitpunkt synchronisiert sein mssen.

2. Ihr Bro befindet sich in den USA. Sie erstellen jeden Morgen einen Bericht, der die Anzahl der vorrtigen Einheiten fr die zehn am hufigsten verkauften Artikel aus jedem Lager ausweist. Auf welche Weise wrden Sie diesen Bericht erstellen? Sie wrden den Server Asiasales als Verbindungsserver auf dem Computer USsales registrieren und anschlieend Abfragen auf dem Server USsales erstellen und ausfhren, wobei Sie fr den Zugriff auf die Informationen auf dem Verbindungsserver voll gekennzeichnete, vierteilige Namen verwenden.

Unterrichtseinheit 12: Programmieren fr mehrere Server

49

3. Da Sie hufig Inventardaten zwischen den Lagern bertragen, mssen Sie die Datenbanken an beiden Standorten aktualisieren, sodass die Anzahl der vorrtigen Einheiten immer aktuell ist. Wie wrden Sie vorgehen, um dieses Ziel zu erreichen? Sie wrden verteilte Abfragen oder gespeicherte Prozeduren erstellen, um Inventardaten aus den einzelnen Datenbanken zu entnehmen bzw. den einzelnen Datenbanken hinzuzufgen. Anschlieend wrden Sie eine Abfrage erstellen, bei der diese Abfragen bzw. Aufrufe von gespeicherten Prozeduren in einem Block zwischen den Anweisungen BEGIN DISTRIBUTED TRANSACTION und COMMIT TRANSACTION stehen. Durch die Verwendung verteilter Transaktionen wird sichergestellt, dass die Datenbanken synchronisiert werden.

4. Auf dem Server Asiasales befindet sich auerdem eine Microsoft AccessDatenbank, die eine Zusammenfassung von Verkaufsdaten enthlt. Sie mchten gelegentlich auf diese Daten zugreifen, um einen Bericht zu erstellen, der die Daten aus der Inventardatenbank USsales enthlt. Wie wrden Sie vorgehen, um die Daten aus beiden Quellen in Ihrem Bericht zu kombinieren? Sie wrden eine Abfrage erstellen, die mit Hilfe der OPENROWSETFunktion auf Daten in der Access-Datenbank zugreift. Um den Bericht zu erstellen, wrden Sie Tabellen in der Access-Datenbank mit Tabellen in der Datenbank des lokalen Servers mit SQL Server verknpfen.

Unterrichtseinheit 12: Programmieren fr mehrere Server

This page is intentionally left blank.

Unterrichtseinheit 13: Optimieren der Abfrageleistung


Inhalt bersicht Einfhrung zum Abfrageoptimierer Abrufen von Ausfhrungsplaninformationen Verwenden eines Indexes zum Abdecken einer Abfrage Indizierungsstrategien Auerkraftsetzen des Abfrageoptimierers Empfohlene Methoden bungseinheit A: Optimieren der Abfrageleistung Lernzielkontrolle 1 2 13 25 36 43 50 52 67

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 13: Optimieren der Abfrageleistung

iii

Hinweise fr den Kursleiter


Prsentation: 90 Minuten bungseinheit: 45 Minuten Diese Unterrichtseinheit vermittelt den Kursteilnehmern umfassende Kenntnisse darber, wie der Abfrageoptimierer arbeitet, um Abfragen zu optimieren, und wie Ausfhrungsplaninformationen abgerufen werden knnen. In der Unterrichtseinheit wird beschrieben, wie Indizes erstellt werden, die eine Abfrage abdecken, welche Indizierungsstrategien implementiert werden knnen, um die Eingabe/Ausgabe (E/A) zu reduzieren, in welchen Situationen der Abfrageoptimierer auer Kraft gesetzt werden sollte. In der bungseinheit verwenden die Kursteilnehmer den grafischen Ausfhrungsplan, sammeln Abfrageinformationen und zeigen die Ausgabe des Abfrageoptimierers an. Darber hinaus zeigen sie Indexinformationen an und verwenden diese Informationen, um sich zu vergegenwrtigen, wie der Abfrageoptimierer Abfragen optimiert und Optimiererhinweise anwendet. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Erlutern, welche Funktion der Abfrageoptimierer erfllt und wie er sicherstellt, dass Abfragen optimiert sind. Verwenden unterschiedlicher Methoden zum Abrufen von Ausfhrungsplaninformationen, sodass Sie in der Lage sind zu bestimmen, wie der Abfrageoptimierer eine Abfrage verarbeitet, und zu berprfen, ob der effizienteste Ausfhrungsplan generiert wurde. Erstellen von Indizes, die Abfragen abdecken. Identifizieren von Indizierungsstrategien, durch die die Anzahl von Seitenlesevorgngen reduziert wird. Beurteilen, wann der Abfrageoptimierer auer Kraft gesetzt werden sollte.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_13.ppt Die Beispieldatei C:\Moc\2328A\Demo\D13_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch.

iv

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung zum Abfrageoptimierer Geben Sie eine Einfhrung zum Abfrageoptimierer, und erlutern Sie, wie der Abfrageoptimierer die verfgbaren Informationen auswertet, um den besten Ausfhrungsplan zu ermitteln. Beschreiben Sie anschlieend die Phasen und die Details der Abfrageoptimierung, und erlutern Sie, wie Ausfhrungsplne im Cache gespeichert werden. Beenden Sie diesen Abschnitt mit einer kurzen Einfhrung zur Abfragekontrolle, und erlutern Sie, wie die Abfragekontrolle konfiguriert werden kann, um zu verhindern, dass Abfragen mit langer Ausfhrungszeit ausgefhrt werden und Systemressourcen beanspruchen. Abrufen von Ausfhrungsplaninformationen Beschreiben Sie die unterschiedlichen Mglichkeiten zum Anzeigen des vom Abfrageoptimierer generierten Ausfhrungsplanes, legen Sie den Schwerpunkt jedoch auf die grafische Anzeige des Ausfhrungsplanes. Verwenden eines Indexes zum Abdecken einer Abfrage Erlutern Sie, wie eine Abfrage durch einen Index abgedeckt werden kann. Stellen Sie die Beispiele vor, durch die veranschaulicht wird, wie die Navigation innerhalb von Indexseiten eines Indexes erfolgen kann, der eine Abfrage abdeckt. Beschreiben Sie dann die Situationen, in denen der Abfrageoptimierer einen Index zum Abdecken einer Abfrage verwenden kann, und erklren Sie, wie festgestellt werden kann, ob der Optimierer einen Index zum Abdecken einer Abfrage verwendet hat. Fhren Sie abschlieend Richtlinien fr die Erstellung von Indizes auf, die Abfragen abdecken knnen. Indizierungsstrategien Beschreiben Sie die spezifischen Indizierungsstrategien fr Abfragen, die Datenbereiche abrufen, und fr die Zuweisung von Prioritten bei Verwendung mehrerer Abfragen. Beenden Sie diesen Abschnitt, indem Sie Richtlinien fr die Erstellung sinnvoller Indizes vorstellen. Auerkraftsetzen des Abfrageoptimierers Heben Sie hervor, wie wichtig es ist, weitere Alternativen in Erwgung zu ziehen, bevor die Entscheidung getroffen wird, den Abfrageoptimierer auer Kraft zu setzen. Geben Sie eine kurze Einfhrung zu Optimiererhinweisen, und weisen Sie darauf hin, dass Optimiererhinweise getestet und regelmig berprft werden sollten.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Der folgende Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheit fr diese Unterrichtseinheit.

Anforderung zum Einrichten der bungseinheit


Fr die bungseinheit dieser Unterrichtseinheit muss die ClassNorthwindDatenbank den Zustand aufweisen, der fr diese bungseinheit erforderlich ist. Damit die Kursteilnehmercomputer diese Anforderungen erfllen, mssen Sie eine der folgenden Aktionen ausfhren: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore13.cmd. Fr die bungseinheit ist es weiterhin erforderlich, dass die Kursteilnehmer die gespeicherte Prozedur index_cleanup erstellen, indem sie das Skript Index_cleanup.sql ausfhren, das sich im Verzeichnis C:\Moc\2328A\Labfiles\L13 befindet. Achtung Wenn dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore13.cmd ausfhren, um sicherzustellen, dass die bungseinheit ordnungsgem funktioniert.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

vi

Unterrichtseinheit 13: Optimieren der Abfrageleistung

This page is intentionally left blank.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung zum Abfrageoptimierer Abrufen von Ausfhrungsplaninformationen Verwenden eines Indexes zum Abdecken einer Abfrage Indizierungsstrategien Auerkraftsetzen des Abfrageoptimierers

Einstieg

In dieser Unterrichtseinheit erfahren Sie, wie der Abfrageoptimierer Indizes und weitere Informationen verwendet, um die effizienteste Methode fr den Datenzugriff zu ermitteln.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In dieser Unterrichtseinheit wird beschrieben, wie der Abfrageoptimierer Indizes und weitere Informationen verwendet, um die effizienteste Methode fr den Datenzugriff zu ermitteln. Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Erlutern, welche Funktion der Abfrageoptimierer erfllt und wie er sicherstellt, dass Abfragen optimiert sind. Verwenden unterschiedlicher Methoden zum Abrufen von Ausfhrungsplaninformationen, sodass Sie in der Lage sind zu bestimmen, wie der Abfrageoptimierer eine Abfrage verarbeitet, und zu berprfen, ob der effizienteste Ausfhrungsplan generiert wurde. Erstellen von Indizes, die Abfragen abdecken. Identifizieren von Indizierungsstrategien, durch die die Anzahl von Seitenlesevorgngen reduziert wird. Beurteilen, wann der Abfrageoptimierer auer Kraft gesetzt werden sollte.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Einfhrung zum Abfrageoptimierer


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Die Funktion des Abfrageoptimierers Verwenden der kostenorientierten Optimierung durch den Abfrageoptimierer Funktionsweise des Abfrageoptimierers Phasen der Abfrageoptimierung Zwischenspeichern des Ausfhrungsplanes Festlegen eines Kostenlimits

Dieser Abschnitt beschftigt sich mit dem Abfrageoptimierer und den Verfahren, die er zum Optimieren von Abfragen anwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie sich mit der Funktion vertraut machen, die der Abfrageoptimierer im Rahmen der Optimierung von Abfragen erfllt, ist dies eine gute Vorbereitung fr das Erstellen sinnvoller Indizes, das Schreiben effizienter Abfragen und die Optimierung von Abfragen, die eine schlechte Leistung aufweisen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Die Funktion des Abfrageoptimierers


Geben Sie eine Einfhrung zum Abfrageoptimierer.

Thema

Bestimmen des effizientesten Ausfhrungsplanes Ermitteln, ob Indizes vorhanden sind, und Bewerten ihres Nutzens fr eine Abfrage Bestimmen der Indizes und Spalten, die verwendet werden knnen Bestimmen der effektivsten Verarbeitungsstrategie Durchfhren einer kostenorientierten Bewertung von Alternativen Erstellen von Spaltenstatistiken Verwenden zustzlicher Informationen Erstellen eines Ausfhrungsplanes

Einstieg

Der Abfrageoptimierer ist die Komponente, die fr die Generierung des optimalen Ausfhrungsplanes fr eine Abfrage zustndig ist.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Der Abfrageoptimierer ist die Komponente, die fr die Generierung des optimalen Ausfhrungsplanes fr eine Abfrage zustndig ist.

Bestimmen des effizientesten Ausfhrungsplanes


Der Abfrageoptimierer wertet jede Transact-SQL-Anweisung aus und ermittelt den effizientesten Ausfhrungsplan. Der Abfrageoptimierer schtzt die E/A (Eingabe/Ausgabe), die fr die Verarbeitung einer Abfrage erforderlich ist, indem er folgende Schritte ausfhrt: Ermitteln, ob Indizes vorhanden sind, und Bewerten ihres Nutzens fr eine Abfrage. Bestimmen der Indizes und Spalten, die verwendet werden knnen, um die Anzahl der Zeilen zu reduzieren, die von der Abfrage untersucht werden. Durch die Verringerung der Anzahl der untersuchten Zeilen kann der Umfang an E/A gesenkt werden. Dies ist das Ziel der Abfrageoptimierung. Bestimmen der effektivsten Strategie fr die Verarbeitung von Verknpfungsoperationen, z. B. der Reihenfolge, in der Tabellen verknpft werden, und der zu verwendenden Verknpfungsstrategie. Durchfhren einer kostenorientierten Bewertung von Alternativen, um den effizientesten Plan fr eine bestimmte Abfrage auswhlen zu knnen. Erstellen von Spaltenstatistiken, um die Leistung der Abfrage zu verbessern.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Verwenden zustzlicher Informationen


Der Abfrageoptimierer verwendet zustzliche Informationen zu den zugrunde liegenden Daten und Speicherstrukturen, zur Dateigre und zu Dateistrukturtypen. Darber hinaus verwendet der Abfrageoptimierer eine Auswahl eigener interner Operationen, wie z. B. das Erstellen temporrer Indizes oder Tabellen im Arbeitsspeicher, um die Leistung von Abfragen zu verbessern.

Erstellen eines Ausfhrungsplanes


Der Abfrageoptimierer erstellt einen Ausfhrungsplan, der die Abfolge der Schritte beschreibt, die zur Durchfhrung einer Abfrage erforderlich sind. Der Abfrageoptimierer optimiert den Vorgang des Suchens, Verknpfens, Gruppierens und Sortierens von Zeilen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Verwendung der kostenorientierten Optimierung durch den Abfrageoptimierer


Erlutern Sie die kostenorientierte Optimierung.

Thema

Einstieg

Begrenzen der Anzahl an Optimierungsplnen Kosten werden im Hinblick auf E/A und CPURessourcen abgeschtzt Bestimmen der Abfrageverarbeitungszeit Verwenden von physischen Operatoren und Abfolge der Operationen Verwenden paralleler und serieller Verarbeitung

Der Abfrageoptimierer ist ein kostenorientierter Optimierer, d. h., er bewertet jeden Ausfhrungsplan, indem er die jeweiligen Kosten fr die Ausfhrung schtzt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Der Abfrageoptimierer ist ein kostenorientierter Optimierer, d. h., er bewertet jeden Ausfhrungsplan, indem er die jeweiligen Ausfhrungskosten schtzt. Anmerkung Die Kostenschtzungen knnen nur so przise sein wie die verfgbaren statistischen Daten zu den Spalten, Indizes und Tabellen.

Begrenzen der Anzahl an Optimierungsplnen


Um die Ausfhrungszeit auf eine angemessene Lnge zu beschrnken, begrenzt der Abfrageoptimierer die Anzahl der von ihm bercksichtigten Optimierungsplne. Durch die Bewertung von Abfolgen der relationalen Operationen, die zur Erstellung des Resultsets erforderlich sind, ermittelt der Abfrageoptimierer einen Ausfhrungsplan, der im Hinblick auf E/A und Beanspruchung von CPURessourcen die geringsten Kosten verursacht.

Bestimmen der Abfrageverarbeitungszeit


Die Abfrageleistung wird bestimmt durch die physischen Operatoren, die der Abfrageoptimierer verwendet, und die Abfolge, in der die Operationen verarbeitet werden. Das Ziel ist die Reduzierung folgender Faktoren: Der Anzahl der zurckgegebenen Zeilen. Der Anzahl der gelesenen Seiten. Der insgesamt aufgewendeten Verarbeitungszeit, indem E/A und CPURessourcen minimiert werden, die fr einen Ausfhrungsplan verwendet werden.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Wenn der Abfrageoptimierer Abfragen optimiert, entscheidet er sich nicht fr den Ausfhrungsplan mit der geringsten Ressourcenbeanspruchung, sondern vielmehr fr den Ausfhrungsplan, der die Ergebnisse bei vertretbarer Ressourcenbeanspruchung am schnellsten an den Benutzer zurckgibt. Anmerkung Wenn Microsoft SQL Server 2000 ber mehr als einen Prozessor verfgt, teilt der Abfrageoptimierer die Abfrage mglicherweise auf die Prozessoren auf. Abfragen mit langen Ausfhrungszeiten knnen normalerweise von Plnen fr die parallele Ausfhrung profitieren. Eine parallele Abfrage kann jedoch insgesamt mehr Ressourcen beanspruchen als die serielle Verarbeitung einer Abfrage.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Funktionsweise des Abfrageoptimierers


Beschreiben Sie, wie der Abfrageoptimierer eine Abfrage verarbeitet, nachdem sie an SQL Server gesendet wurde.

Thema

Transact-SQL Transact-SQL

Analyseprozess Analyseprozess

Standardisierungsprozess Standardisierungsprozess

Einstieg

Nachdem eine Abfrage gesendet wurde, werden mehrere Schritte durchlaufen, durch die die ursprngliche Abfrage in ein Format transformiert wird, das der Abfrageoptimierer interpretieren kann.

Abfrageoptimierung Abfrageoptimierung

Kompilierung Kompilierung ResultResultset set

Datenbankzugriffsroutinen Datenbankzugriffsroutinen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Nachdem eine Abfrage gesendet wurde, werden mehrere Schritte durchlaufen, durch die die ursprngliche Abfrage in ein Format transformiert wird, das der Abfrageoptimierer interpretieren kann.

Erklren Sie, inwiefern die einzelnen Schritte dazu beitragen, dass die ursprngliche Abfrage in ein Format transformiert wird, das der Abfrageoptimierer interpretieren kann.

Analyseprozess
Der Analyseprozess berprft die eingehende Abfrage im Hinblick auf korrekte Syntax und unterteilt die Syntax in Komponententeile, auf die das relationale Datenbankmodul antworten kann. Die Ausgabe dieses Schrittes ist eine analysierte Abfragestruktur.

Standardisierungsprozess
Der Standardisierungsprozess transformiert eine Abfrage in ein fr die Optimierung geeignetes Format. Werden redundante Syntaxklauseln ermittelt, so werden diese entfernt. Unterabfragen werden standardisiert, sofern dies mglich ist. Die Ausgabe dieses Schrittes ist eine standardisierte Abfragestruktur.

Abfrageoptimierung
Der Vorgang, in dessen Verlauf aus mehreren mglichen Ausfhrungsplnen ein Plan ausgewhlt wird, wird Optimierung genannt. Diese Phase setzt sich aus mehreren Schritten zusammen. Fr die Kosten des Ausfhrungsplanes sind jedoch die folgenden Schritte am bedeutsamsten: Abfrageanalyse, Indexauswahl und Verknpfungsauswahl.

Kompilierung
Die Abfrage wird zu ausfhrbarem Code kompiliert.

Datenbankzugriffsroutinen
Der Abfrageoptimierer ermittelt, ob die Durchfhrung eines Tabellenscans oder die Verwendung eines verfgbaren Indexes die beste Methode fr den Datenzugriff darstellt. Anschlieend wird die bessere Methode angewendet.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Phasen der Abfrageoptimierung


Stellen Sie die Phasen vor, die whrend der Abfrageoptimierung durchlaufen werden.

Thema

Abfrageanalyse Identifiziert die Such- und Verknpfungskriterien der Abfrage Indexauswahl Bestimmt, ob ein Index oder mehrere Indizes vorliegen Bewertet die Verwendbarkeit eines Indexes oder von Indizes Verknpfungsauswahl Auswerten, welche Verknpfungsstrategie verwendet werden soll

Einstieg

Die Abfrageoptimierung besteht aus drei Phasen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Abfrageoptimierung besteht aus drei Phasen. Bei diesen Phasen handelt es sich nicht um voneinander getrennte Verarbeitungsschritte. Diese Unterteilung dient lediglich der besseren Darstellung der internen Aktivitten des Abfrageoptimierers.

Abfrageanalyse
Die erste Phase der Abfrageoptimierung wird als Abfrageanalyse bezeichnet. In dieser Phase identifiziert der Abfrageoptimierer die Such- und Verknpfungskriterien der Abfrage. Durch eine Begrenzung der Suche minimiert der Abfrageoptimierer die Anzahl der Zeilen, die verarbeitet werden. Indem die Anzahl der verarbeiteten Zeilen reduziert wird, wird die Anzahl der gelesenen Index- und Datenseiten verringert.

Indexauswahl
Die Indexauswahl stellt die zweite Phase der Abfrageoptimierung dar. Whrend dieser Phase stellt der Abfrageoptimierer fest, ob fr die identifizierten Klauseln ein Index vorliegt. Im Anschluss daran erfolgt eine Bewertung des Nutzens des Indexes oder der Indizes. Der Nutzen eines Indexes bemisst sich danach, wie viele Zeilen zurckgegeben werden. Diese Informationen werden den Indexoder den Spaltenstatistiken entnommen. Die Schtzung der Kosten der verschiedenen Zugriffsmethoden erfolgt anhand der Schtzung der logischen und physischen Lesevorgnge, die erforderlich sind, um die entsprechenden Zeilen zu finden.

Verknpfungsauswahl
Die Verknpfungsauswahl stellt die dritte Phase der Abfrageoptimierung dar. Wenn eine Abfrage, die sich auf mehrere Tabellen bezieht, oder eine Selbstverknpfung vorliegt, erfolgt eine Bewertung der Verknpfungsstrategie, die verwendet werden soll. Bei der Ermittlung der zu verwendenden Verknpfungsstrategie werden eine Reihe von Faktoren herangezogen: Selektivitt, Dichte und Arbeitsspeicher, der zum Verarbeiten der Abfrage erforderlich ist.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Zwischenspeichern des Ausfhrungsplanes


Beschreiben Sie, wie Ausfhrungsplne im Cache verwaltet werden und wie die Reduzierung von erneuten Plankompilierungen zu einer Verbesserung der Leistung beitragen kann.

Thema

Speichern eines Ausfhrungsplanes im Arbeitsspeicher Eine Kopie fr alle seriellen Ausfhrungen Eine weitere Kopie fr alle parallelen Ausfhrungen Verwenden eines Ausfhrungskontextes Falls ein Ausfhrungsplan vorhanden ist, wird dieser wiederverwendet Falls kein Ausfhrungsplan vorhanden ist, generiert SQL Server einen neuen Ausfhrungsplan Erneutes Kompilieren von Ausfhrungsplnen Bestimmte nderungen in einer Datenbank knnen dazu fhren, dass ein Ausfhrungsplan ineffizient oder nicht mehr gltig ist

Einstieg

SQL Server verfgt ber einen Arbeitsspeicherpool, in dem Ausfhrungsplne und Datenpuffer gespeichert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server verfgt ber einen Arbeitsspeicherpool, in dem Ausfhrungsplne und Datenpuffer gespeichert werden. Der Prozentsatz des Pools, der entweder fr Ausfhrungsplne oder fr Datenpuffer reserviert wird, ndert sich dynamisch in Abhngigkeit vom jeweiligen Systemstatus. Der Teil des Arbeitsspeicherpools, der zum Speichern von Ausfhrungsplnen verwendet wird, wird Prozedurcache genannt.

Speichern eines Ausfhrungsplanes im Arbeitsspeicher


Bei dem grten Teil des Ausfhrungsplanes handelt es sich um eine wiederverwendbare, schreibgeschtzte Datenstruktur, die von einer beliebigen Anzahl von Benutzern verwendet werden kann. Im Ausfhrungsplan wird kein Benutzerkontext gespeichert. Im Arbeitsspeicher befinden sich nie mehr als zwei Kopien des Ausfhrungsplanes: Eine Kopie fr alle seriellen Ausfhrungen. Eine weitere Kopie fr alle parallelen Ausfhrungen. Die parallele Kopie deckt alle parallelen Ausfhrungen ab, und zwar unabhngig von ihrem Grad an Parallelitt.

10

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Verwenden eines Ausfhrungskontextes


Jeder Benutzer, der eine Abfrage ausfhrt, verfgt ber eine Datenstruktur mit Daten, die speziell fr die jeweilige Ausfhrung gelten (z. B. Parameterwerte). Diese Datenstruktur wird als Ausfhrungskontext bezeichnet. Wenn eine Transact-SQL-Anweisung ausgefhrt wird, scannt SQL Server den Prozedurcache, um zu ermitteln, ob fr diese Transact-SQL-Anweisung bereits ein Ausfhrungsplan vorhanden ist. Falls ein Ausfhrungsplan vorhanden ist, wird dieser Plan von SQL Server wiederverwendet. Auf diese Weise wird der Aufwand des erneuten Kompilierens der Transact-SQL-Anweisung vermieden. Falls kein Ausfhrungsplan vorhanden ist, generiert SQL Server einen neuen Ausfhrungsplan fr die Abfrage.

Erneutes Kompilieren von Ausfhrungsplnen


Bestimmte nderungen in einer Datenbank knnen dazu fhren, dass ein Ausfhrungsplan ineffizient oder nicht mehr gltig ist. Wenn SQL Server nderungen feststellt, die dazu fhren, dass ein Ausfhrungsplan ungltig wird, wird der Ausfhrungsplan als ungltig markiert. Fr die nchste Verbindung, die die Abfrage ausfhrt, wird ein neuer Ausfhrungsplan kompiliert. Wichtig Sie knnen die Leistung verbessern, indem Sie die Anzahl der erneuten Kompilierungen eines Planes reduzieren. Folgende Faktoren knnen dazu beitragen, dass ein Ausfhrungsplan ungltig wird: Strukturelle nderungen an einer Tabelle oder Sicht, auf die die Abfrage verweist (die Anweisungen ALTER TABLE und ALTER VIEW). Eine explizit durch eine Anweisung wie z. B. UPDATE STATISTICS oder automatisch durchgefhrte Generierung neuer Verteilungsstatistiken. Lschen eines Indexes, der von dem Ausfhrungsplan verwendet wird. Ein expliziter Aufruf der gespeicherten Systemprozedur sp_recompile. Eine groe Anzahl von nderungen an Schlsseln oder von INSERT- oder DELETE-Anweisungen, die auf einer Tabelle ausgefhrt werden, auf die die Abfrage verweist. Ein deutlicher Anstieg der Zeilenanzahl in der inserted- oder der deletedTabelle fr Tabellen mit Triggern. Anmerkung SQL Server verwendet einen Alterungsalgorithmus, um die Ausfhrungsplne im Cache effizient zu verwalten. Hierbei werden Kosten und Verwendung des Ausfhrungsplanes bewertet.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

11

Festlegen eines Kostenlimits


Geben Sie eine Einfhrung zur Abfragekontrolle.

Thema

Angeben eines oberen Limits Verwenden der Abfragekontrolle, um die Ausfhrung von Abfragen zu verhindern, die lange laufen und Systemressourcen konsumieren Angeben von Verbindungslimits Verwenden der gespeicherten Systemprozedur sp_configure Ausfhren der SET QUERY_GOVERNOR_COST_LIMIT-Anweisung Angeben von 0, um die Abfragekontrolle zu deaktivieren

Einstieg

Sie knnen die Kosten der Ausfhrung einer Abfrage kontrollieren, indem Sie ein Kostenlimit festlegen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen die Kosten der Ausfhrung einer Abfrage kontrollieren, indem Sie ein Kostenlimit festlegen. Der Begriff Abfragekosten bezieht sich auf die geschtzte Zeit in Sekunden, die bei einer bestimmten Hardwarekonfiguration fr das Ausfhren einer Abfrage bentigt wird.

Angeben eines oberen Limits


Mit Hilfe der Option query governor cost limit knnen Sie verhindern, dass Abfragen mit langen Ausfhrungszeiten ausgefhrt werden und Systemressourcen beanspruchen. Standardmig wird die Ausfhrung jeder Abfrage unabhngig von der Ausfhrungsdauer zugelassen. Die Abfragekontrolle verwendet einen geschtzten Kostenwert, um zu verhindern, dass Abfragen mit hohen Kosten berhaupt ausgefhrt werden. Obwohl der Konfigurationswert in Sekunden angegeben wird, bezieht er sich nicht wirklich auf die Zeit, sondern auf die tatschlichen geschtzten Kosten der Abfrage. Sie knnen fr die Abfrage, die ausgefhrt werden soll, ein oberes Kostenlimit angeben. Da die Abfragekontrolle auf der geschtzten Ausfhrungszeit und nicht auf der tatschlich verstrichenen Zeit beruht, verursacht sie keinen Laufzeitaufwand. Wenn die geschtzten Kosten einer Abfrage das angegebene Kostenlimit bersteigen, verhindert die Abfragekontrolle, dass die Abfrage ausgefhrt wird. Diese Vorgehensweise ist effizienter, als wenn eine Abfrage so lange ausgefhrt wrde, bis ein vorab definiertes Limit erreicht ist, und die Ausfhrung der Abfrage erst dann beendet wrde.

12

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Angeben von Verbindungslimits


Sie knnen Limits fr alle Verbindungen oder auch nur fr die Abfragen einer bestimmten Verbindung angeben. Um Kostenlimits der Abfragekontrolle anzuwenden, knnen Sie folgendermaen vorgehen: Verwenden der gespeicherten Prozedur sp_configure, um Limits auf alle Verbindungen anzuwenden. Sie knnen das Kostenlimit der Abfragekontrolle nur ndern, wenn die Option show advanced options auf 1 festgelegt ist. Diese Einstellung wird sofort wirksam. Sie mssen den Server nicht anhalten und neu starten. Ausfhren der SET QUERY_GOVERNOR_COST_LIMIT-Anweisung, um Limits auf eine bestimmte Verbindung anzuwenden. Angeben von 0 (Standardeinstellung), um die Abfragekontrolle zu deaktivieren. In diesem Fall werden alle Abfragen ohne Anwendung eines Limits ausgefhrt.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

13

Abrufen von Ausfhrungsplaninformationen


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Anzeigen der Ausgabe von STATISTICS-Anweisungen Anzeigen der Ausgabe von SHOWPLAN_ALL und SHOWPLAN_TEXT Grafisches Anzeigen des Ausfhrungsplanes

Verwenden Sie die folgenden Methoden, um Informationen zum Ausfhrungsplan zu erhalten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn der Abfrageoptimierer den besten Ausfhrungsplan ermittelt, wertet er die Informationen aus, die ihm zu diesem Zeitpunkt zur Verfgung stehen. Sie knnen Informationen zum Ausfhrungsplan abrufen, indem Sie die sysindexes-Tabelle abfragen. Darber hinaus haben Sie die Mglichkeit, Informationen abzurufen, indem Sie die STATISTICS-Anweisungen oder die SHOWPLAN-Anweisungen verwenden oder den Ausfhrungsplan grafisch anzeigen.

14

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Anzeigen der Ausgabe von STATISTICS-Anweisungen


Thema
Erlutern Sie, wie statistische Ausgaben mit Hilfe der STATISTICS-Anweisungen angezeigt werden knnen.
Anweisung Anweisung STATISTICS STATISTICS TIME TIME STATISTICS STATISTICS PROFILE PROFILE Beispielausgabe Beispielausgabe
Server-Ausfhrungszeiten: Server-Ausfhrungszeiten: CPU-Zeit = 0 ms, verstrichene Zeit = 2 ms. CPU-Zeit = 0 ms, verstrichene Zeit = 2 ms. Rows Executes StmtText StmtId Rows Executes StmtText StmtId --------------------------------------------------------------------------------------------47 1 SELECT * FROM [charge] 16 47 1 SELECT * FROM [charge] 16 WHERE (([charge_amt]>=@1) WHERE (([charge_amt]>=@1) . . . . . . Member-Tabelle. Scananzahl 1, logische Member-Tabelle. Scananzahl 1, logische Lesevorgnge 23, physische Lesevorgnge 0, Lesevorgnge 23, physische Lesevorgnge 0, Read-Ahead-Lesevorgnge 0. Read-Ahead-Lesevorgnge 0.

Einstieg

Mit Hilfe der Anweisungen STATISTICS IO, STATISTICS TIME und STATISTICS PROFILE knnen Sie Informationen abrufen, die Ihnen beim Diagnostizieren von Abfragen mit langen Ausfhrungszeiten helfen.

STATISTICS IO STATISTICS IO

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe der Anweisungen STATISTICS IO, STATISTICS TIME und STATISTICS PROFILE knnen Sie Informationen abrufen, die Ihnen beim Diagnostizieren von Abfragen mit langen Ausfhrungszeiten helfen. Die Ausgabe von STATISTICS-Anweisungen stellt Informationen zum eigentlichen Ausfhrungsplan bereit. STATISTICS TIME ruft Informationen zur Anzahl der Millisekunden ab, die zum Analysieren, Kompilieren und Ausfhren jeder Anweisung erforderlich sind. STATISTICS PROFILE zeigt die Profilinformationen fr eine Anweisung an. Wenn Sie eine Abfrage ausfhren, werden die Ausgabe der SHOWPLAN_ALL-Anweisung und zwei weitere Spalten in das Resultset eingebunden. In der folgenden Tabelle sind die zustzlichen Spalten aufgefhrt.
Spalte Rows Executes Beschreibung Tatschliche Anzahl der Zeilen, die jeder Operator erzeugt. Tatschliche Anzahl der Ausfhrungen des Operators.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

15

STATISTICS IO ruft Informationen zum Umfang der durch Abfragen erzeugten Seitenlesevorgnge ab. Die Ausgabe von STATISTICS IO schliet die Werte ein, die in der folgenden Tabelle aufgefhrt sind.
Wert Logische Lesevorgnge Physische Lesevorgnge Beschreibung Anzahl der aus dem Datencache gelesenen Seiten. Anzahl der von der Festplatte gelesenen Seiten. Weitere Informationen Der Zugriff auf alle Seiten erfolgt im Datencache. Wenn eine Seite nicht im Cache verfgbar ist, muss sie physisch vom Datentrger gelesen werden. Dieser Wert ist immer kleiner oder gleich dem Wert fr die logischen Lesevorgnge. Im Folgenden ist die Methode fr die Berechnung des Wertes der Cachetrefferquote aufgefhrt:
Logische Lesevorgnge Physische Lesevorgnge

Cachetrefferquote =

Logische Lesevorgnge

Read-AheadLesevorgnge

Anzahl der Seiten, die in den Cache geschrieben werden.

Wenn dieser Wert hoch ist, bedeutet dies, dass der Wert fr physische Lesevorgnge niedriger und die Cachetrefferquote hher ist, als wenn Read-Ahead nicht aktiviert wre. Fr die ueren Tabellen einer linken Verknpfung sollte der Scanzhler immer den Wert 1 aufweisen. Fr innere Tabellen wird die Anzahl der logischen Lesevorgnge durch den Scanzhler, multipliziert mit der Anzahl der Seiten, auf die bei jedem Scan zugegriffen wird, bestimmt.

Scananzahl

Anzahl der Zugriffe auf die Tabelle.

Anmerkung Die SET-Anweisungen bleiben so lange fr die Sitzung gltig, bis Sie die Option OFF angeben oder die Sitzung beenden.

16

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Anzeigen der Ausgabe von SHOWPLAN_ALL und SHOWPLAN_TEXT


Erlutern Sie die Verwendung der SHOWPLANAnweisungen.

Thema

Struktur der Ausgabe der SHOWPLAN-Anweisung Gibt Informationen in einem Satz von Zeilen zurck Bildet eine hierarchische Struktur Stellt Schritte dar, die vom Abfrageoptimierer durchlaufen werden Zeigt geschtzte Werte zur Optimierung einer Abfrage an, nicht den tatschlichen Ausfhrungsplan Details der Ausfhrungsschritte Unterschiede zwischen der Ausgabe von SHOWPLAN_TEXT und SHOWPLAN_ALL

Einstieg

Mit Hilfe der Anweisungen SET SHOWPLAN_TEXT und SET SHOWPLAN_ALL knnen Sie detaillierte Informationen zur Ausfhrung von Abfragen und zum Umfang der Ressourcen abrufen, die fr die Verarbeitung der Abfrage erforderlich sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe der Anweisungen SET SHOWPLAN_TEXT und SET SHOWPLAN_ALL knnen Sie detaillierte Informationen zur Ausfhrung von Abfragen und zum Umfang der Ressourcen abrufen, die fr die Verarbeitung der Abfrage erforderlich sind.

Struktur der Ausgabe der SHOWPLAN-Anweisung


Fr die Ausgabe der SHOWPLAN-Anweisung gilt Folgendes: Sie gibt Informationen in einem Satz von Zeilen zurck. Sie bildet eine hierarchische Struktur. Sie stellt die Schritte dar, die vom Abfrageoptimierer durchlaufen werden, um die einzelnen Anweisungen auszufhren. Sie zeigt geschtzte Werte zur Optimierung einer Abfrage an, nicht den tatschlichen Ausfhrungsplan. Die geschtzten Werte basieren auf vorhandenen Statistiken.

Details der Ausfhrungsschritte


Jede in der Ausgabe widergespiegelte Anweisung enthlt zuerst eine Zeile mit dem Text der Anweisung, auf die mehrere Zeilen mit den Details der Ausfhrungsschritte folgen. Die Details der Ausfhrungsschritte umfassen Folgendes: Welche Indizes werden mit welchen Tabellen verwendet. Die Verknpfungsreihenfolge der Tabellen. Der gewhlte Aktualisierungsmodus. Arbeitstabellen und andere Strategien.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

17

Unterschiede zwischen der Ausgabe von SHOWPLAN_TEXT und SHOWPLAN_ALL


Der Unterschied zwischen der Ausgabe von SHOWPLAN_TEXT und SHOWPLAN_ALL ist, dass die Ausgabe von SHOWPLAN_ALL weitere Informationen zurckgibt, z. B. geschtzte Zeilen, E/A, CPU und durchschnittliche Zeilenlnge der Abfrage. Anmerkung Die SET-Anweisungen bleiben so lange fr die Sitzung gltig, bis Sie die Option OFF angeben oder die Sitzung beenden.

18

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Grafisches Anzeigen des Ausfhrungsplanes


Stellen Sie die Themen dieses Unterabschnitts vor.

Thema

Einstieg

Elemente des grafischen Ausfhrungsplanes Lesen der Ausgabe des grafischen Ausfhrungsplanes Verwenden der Bookmark Lookup-Operation

Mit Hilfe von SQL Query Analyzer knnen Sie einen Ausfhrungsplan mit farbiger Kennzeichnung anzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit Hilfe von SQL Query Analyzer knnen Sie einen Ausfhrungsplan mit farbiger Kennzeichnung anzeigen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

19

Elemente des grafischen Ausfhrungsplanes


Benennen Sie die Elemente des grafischen Ausfhrungsplanes.

Thema

Einstieg

Schritte sind die Arbeitseinheiten, die fr die Verarbeitung einer Abfrage verwendet werden Schrittfolge ist die Reihenfolge, in der die Schritte verarbeitet werden Logische Operatoren beschreiben die relationale algebraische Operation, die fr die Verarbeitung einer Anweisung verwendet wird Physische Operatoren beschreiben den Algorithmus, der fr die physische Implementierung der Anweisungsverarbeitung verwendet wird

Im grafischen Ausfhrungsplan, der die folgenden Elemente enthlt, werden Symbole verwendet, um die Ausfhrung bestimmter Teile von Anweisungen und Abfragen darzustellen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Gehen Sie kurz auf die Symbole, die physischen Operatoren und die Beschreibungen ein, die der Abfrageoptimierer verwendet. Eine Liste der physischen Operatoren folgt.

Im grafischen Ausfhrungsplan, der die folgenden Elemente enthlt, werden Symbole verwendet, um die Ausfhrung bestimmter Teile von Anweisungen und Abfragen darzustellen: Schritte sind die Arbeitseinheiten, die fr die Verarbeitung einer Abfrage verwendet werden. Schrittfolge ist die Reihenfolge, in der die Schritte verarbeitet werden. Logische Operatoren beschreiben die relationale algebraische Operation, die fr die Verarbeitung einer Anweisung verwendet wird, z. B. Durchfhren einer Aggregation. Der logische Operator entspricht blicherweise dem physischen Operator. Nicht fr alle Schritte, die fr die Verarbeitung einer Abfrage verwendet werden, oder Aktualisierungsoperationen werden logische Operatoren eingesetzt. Physische Operatoren beschreiben den Algorithmus, der fr die physische Implementierung der Anweisungsverarbeitung verwendet wird, z. B. Scannen eines gruppierten Indexes. Fr jeden Schritt im Rahmen einer Abfrage oder Aktualisierungsoperation ist ein physischer Operator erforderlich.

20

Unterrichtseinheit 13: Optimieren der Abfrageleistung

In der folgenden Liste wird ein Teil der physischen Operatoren aufgefhrt, die der Abfrageoptimierer verwendet, um die Algorithmen darzustellen.
Symbol Physischer Operator Bookmark Lookup Operatorbeschreibung Dieser Operator verwendet ein Lesezeichen (Zeilen-ID oder Gruppierungsschlssel), um die zugehrige Zeile in der Tabelle oder im gruppierten Index zu suchen. Dieser Operator scannt die Eingabe und gibt nur die Zeilen zurck, die den in der Argument-Spalte enthaltenen Filterausdruck erfllen. Dieser Operator erzeugt eine Hashtabelle, indem er fr jede Zeile der Erstellungseingabe einen Hashwert berechnet. Dieser Operator ruft alle Zeilen aus dem in der Argument-Spalte angegebenen nicht gruppierten Index ab. Dieser Operator verwendet die Suchfunktionen der Indizes, um Zeilen aus einem nicht gruppierten Index abzurufen. Diese Operator fhrt alle Arten von Verknpfungen aus (ausgenommen Selbstverknpfungen und CROSS JOINs), einschlielich UNIION-Operationen. Dieser Operator fhrt, blicherweise mit Hilfe eines Indexes, fr jede Zeile der ueren Tabelle eine Suche in der inneren Tabelle durch. Dieser Operator sortiert alle eingehenden Zeilen. Dieser Operator ruft alle Zeilen aus der in der Argument-Spalte angegebenen Tabelle ab.

Filter Hash Match Index Scan Index Seek Merge Join Nested Loops Sort Table Scan

Anmerkung Eine vollstndige Auflistung der Symbole sowie weitere Informationen erhalten Sie, indem Sie in der SQL Server-Onlinedokumentation nach Grafische Anzeige des Ausfhrungsplanes mithilfe von SQL Query Analyzer suchen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

21

Lesen der Ausgabe des grafischen Ausfhrungsplanes


Erlutern Sie, wie die Ausgabe des Ausfhrungsplanes gelesen werden muss.

Thema

Abfrageplan

Schrittfolge Schrittfolge
Member.corp_no Kosten: 9%

Einstieg

SELECT Bookmark Lookup Kosten: 0% Kosten: 8%

Hash Match Root Kosten: 28% Filter Member.fname Kosten: 0% Kosten: 10%

Die Ausgabe des grafischen Ausfhrungsplanes wird von rechts nach links und von oben nach unten gelesen. Jede Abfrage im Batch, die analysiert wird, wird angezeigt, einschlielich der prozentualen Kosten jeder Abfrage an den Gesamtkosten des Batches.

Index Seek Scannt einen bestimmten Bereich von Zeilen von einem nicht gruppierten Index Physische Operation: Logische Operation: Zeilenanzahl: Geschtzte Zeilenlnge: E/A-Kosten: CPU-Kosten: Anzahl der Ausfhrungen: Kosten: Teilbaumkosten: Index Seek Index Seek 414 24 0.00706 0.000605 1.0 0.007675(6%) 0.00767

Argument: OBJECT: ([credit].[dbo].[member].[fname]), SEEK: ([member],[firstname] >=Rb AND [member],[firstname] <T) ORDERED

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Die Ausgabe des grafischen Ausfhrungsplanes wird von rechts nach links und von oben nach unten gelesen. Jede Abfrage im Batch, die analysiert wird, wird angezeigt, einschlielich des prozentualen Kostenanteils der Abfrage an den Batchgesamtkosten. Jeder Schritt kann einen oder mehrere zu verarbeitende Knoten umfassen. Der Begriff Knoten bezeichnet eine Operation, die der Abfrageoptimierer verwendet und die durch ein Symbol dargestellt wird. Der Ausfhrungsplan kann mehrere Knoten fr einen bestimmten Schritt enthalten. Jeder Knoten steht in Beziehung zu einem bergeordneten Knoten. Alle Knoten mit demselben bergeordneten Knoten werden in derselben Spalte dargestellt. Pfeile verbinden jeden Knoten mit seinem bergeordneten Knoten. Rekursive Operationen werden mit dem Iterationssymbol dargestellt. Operatoren werden als Symbole dargestellt, die sich auf einen bestimmten bergeordneten Knoten beziehen. Wenn der Batch mehrere Anweisungen enthlt, werden mehrere Ausfhrungsplne gezeichnet.

Verwenden Sie SQL Query Analyzer, um die Option Ausfhrungsplan anzeigen zu aktivieren, und fhren Sie dann eine Abfrage aus. Positionieren Sie den Mauszeiger in der Ausgabe des Ausfhrungsplanes auf einem Symbol, um weitere Informationen zu der jeweiligen Operation anzuzeigen.

22

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Geben Sie eine kurze Beschreibung der unterschiedlichen Arten von Detailinformationen, die angezeigt werden.

Methodischer Hinweis

Anzeigen weiterer Informationen


Wenn Sie den Mauszeiger auf einem Knoten (der durch ein Symbol dargestellt wird) platzieren, werden neben den Informationen, die in der folgenden Tabelle aufgefhrt sind, detaillierte Informationen zu den physischen und logischen Operatoren angezeigt.
Messwerte Zeilenanzahl Geschtzte Zeilenlnge E/A-Kosten CPU-Kosten Anzahl der Ausfhrungen Kosten Beschreibung Die Anzahl der Zeilen, die vom Operator zurckgegeben werden. Die geschtzte Lnge der Zeile, die vom Operator zurckgegeben wird. Die geschtzten Kosten der gesamten E/A-Aktivitt fr die Operation. Dieser Wert sollte mglichst klein sein. Die geschtzten Kosten der gesamten CPU-Aktivitt fr die Operation. Die Anzahl der Ausfhrungen der Operation whrend einer Abfrage. Die Kosten, die der Abfrageoptimierer beim Ausfhren der Operation verursacht, einschlielich der prozentualen Kosten dieser Operation an den Gesamtkosten der Abfrage. Die Gesamtkosten, die der Abfrageoptimierer beim Ausfhren dieser Operation und aller in demselben Teilbaum vorhergehenden Kosten verursacht. Die Prdikate und Parameter, die von der Abfrage verwendet werden.

Teilbaumkosten

Argument

Unterrichtseinheit 13: Optimieren der Abfrageleistung

23

Verwenden der Bookmark Lookup-Operation


Beschreiben Sie, wie der Abfrageoptimierer die Bookmark LookupOperation verwendet.

Thema

Analysieren des Abfrageplanes blicherweise verwendet, wenn alle anderen Schritte verarbeitet wurden Abrufen von Zeilen Zeilen-ID Gruppierungsschlssel Untersuchen der Detailinformationen Ein Lesezeichen, mit dessen Hilfe die Zeile gesucht wird Bestimmen, wann der Bookmark Lookup-Operator verwendet wird Abfragen, die IN-Klauseln oder den OR-Operator enthalten

Einstieg

Bookmark Lookup ist ein interner Operator, der vom Abfrageoptimierer verwendet wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bookmark Lookup ist ein interner Operator, der hufig vom Abfrageoptimierer verwendet wird. Wenn der Abfrageoptimierer Datenstze identifiziert, die mgliche Kandidaten fr das beabsichtigte Resultset darstellen, zeichnet er die Information, die die Zeilenpositionen kennzeichnet (ein Lesezeichen) auf und fhrt mit Operationen fort, durch die die Suche przisiert wird. Wenn eine Zeile in die Suche eingeschlossen wird, verwendet SQL Server die Zeilenposition aus dem Lesezeichen, um die Zeile zu finden, indem der Abfrageplan analysiert wird, Zeilen abgerufen, Detailinformationen untersucht werden und indem bestimmt wird, wann der Bookmark Lookup-Operator verwendet wird.

Analysieren des Abfrageplanes


Im Abfrageplan verwendet der Abfrageoptimierer den Bookmark LookupOperator blicherweise dann, wenn alle anderen Schritte verarbeitet wurden.

Abrufen von Zeilen


Der Bookmark Lookup-Operator ruft alle entsprechenden Zeilen ab, indem er Folgendes verwendet: Eine Zeilen-ID (Row ID, RID), um die entsprechende Zeile in einem Heap zu finden. Den Gruppierungsschlssel, um die entsprechende Zeile in einem gruppierten Index zu finden.

24

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Untersuchen der Detailinformationen


Der Abfrageplan enthlt folgende Details zum Bookmark Lookup-Operator: Ein Lesezeichen, mit dessen Hilfe die Zeile in der Tabelle oder im gruppierten Index gesucht wird. Den Namen der Tabelle oder des gruppierten Indexes, in der bzw. in dem die Zeile gesucht wird. Die WITH PREFETCH-Klausel, wenn der Abfrageoptimierer ermittelt hat, dass Read-Aheads die beste Methode darstellen, um Lesezeichen in der Tabelle oder im gruppierten Index zu suchen.

Bestimmen, wann der Bookmark Lookup-Operator verwendet wird


Der Abfrageoptimierer verwendet den Bookmark Lookup-Operator blicherweise, um Abfragen zu verarbeiten, die die IN-Klausel und OR-Operatoren in der WHERE-Klausel enthalten. Beispiel Im folgenden Beispiel weist die member-Tabelle einen nicht gruppierten Index fr die member_no-Spalte auf. Der Abfrageoptimierer verwendet einen Bookmark Lookup-Operator, um die entsprechenden Zeilen abzurufen.
USE credit SELECT * FROM member WHERE member_no IN (4567,8765,4321)

Unterrichtseinheit 13: Optimieren der Abfrageleistung

25

Verwenden eines Indexes zum Abdecken einer Abfrage


Thema
Stellen Sie die Themen dieses Abschnitts vor.

Einstieg

Einfhrung zu Indizes, die eine Abfrage abdecken Suchen von Daten mit Hilfe von Indizes, die eine Abfrage abdecken Bestimmen, ob ein Index zum Abdecken einer Abfrage verwendet werden kann Ermitteln, ob ein Index zum Abdecken einer Abfrage verwendet wird Richtlinien fr das Erstellen von Indizes, die eine Abfrage abdecken

Sie knnen Indizes erstellen, die die Abfrage erfllen, ohne direkt auf die Datenseiten zugreifen zu mssen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Indizes erstellen, die die Abfrage auflsen, ohne direkt auf die Datenseiten zugreifen zu mssen. Durch diese Strategie kann die Abfrageleistung verbessert werden.

26

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Einfhrung zu Indizes, die eine Abfrage abdecken


Erlutern Sie das Konzept von Indizes, die eine Abfrage abdecken.

Thema

Nur nicht gruppierte Indizes decken Abfragen ab Indizes mssen alle Spalten enthalten, auf die in der Abfrage verwiesen wird Es ist kein Zugriff auf Datenseiten erforderlich Indizierte Sichten knnen Daten vorab aggregieren Indizes, die Abfragen abdecken, knnen Daten schnell abrufen

Einstieg

Wenn Sie Indizes erstellen, empfiehlt es sich mitunter, einen Index zu erstellen, der die gngigsten Abfragen abdeckt, da auf diese Weise der Umfang an E/A reduziert werden kann.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie Indizes erstellen, empfiehlt es sich mitunter, einen Index zu erstellen, der die gngigsten Abfragen abdeckt, da auf diese Weise der Umfang an E/A reduziert werden kann.

Nur nicht gruppierte Indizes decken Abfragen ab


Bei Indizes, die Abfragen abdecken, befinden sich alle zur Auflsung einer Abfrage erforderlichen Daten auf der Blattebene eines nicht gruppierten Indexes.

Indizes mssen alle Spalten enthalten, auf die in der Abfrage verwiesen wird
Ein Index, der eine Abfrage abdeckt, muss alle Spalten enthalten, auf die in der SELECT-Anweisung verwiesen wird. Wenn ein gruppierter Index vorhanden ist, befinden sich die Felder des Gruppierungsschlssels auf der Blattebene des nicht gruppierten Indexes und tragen zur Abdeckung der Abfrage bei.

Es ist kein Zugriff auf Datenseiten erforderlich


Wenn eine Abfrage durch einen Index abgedeckt wird, greift der Abfrageoptimierer nicht auf die Datenseiten zu, da alle erforderlichen Daten im Index enthalten sind. Der Umfang an E/A wird erheblich reduziert.

Indizierte Sichten knnen Daten vorab aggregieren


Wenn eine indizierte Sicht Spaltenwerte summiert, zhlt oder den Mittelwert bildet, kann der Abfrageoptimierer diese Sicht verwenden, um beim Auflsen einer Abfrage gespeicherte Werte bereitzustellen. Indizierte Sichten, die Daten vorab aggregieren, knnen die Leistung betrchtlich steigern.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

27

Indizes, die Abfragen abdecken, knnen Daten schnell abrufen


Das Erstellen von Indizes, die Abfragen abdecken, ist eine der schnellsten Methoden, um auf Daten zuzugreifen. Dies gilt insbesondere fr eine Abfrage mit niedriger Selektivitt. Durch einen Vergleich der Blattebenen der gruppierten und nicht gruppierten Indizes werden die Vorteile von Indizes, die Abfragen abdecken, klar erkennbar.
Indextyp Gruppiert Nicht gruppiert Inhalt der Blattebene Ganze Zeile (die tatschlichen Datenseiten) Schlsselwert

Da Indexwerte blicherweise kleiner sind als die tatschlichen Zeilen, kann eine Indexseite mehr Schlsselwerte als vollstndige Zeilen speichern. Das Speichern von Schlsselwerten erfordert weniger Seiten, wodurch der Umfang an E/A reduziert wird.

28

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Suchen von Daten mit Hilfe von Indizes, die eine Abfrage abdecken
Geben Sie eine bersicht ber die Themen dieses Unterabschnitts.

Thema

Beispiel fr die Einzelseiten-Navigation Beispiel fr die Teilscan-Navigation Beispiel fr die Navigation mittels vollstndigem Scan

Einstieg

Wenn ein Index zum Abdecken einer Abfrage verwendet werden kann, verwendet der Abfrageoptimierer unterschiedliche Verfahren zum Navigieren auf der Blattebene.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn ein Index zum Abdecken einer Abfrage verwendet werden kann, verwendet der Abfrageoptimierer unterschiedliche Verfahren zum Navigieren auf der Blattebene. Das Abdecken einer Abfrage kann das Lesen einer Einzelseite, eines Bereichs von Seiten oder smtlicher Seiten der Blattebene umfassen. Auf die Datenseiten selbst wird jedoch nie zugegriffen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

29

Beispiel fr die Einzelseiten-Navigation


Beschreiben Sie die Einzelseiten-Navigation eines Indexes.

Thema

Indexseiten

Einstieg

Im folgenden Beispiel muss fr eine Abfrage, die durch einen Index abgedeckt wird, eine Einzelseite der Blattebene gelesen werden.

Akhtar Akhtar Ganio Ganio

Sarah Sarah Jon Jon

Akhtar Akhtar Lang Lang

Sarah Sarah Eric Eric

SELECT lastname, firstname SELECT lastname, firstname FROM member FROM member WHERE lastname = 'Hall' WHERE lastname = 'Hall' NichtBlattebene
Lang Lang Eric Eric

Blattebene (Schlsselwert)
Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Sarah Sarah

Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jon Jon Don Don Sherri Sherri Amy Amy Beverly Beverly

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Eric Eric

Datenseiten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Einzelseiten-Navigation liegt vor, wenn von der Nicht-Blattebene aus nur eine Seite der Blattebene gelesen wird. Das Lesen einer einzelnen Seite entspricht einer Punktabfrage, bei der die Informationen - eine einzelne Zeile oder mehrere Zeilen - auf einer Einzelseite gefunden werden. Anmerkung Einzelseiten-Navigation heit nicht, dass die Abfrage nur eine Zeile zurckgeben kann. Eine Punktabfrage kann eine Zeile oder alle Zeilen einer Seite zurckgeben. In beiden Fllen werden smtliche Daten auf einer einzigen Seite gefunden. Beispiel Im folgenden Beispiel wird die Abfrage durch einen zusammengesetzten, nicht gruppierten Index fr die Spalten lastname und firstname abgedeckt.
SELECT lastname, firstname FROM member WHERE lastname = 'Hall'

Weitere Informationen

Um die Darstellung zu vereinfachen, wird der Zeiger von der Blattebene des nicht gruppierten Indexes auf die Datenseiten (Heap oder gruppierter Index) auf der Folie nicht gezeigt.

SQL Server fhrt die folgenden Schritte aus, um die gewnschten Informationen abzurufen: 1. Durchlaufen der Indexstruktur, wobei der Nachname Hall mit den Schlsselwerten verglichen wird. 2. Fortsetzen des Suchlaufs im Index, bis die erste Seite der Blattebene erreicht wird, die den Schlsselwert Hall enthlt. 3. Zurckgeben der entsprechenden Zeilen, ohne auf die Datenseiten zuzugreifen, da die Blattebene die lastname- und firstname-Schlsselwerte enthlt.

30

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Beispiel fr die Teilscan-Navigation


Beschreiben Sie die Teilscan-Navigation auf einem Index.

Thema

Indexseiten

Akhtar Akhtar Jordan Jordan Akhtar Akhtar Chai Chai Dunn Dunn Ganio Ganio

USE credit USE credit SELECT lastname, firstname SELECT lastname, firstname FROM member FROM member WHERE lastname BETWEEN 'Funk' AND 'Lang' WHERE lastname BETWEEN 'Funk' AND 'Lang'

Einstieg

Im folgenden Beispiel mssen fr eine Abfrage, die durch einen Index abgedeckt wird, mehrere Seiten der Blattebene gelesen werden.

Jordan Jordan Lang Lang Morgan Morgan Smith Smith

NichtBlattebene

Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl

Chai Chai Con Con Con Con Cox Cox Dale Dale

Dunn Dunn Dunn Dunn Fine Fine Fort Fort Funk Funk

Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jordan Jordan Kim Kim Kim Kim Koch Koch Koch Koch

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Morgan Morgan Nash Nash Nay Nay Ota Ota Rudd Rudd

Blattebene Blattebene (Schlsselwert) (Schlsselwert)


Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith

Datenseiten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein Teilscan liegt vor, wenn von der Blattebene aus ein Bereich von Seiten gelesen wird. Beispiel Im folgenden Beispiel wird die Abfrage durch einen zusammengesetzten, nicht gruppierten Index fr die Spalten lastname und firstname abgedeckt, indem ein Teilscan fr die Seiten der Blattebene durchgefhrt wird.
USE credit SELECT lastname, firstname FROM member WHERE lastname BETWEEN 'Funk' AND 'Lang'

Weitere Informationen

Die firstname-Spalte wurde ausgelassen, um die Darstellung auf der Folie zu vereinfachen. Verweisen Sie auf die vorherige Folie, wenn diese Folie zu Unklarheiten fhrt.

SQL Server fhrt die folgenden Schritte aus, um die gewnschten Informationen abzurufen: 1. Durchlaufen der Indexstruktur. 2. Beginnen mit dem Lesen der Blattebenenseiten auf der Seite, auf der der Nachname Funk zum ersten Mal vorkommt. Die Daten auf der Blattebene werden in aufsteigender Reihenfolge sortiert. 3. Lesen des Bereichs von Blattebenenseiten bis zu der Seite, die den Nachnamen Lang enthlt. Zu diesem Zeitpunkt ist der Teilscan abgeschlossen. 4. Zurckgeben der entsprechenden Zeilen, ohne auf die Datenseiten zuzugreifen, da der Scan hinsichtlich der Nachnamen zwischen Funk und Lang auf der Blattebene erfolgt ist.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

31

Beispiel fr die Navigation mittels vollstndigem Scan


Thema
Beschreiben Sie die Indexnavigation mittels vollstndigem Scan.
Indexseiten
Akhtar Akhtar Martin Martin Akhtar Akhtar Ganio Ganio

USE credit USE credit SELECT lastname, firstname SELECT lastname, firstname FROM member FROM member NichtBlattebene
Martin Martin Smith Smith

Einstieg

Im folgenden Beispiel mssen fr eine Abfrage, die durch einen Index abgedeckt wird, alle Seiten der Blattebene gelesen werden.

Blattebene (Schlsselwert)
Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Chai Chai Con Con Con Con Cox Cox Dale Dale Dunn Dunn Dunn Dunn Fine Fine Fort Fort Funk Funk Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jordan Jordan Kim Kim Kim Kim Koch Koch Koch Koch

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Morgan Morgan Nash Nash Nay Nay Ota Ota Rudd Rudd

Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith

Datenseiten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ein vollstndiger Scan liegt vor, wenn alle Seiten der Blattebene gelesen werden. hnlich wie ein Tabellenscan erfolgt ein vollstndiger Scan, wenn eine Abfrage keine WHERE-Klausel enthlt oder wenn die WHERE-Klausel nicht selektiv ist. Beispiel Im folgenden Beispiel wird die Abfrage durch einen zusammengesetzten, nicht gruppierten Index fr die Spalten lastname und firstname abgedeckt, indem ein vollstndiger Scan fr die Seiten der Blattebene durchgefhrt wird.
USE credit SELECT lastname, firstname FROM member

Weitere Informationen

SQL Server fhrt die folgenden Schritte aus, um die Informationen abzurufen: 1. Durchlaufen der Indexstruktur. 2. Lesen der Blattebenenseiten, beginnend mit der ersten Seite, und Scannen aller Blattebenenseiten, bis die letzte Seite der Blattebene erreicht ist. 3. Zurckgeben der entsprechenden Zeilen, ohne auf die Datenseiten zuzugreifen, da die Blattebene gescannt wurde. Anmerkung Das Scannen der Blattebene eines Indexes ist auch ein paralleler Datenscan. SQL Server verwendet die Read-Ahead-Verarbeitung, um die Leistung der Abfrage weiter zu verbessern.

Diese Folie stellt einen Scan nach Daten dar, die nach lastname geordnet sind. Wenn Daten ungeordnet oder nach firstname geordnet angefordert werden, kann SQL Server die Reservierungsseiten verwenden, um alle Indexseiten zu identifizieren und zu scannen, und dann die Nicht-Blattseiten aussortieren. Die firstname-Spalte wurde ausgelassen, um die Darstellung auf der Folie zu vereinfachen.

32

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Bestimmen, ob ein Index zum Abdecken einer Abfrage verwendet werden kann
Erklren Sie, wann der Abfrageoptimierer einen Index verwenden kann, um eine Abfrage abzudecken.

Thema

Der Index muss alle bentigten Daten enthalten Ein zusammengesetzter Index ist auch dann ntzlich, wenn nicht auf die erste Spalte verwiesen wird Eine WHERE-Klausel ist nicht erforderlich Ein nicht gruppierter Index kann verwendet werden, wenn er weniger E/A erfordert als ein gruppierter Index, der eine Spalte enthlt, auf die in der WHERE-KLausel verwiesen wird Indizes knnen verknpft werden, um eine Abfrage abzudecken

Einstieg

Ob ein Index eine Abfrage abdecken kann, hngt von folgenden Faktoren ab.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ob ein Index eine Abfrage abdecken kann, hngt von folgenden Faktoren ab: Der Index muss alle bentigten Daten enthalten. Zu diesen Daten zhlen alle Spalten, auf die verwiesen wird, unabhngig davon, ob sie im Resultset zurckgegeben, fr Sortier- oder Aggregationsoperationen verwendet oder in der WHERE-Klausel angegeben werden. Eine Spalte in einem Index kann auch dann dazu beitragen, eine Abfrage abzudecken, wenn es sich nicht um die erste Spalte handelt, auf die in einem zusammengesetzten Index verwiesen wird. So knnte z. B. ein Index fr SalesRep, Region und Amount (in dieser Reihenfolge) eine Abfrage abdecken, die nur auf Region und SUM(Amount) verweist. Eine WHERE-Klausel ist nicht erforderlich. Der Abfrageoptimierer scannt die ganze Blattebene. Ein nicht gruppierter Index kann zum Abdecken einer Abfrage verwendet werden, wenn er weniger E/A erfordert als ein gruppierter Index, der eine Spalte enthlt, auf die in der WHERE-Klausel verwiesen wird. Indizes knnen verknpft werden, um eine Abfrage abzudecken. Wenn einige oder alle Tabellen, auf die in einer Verknpfungsoperation verwiesen wird, ber einen Index verfgen, der eine Abfrage abdeckt, werden die Ergebnisse durch eine besondere Verknpfungsoperation verknpft; anschlieend werden die Zeilen zurckgegeben.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

33

Ermitteln, ob ein Index zum Abdecken einer Abfrage verwendet wird


Thema
Beschreiben Sie, wie ermittelt werden kann, ob eine Abfrage durch einen Index abgedeckt wird.

berprfen der Ausgabe des Ausfhrungsplanes Anzeigen des Satzes Scannt einen nicht gruppierten Index, entweder vollstndig oder nur einen Bereich Vergleichen der E/A Nicht gruppierter Index Gesamtzahl der Ebenen auf Nicht-Blattebene Gesamtzahl der Seiten, aus denen sich die Blattebene zusammensetzt Gesamtzahl der Zeilen pro Blattebenenseite Gesamtzahl der Zeilen pro Datenseite Gesamtzahl der Seiten, aus denen sich die Tabelle zusammensetzt

Einstieg

Ob Abfragen durch einen Index abgedeckt werden, ist fr die Benutzer nicht unmittelbar erkennbar. Sie knnen den grafischen Ausfhrungsplan berprfen oder die E/A vergleichen, um zu ermitteln, ob der Abfrageoptimierer einen Index verwendet hat, um eine Abfrage abzudecken.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Ob Abfragen durch einen Index abgedeckt werden, ist fr die Benutzer nicht unmittelbar erkennbar. Sie knnen den grafischen Ausfhrungsplan berprfen oder die E/A vergleichen, um zu ermitteln, ob der Abfrageoptimierer einen Index verwendet hat, um eine Abfrage abzudecken.

berprfen der Ausgabe des Ausfhrungsplanes


Sie knnen den Ausfhrungsplan grafisch anzeigen. Wenn die Ausgabe eines Ausfhrungsplanes den Satz Scannt einen nicht gruppierten Index, entweder vollstndig oder nur einen Bereich enthlt, konnte der Abfrageoptimierer die Abfrage durch Verwendung eines Indexes abdecken.

Vergleichen der E/A


Sie knnen auch die Ausgabe von STATISTICS IO anzeigen. Wenn Sie die Kosten eines Indexes bewerten, der eine Abfrage abdeckt, sollten Sie bedenken, dass der Abfrageoptimierer immer versucht, die Abfrage abzudecken, wenn er einen Ausfhrungsplan bewertet. Wenn Sie ermitteln mchten, ob die Abfrage abgedeckt wird, sollten Sie ber die folgenden Informationen zum nicht gruppierten Index und zur Tabelle verfgen: Nicht gruppierter Index Gesamtzahl der Ebenen auf Nicht-Blattebene Gesamtzahl der Seiten, aus denen sich die Blattebene zusammensetzt Gesamtzahl der Zeilen pro Blattebenenseite Gesamtzahl der Zeilen pro Datenseite

34

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Gesamtzahl der Seiten, aus denen sich die Tabelle zusammensetzt Anmerkung Falls gewnscht, knnen Sie die Gre der Blattebene eines nicht gruppierten Indexes auch berechnen, anstatt die STATISTICS IO-Anweisung zu verwenden. Alternativ dazu knnen Sie auch die sysindexes-Tabelle abfragen und die dpages-Spalten berprfen, in der die Gre der Blattebene angezeigt wird.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

35

Richtlinien fr das Erstellen von Indizes, die eine Abfrage abdecken


Fhren Sie einige Richtlinien fr die Erstellung von Indizes auf, die Abfragen abdecken knnen.

Thema

Fgen Sie Spalten zu Indizes hinzu Minimieren Sie die Gre des Indexschlssels Erhalten Sie ein sinnvolles Verhltnis zwischen Zeilenund Schlsselgre aufrecht

Einstieg

Beim Erstellen von Indizes, die Abfragen abdecken, sollten Sie die folgenden Richtlinien bercksichtigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Erstellen von Indizes, die eine Abfrage abdecken, sollten Sie die folgenden Richtlinien bercksichtigen. Fgen Sie Spalten zu Indizes hinzu. Mitunter empfiehlt es sich, zu einigen Indizes Spalten hinzuzufgen, fr die Folgendes gilt: Sie decken mehr als eine Abfrage ab. Sie tragen dazu bei, dass einige der gngigeren Abfragen abgedeckt werden. Es wird regelmig auf sie verwiesen. Sie tragen nicht zu einer deutlichen Erhhung der Schlsselgre bei. Methodischer Hinweis
Weisen Sie darauf hin, dass Spalten in einem Fall zu gro sein knnen, ihre Gre in einer anderen Situation jedoch vertretbar ist. Fragen Sie die Kursteilnehmer, wie viele Zeichen zu viele Zeichen sind, wenn eine Tabelle optimiert werden soll.

Minimieren Sie die Gre des Indexschlssels. Wenn Sie den Indexschlssel (Schlsselwerte) definieren, sollten Sie es vermeiden, Schlsselwerte anzugeben, die zu breit sind. Breite Zeilen erhhen die Zeilengre, die Anzahl der Indexebenen und die Gesamtzahl der Seiten. Leistungssteigerungen, die durch das Erstellen eines die Abfragen abdeckenden Indexes erzielt wrden, wrden auf diese Weise gemindert. Erhalten Sie ein sinnvolles Verhltnis zwischen Zeilen- und Schlsselgre aufrecht. Wenn die Gre des Indexschlssels relativ zur Zeilengre zunimmt, kann sich dies auf die Abfrageleistung auswirken. Ein extremes Beispiel wre eine Tabelle, fr die Sie einen nicht gruppierten Index erstellt haben, der alle Spalten der Tabelle umfasst. Hierdurch wird praktisch eine Kopie der Tabelle erstellt und geordnet auf der Blattebene des nicht gruppierten Indexes gespeichert.

36

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Indizierungsstrategien
Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Sie knnen Indizierungsstrategien implementieren, um die Abfrageleistung zu verbessern.

Bewerten der E/A fr Abfragen, die auf einen Bereich von Daten zugreifen Indizierung fr mehrere Abfragen Richtlinien fr das Erstellen von Indizes

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen Indizierungsstrategien implementieren, um die Abfrageleistung zu verbessern.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

37

Bewerten der E/A fr Abfragen, die auf einen Bereich von Daten zugreifen
Veranschaulichen Sie die Unterschiede bei der SeitenE/A, indem Sie unterschiedliche Zugriffsmethoden verwenden.

Thema

SELECT charge_no SELECT charge_no FROM charge FROM charge WHERE charge_amt BETWEEN 20 AND 30 WHERE charge_amt BETWEEN 20 AND 30

Einstieg

Der Abfrageoptimierer bercksichtigt automatisch mehrere Ausfhrungsplne und schtzt die notwendige E/A fr jeden Ausfhrungsplan.

Zugriffsmethode Zugriffsmethode
Tabellenscan Tabellenscan Gruppierter Index fr die charge_amt-Spalte Gruppierter Index fr die charge_amt-Spalte Nicht gruppierter Index fr die charge_amt-Spalte Nicht gruppierter Index fr die charge_amt-Spalte Zusammengesetzter Index fr die Spalten Zusammengesetzter Index fr die Spalten charge_amt und charge_no charge_amt und charge_no

Seiten-E/A SeitenSeiten-E/A
10,417 10,417 1042 1042 100,273 100,273 273 273

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Der Abfrageoptimierer bercksichtigt automatisch mehrere Ausfhrungsplne und schtzt die notwendige E/A fr jeden Ausfhrungsplan. Er whlt dann einen Ausfhrungsplan aus, der, basierend auf dem Umfang an E/A und anderen berlegungen, die beste Leistung erzielt. Vergleichen sie die SeitenE/A der unterschiedlichen Zugriffsmethoden, die der Abfrageoptimierer verwenden kann. Nehmen Sie z. B. die folgende Abfrage, die einen Bereich von Daten abruft, und vergleichen Sie dann die E/A dieser Abfrage mit anderen Methoden des Datenzugriffs.
SELECT charge_no FROM charge WHERE charge_amt BETWEEN 20 AND 30

Das Beispiel kann nicht auf der credit-Datenbank ausgefhrt werden. Beziehen Sie sich auf die Annahmen im Arbeitsbuch, wenn Sie die Seiten-E/A fr die unterschiedlichen Indizes vergleichen.

Methodischer Hinweis

Weisen Sie darauf hin, dass die Zugriffsmethoden, die auf der Folie dargestellt sind, die folgenden Informationen verwenden.

Gehen Sie von folgenden Daten aus, wenn Sie die unterschiedlichen Methoden vergleichen: Es liegen 1 Million Zeilen und 96 Zeilen pro Seite vor. Die Gesamtzahl der Seiten betrgt 10.147. Es gibt keinen gruppierten Index. 100.000 Zeilen fallen in den Bereich von 20,00 $ bis 30,00 $. Die Blattseite eines nicht gruppierten Indexes kann 367 Indexzeilen aufnehmen.

38

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Tabellenscan
Das Durchfhren eines Tabellenscans empfiehlt sich fr Abfragen, bei denen das Resultset eine hohen Prozentsatz einer Tabelle einschliet (niedrige Selektivitt). Tabellenscans eigenen sich, wenn die gesamte Seiten-E/A einer Abfrage die Anzahl der Seiten in der Tabelle berschreiten wrde. Wenn Sie die Abfrage ausfhren, die einen Tabellenscan vornimmt, betrgt die Seiten-E/A 10.417. Vergleichen Sie die Seiten-E/A fr einen Tabellenscan mit der E/A bei Verwendung eines nicht gruppierten Indexes fr die charge_amtSpalte. Die Durchfhrung eines Tabellenscans ist die effizientere Methode.

Gruppierter Index fr die charge_amt-Spalte


SQL Server fhrt die folgenden Schritte aus, um die gewnschten Informationen abzurufen: 1. Durchsuchen des gruppierten Indexes nach dem Mindestwert, in diesem Fall 20.00 $. 2. Lesen der Zeilen, beginnend bei 20.00 $, und Beenden der Suche bei 30.00 $. Da die charge_amt-Spalte gruppiert ist, ist die physische Reihenfolge der Daten nach der charge_amt-Spalte sortiert. Smtliche Daten, die innerhalb dieses Bereichs liegen, befinden sich geordnet auf aufeinander folgenden Seiten, wodurch das Abrufen von Daten erleichtert wird. Die Seiten-E/A betrgt 1.042 (100.000/96 Zeilen pro Seite).

Nicht gruppierter Index fr die charge_amt-Spalte


SQL Server fhrt die folgenden Schritte aus, um die gewnschten Informationen abzurufen: 1. Suchen nach dem Bereich von Werten auf der Blattebene des nicht gruppierten Indexes und Abrufen der RID fr jede Zeile. In diesem Fall erfolgt der Zugriff auf 273 Blattebenenseiten (100.000/367). 2. Abrufen der Daten von den einzelnen Seiten mit Hilfe des Bookmark Lookup-Operators fr die entsprechenden Zeilen. Die Seiten-E/A betrgt ungefhr 100.273. Die Verwendung eines nicht gruppierten Indexes fr die charge_amt-Spalte ist die am wenigsten effiziente Methode, um die Daten abzurufen, da SQL Server pro Zeile eine Seite lesen muss, zuzglich der Blattebene des Indexes, die gelesen werden muss, um die RID-Werte abzurufen. Jede Datenseite wird mehrmals in den Cache gelesen.

Zusammengesetzter Index fr die Spalten charge_amt und charge_no


Die Seiten-E/A betrgt 273 (100.000/367 Zeilen pro Seite). Die Anzahl der Indexzeilen pro Blattebene betrgt im Durchschnitt 367. Da die Spalten charge_amt und charge_no im Index enthalten sind, durchsucht SQL Server die Datenseiten nicht, wodurch der Umfang an E/A reduziert wird.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

39

Indizierung fr mehrere Abfragen


Thema
Beschreiben Sie die Schwierigkeiten der Erstellung von Indizes, die die am hufigsten ausgefhrten Abfragen untersttzen.
Beispiel 1 Beispiel 1

Einstieg

USE credit USE credit SELECT charge_no, charge_dt, charge_amt SELECT charge_no, charge_dt, charge_amt FROM charge FROM charge WHERE statement_no = 19000 AND member_no = 3852 WHERE statement_no = 19000 AND member_no = 3852

Es ist leichter, den zu erstellenden Index basierend auf einer einzelnen Abfrage auszuwhlen, als einen Index fr mehrere Abfragen mit unterschiedlichen Prioritten zu erstellen.

Beispiel 2 Beispiel 2

USE credit USE credit SELECT member_no, charge_no, charge_amt SELECT member_no, charge_no, charge_amt FROM charge FROM charge WHERE charge_dt between 30.07.1999' WHERE charge_dt between 30.07.1999' AND 31.07.1999' AND member_no = 9331 AND 31.07.1999' AND member_no = 9331

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Es ist leichter, den zu erstellenden Index basierend auf einer einzelnen Abfrage auszuwhlen, als einen Index fr mehrere Abfragen mit unterschiedlichen Prioritten zu erstellen. Die Erstellung von Indizes zur Untersttzung mehrerer Abfragen mit unterschiedlichen Prioritten ist komplexer, da ein Index, der fr eine Abfrage optimal ist, nicht notwendigerweise der am besten geeignete Index fr eine andere Abfrage ist. Das Ziel ist, durch Bewertung der E/A eine zufrieden stellende Leistung fr diejenigen Abfragen zu erreichen, die die hchste Prioritt aufweisen.

Verwenden Sie die Beispiele auf der Folie, und verweisen Sie auf die Tabelle im Arbeitsbuch der Kursteilnehmer, wenn Sie die Abfrageleistung fr beide Abfragen unter Verwendung unterschiedlicher Indizierungsstrategien vergleichen.

Beispielszenario
Fr die folgenden Beispiele gilt die Annahme, dass die Abfragen, die von Benutzern am hufigsten ausgefhrt werden, dazu dienen, Kundenlastschriften fr einen bestimmten Kontoauszug (Beispiel 1) und fr einen bestimmten Tag (Beispiel 2) zu ermitteln. Die erste Beispielabfrage bezieht sich auf 15 Prozent der Tabelle. Die zweite Abfrage ist sehr selektiv und greift nur auf wenige Zeilen zu.
USE credit SELECT charge_no, charge_dt, charge_amt FROM charge WHERE statement_no = 19000 AND member_no = 3852 USE credit SELECT member_no, charge_no, charge_amt FROM charge WHERE charge_dt between '30.07.1999' AND '31.07.1999' AND member_no = 9331

Beispiel 1

Beispiel 2

40

Unterrichtseinheit 13: Optimieren der Abfrageleistung

In der folgenden Tabelle werden die Abfrageleistung von Beispiel 1 und Beispiel 2 basierend auf den mglichen Indizierungsstrategien verglichen, die Sie implementieren knnen. Ein gruppierter Index fr die member_no-Spalte ist die beste Strategie.
Indextyp Gruppiert Nicht gruppiert Gruppiert Nicht gruppiert Spalte member_no charge_no charge_no member_no Beispielabfrage 1 Sehr schnell. Verwendet den gruppierten Index. Langsamer als wenn ein gruppierter Index fr die member_no-Spalte erstellt wrde. Sehr schnell. Verwendet den gruppierten Index. Langsamer als wenn ein gruppierter Index fr die member_no-Spalte erstellt wrde. Beispielabfrage 2 Sehr schnell. Verwendet den gruppierten Index. Langsam. Der nicht gruppierte Index fr member_no ist fr Datenbereiche nicht effizient. Sehr schnell. Verwendet den gruppierten Index. Schnell. Ein zusammengesetzter Index kann die Leistung des nicht gruppierten Indexes betrchtlich steigern.

Gruppiert Nicht gruppiert, zusammengesetzt Gruppiert Nicht gruppiert, zusammengesetzt

member_no statement_no, member_no charge_no member_no, charge_dt

Unterrichtseinheit 13: Optimieren der Abfrageleistung

41

Richtlinien fr das Erstellen von Indizes


Thema
Benennen Sie die Richtlinien fr das Erstellen sinnvoller Indizes.

Bestimmen Sie die Prioritten aller Abfragen Bestimmen Sie die Selektivitt fr jeden Abschnitt der WHERE-Klausel jeder Abfrage Bestimmen Sie, ob ein Index erstellt werden soll Identifizieren Sie die Spalten, die indiziert werden sollen Bestimmen Sie die beste Spaltenreihenfolge fr zusammengesetzte Indizes Bestimmen Sie die Indizes, die darber hinaus bentigt werden Testen Sie die Leistung der Abfragen

Einstieg

Um sicherzustellen, dass die von Ihnen erstellten Indizes fr den Abfrageoptimierer von Nutzen sind, sollten Sie die folgenden Richtlinien bercksichtigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Der Entscheidung ber die Anzahl der Indizes, die Indextypen sowie die Spalten, fr die Indizes erstellt werden sollen, sollten genaue Kenntnisse der Daten und der Anforderungen der Benutzer zugrunde liegen. Um sicherzustellen, dass die von Ihnen erstellten Indizes fr den Abfrageoptimierer von Nutzen sind, sollten Sie die folgenden Richtlinien bercksichtigen: Bestimmen Sie die Prioritten aller Abfragen. Machen Sie sich mit den Daten und ihrer geplanten Verwendung vertraut. Bestimmen Sie die vorrangigen Transaktionen fr die Datenbank. Bestimmen Sie die Selektivitt fr jeden Abschnitt der WHERE-Klausel jeder Abfrage. Bestimmen Sie, ob ein Index erstellt werden soll. In bestimmten Situationen ist die Erstellung eines Indexes nicht angebracht. Hierzu zhlen Folgende: Der Index wird nie vom Abfrageoptimierer verwendet. Die Spaltenwerte weisen eine niedrige Selektivitt auf. Die Spalte, die indiziert werden soll, ist zu breit.

42

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Identifizieren Sie die Spalten, die indiziert werden sollen. Erstellen Sie einen Index fr eine Spalte, die als Verknpfungsschlssel verwendet wird, um die Leistung der Verknpfung zu verbessern. Hierdurch ist es dem Abfrageoptimierer mglich, einen Index zu verwenden, anstatt einen Tabellenscan durchzufhren. Ermitteln Sie, ob die Spalte regelmig durchsucht wird. Stellen Sie sicher, dass diejenigen Spalten indiziert werden, auf die in den WHERE-Klauseln der Abfragen mit hchster Prioritt verwiesen wird. Bestimmen Sie die beste Spaltenreihenfolge fr zusammengesetzte Indizes. Bestimmen Sie die Indizes, die darber hinaus bentigt werden. Bestimmen Sie fr jede Tabelle die kleinste Anzahl an Indizes, die erstellt werden muss. Wgen Sie den durch die Indexverwendung erzielten Leistungsgewinn gegen den erhhten Aufwand bei Aktualisierungen ab. Wenn eine Abfrage nur unregelmig ausgefhrt wird, empfiehlt es sich mglicherweise, einen Index fr die Dauer einer bestimmten Aktivitt zu erstellen (wenn er einen betrchtlichen Leistungszuwachs erzielen kann) und ihn dann zu lschen. Testen Sie die Leistung der Abfragen. Testen Sie, nachdem die Indizes erstellt wurden, die Leistung der Abfragen mit hchster Prioritt, indem Sie fr jede Abfrage die folgenden Anweisungen ausfhren: SET SHOWPLAN ON SET STATISTICS IO ON SET STATISTICS TIME ON

Unterrichtseinheit 13: Optimieren der Abfrageleistung

43

Auerkraftsetzen des Abfrageoptimierers


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Einstieg

Dieser Abschnitt behandelt Verfahren, um den Abfrageoptimierer auer Kraft zu setzen.

Bestimmen, wann der Abfrageoptimierer auer Kraft gesetzt werden sollte Verwenden von Hinweisen und der SET FORCEPLANAnweisung Besttigen der Abfrageleistung nach dem Auerkraftsetzen des Abfrageoptimierers

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Dieser Abschnitt behandelt Verfahren, um den Abfrageoptimierer auer Kraft zu setzen, und beschreibt, wie Sie ermitteln knnen, wann dies erfolgen sollte. Wenn Sie den Abfrageoptimierer auer Kraft setzen, ist es wichtig, die Abfrageleistung zu testen und erneut zu besttigen.

44

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Bestimmen, wann der Abfrageoptimierer auer Kraft gesetzt werden sollte


Weisen Sie auf Alternativen zum Auerkraftsetzen des Abfrageoptimierers hin.

Thema

Begrenzen von Optimiererhinweisen Untersuchen Sie alle Alternativen, bevor Sie den Abfrageoptimierer auer Kraft setzen: Aktualisieren der Statistiken Erneutes Kompilieren gespeicherter Prozeduren berarbeiten der Abfragen oder Suchargumente Untersuchen der Mglichkeit, andere Indizes zu erstellen

Einstieg

Normalerweise empfiehlt es sich nicht, den Abfrageoptimierer auer Kraft zu setzen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn die Abfrageleistung nicht zufrieden stellend ist, ist es mglicherweise ratsam, den Abfrageoptimierer durch die Verwendung von Optimiererhinweisen auer Kraft zu setzen. Optimiererhinweise sind Schlsselwrter, die Sie in eine Abfrage einschlieen knnen, um eine bestimmte Optimierungsoperation zu erzwingen. Sie sollten die Verwendung von Optimiererhinweisen begrenzen, da sie zur Folge haben, dass die Optimierung statisch wird. Optimiererhinweise verhindern, dass der Abfrageoptimierer Anpassungen aufgrund einer genderten Umgebung vornehmen kann. Nachdem Sie Optimiererhinweise verwendet haben, mssen Sie die Abfrageleistung stndig berwachen, um zu berprfen, ob die Abfrageausfhrung optimal ist. Bevor Sie erwgen, den Abfrageoptimierer auer Kraft zu setzen, sollten Sie alle Alternativen untersuchen, indem Sie folgendermaen vorgehen: Aktualisieren der Statistiken. Erneutes Kompilieren gespeicherter Prozeduren. berarbeiten der Abfragen oder Suchargumente, um zu ermitteln, ob sie neu geschrieben werden sollten. Untersuchen der Mglichkeit, andere Indizes zu erstellen.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

45

Verwenden von Hinweisen und der SET FORCEPLAN-Anweisung


Erlutern Sie, wie der Abfrageoptimierer auer Kraft gesetzt werden kann.

Thema

Tabellenhinweise Verknpfungshinweise Abfragehinweise SET FORCEPLAN-Anweisung

Einstieg

Sie knnen den Abfrageoptimierer mit Hilfe von Optimiererhinweisen oder der SET FORCEPLANAnweisung auer Kraft setzen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie knnen den Abfrageoptimierer mit Hilfe von Hinweisen oder der SET FORCEPLAN-Anweisung auer Kraft setzen. Optimiererhinweise knnen Sie innerhalb der Anweisungen SELECT, INSERT, UPDATE und DELETE angeben. Es gibt drei Arten von Hinweisen, mit deren Hilfe der Abfrageoptimierer auer Kraft gesetzt werden kann.

Tabellenhinweise
Ein Tabellenhinweis legt fest, dass fr diese Tabelle oder fr eine Anweisung ein Tabellenscan ausgefhrt werden soll oder dass der Abfrageoptimierer einen oder mehrere Indizes oder eine Sperrmethode verwenden soll. Wenn Sie Tabellenhinweise verwenden, sollten Sie Folgendes bercksichtigen: Jeder Tabellenhinweis kann nur einmal angegeben werden; sie knnen jedoch mehrere Tabellenhinweise verwenden. Die WITH-Klausel muss direkt nach dem Tabellennamen angegeben werden.

46

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Syntax

table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ] WITH ( < table_hint > ) ::= { INDEX ( index_val [ ,...n ] ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITTED | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK | XLOCK }

Verknpfungshinweise
Verknpfungshinweise erzwingen eine Verknpfungsstrategie zwischen zwei Tabellen. Verknpfungshinweise werden in der FROM-Klausel einer Abfrage angegeben. Wenn ein Verknpfungshinweis angegeben wird, erzwingt der Abfrageoptimierer, basierend auf der Position der ON-Schlsselwrter, automatisch die Verknpfungsreihenfolge fr alle verknpften Tabellen in der Abfrage. Syntax <join_hint> ::= { LOOP | HASH | MERGE | REMOTE }

Abfragehinweise
Erinnern Sie die Kursteilnehmer daran, dass der UNION-Operator die Anzahl der Zeilen erhht, wohingegen Verknpfungsoperationen die Anzahl der Spalten erhhen.

Methodischer Hinweis

Abfragehinweise knnen eine Vielzahl von Aktionen steuern. Mit Hilfe der OPTION-Klausel knnen Sie festlegen, dass der Abfrageoptimierer einen bestimmten Hinweis fr eine Abfrage verwendet. Wenn Sie die OPTIONKlausel verwenden, sollten Sie die folgenden Punkte bercksichtigen: Jeder Abfragehinweis kann nur einmal angegeben werden; sie knnen jedoch mehrere Abfragehinweise verwenden. Die OPTION-Klausel muss mit der uersten Abfrage der Anweisung angegeben werden. Der Abfragehinweis wirkt sich auf alle Operatoren in der Anweisung aus. Falls UNION in der Hauptabfrage vorkommt, kann nur die letzte Abfrage, die einen UNION-Operator enthlt, die OPTION-Klausel beinhalten.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

47

Syntax

[ OPTION ( < query_hint > [ ,...n ) ] < query_hint > ::= { { HASH | ORDER } GROUP | { CONCAT | HASH | MERGE } UNION | {LOOP | MERGE | HASH} JOIN | FAST number_rows | FORCE ORDER | MAXDOP number | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS }

SET FORCEPLAN-Anweisung
Mit Hilfe der FROM-Klausel knnen Sie erzwingen, dass der Abfrageoptimierer Tabellen in der Reihenfolge verknpft, in der sie aufgefhrt werden. Wenn Sie die SET FORCEPLAN-Anweisung verwenden, verwendet der Abfrageoptimierer ausschlielich Nested Loop-Verknpfungen. Die SET FORCEPLAN-Anweisung ist eine Einstellung auf Sitzungsebene. Syntax SET FORCEPLAN {ON | OFF} Anmerkung Wenn ein oder mehrere Abfragehinweise dazu fhren, dass der Abfrageoptimierer keinen gltigen Ausfhrungsplan generiert, bricht SQL Server die Ausfhrung ab und gibt die Fehlermeldung 8622 aus. Sie mssen die Abfrage erneut senden, ohne einen Optimiererhinweis anzugeben oder die SET FORCEPLAN-Anweisung zu verwenden.

48

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Besttigen der Abfrageleistung nach dem Auerkraftsetzen des Abfrageoptimierers


Erklren Sie, warum es wichtig ist, die Abfrageleistung zu testen und neu zu bewerten, nachdem der Abfrageoptimierer auer Kraft gesetzt wurde.

Thema

berprfen, ob die Leistung verbessert wurde Dokumentieren der Grnde fr die Verwendung von Optimiererhinweisen Regelmiges Testen der Abfragen

Einstieg

Wenn Sie feststellen, dass es notwendig ist, den Abfrageoptimierer auer Kraft zu setzen, mssen Sie die Abfrageleistung testen und neu bewerten.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Wenn Sie feststellen, dass es notwendig ist, den Abfrageoptimierer auer Kraft zu setzen, mssen Sie berprfen, ob die Leistung verbessert werden konnte. Darber hinaus sollten Sie die Grnde fr das Auerkraftsetzen des Abfrageoptimierers dokumentieren und die Abfragen regelmig neu testen.

berprfen, ob die Leistung verbessert wurde


Sie knnen berprfen, ob die Hinweise fr den Abfrageoptimierer zu einer Verbesserung der Leistung fhren, indem Sie fr die Anweisungen STATISTICS IO und STATISTICS TIME die Option ON festlegen und in Query Analyzer die Option Ausfhrungsplan anzeigen auswhlen. In den meisten Fllen fhrt das Auerkraftsetzen des Abfrageoptimierers nicht zu einer Leistungsverbesserung. Wenn Sie Eingabewerte in einer gespeicherten Prozedur bergeben, mssen Sie sicherstellen, dass die Leistung fr keinen der Eingabewerte beeintrchtigt wird. Optimiererhinweise knnen die Leistung fr bestimmte Eingabewerte verbessern, bei anderen Eingabewerten jedoch zu einer Leistungsbeeintrchtigung fhren.

Dokumentieren der Grnde fr die Verwendung von Optimiererhinweisen


Wenn das Auerkraftsetzen des Abfrageoptimierers zu einer Leistungsverbesserung fhrt, sollten Sie dokumentieren, warum dies der Fall ist. Durch das Aufzeichnen der Grnde ist es Ihnen mglich, regelmig neu zu beurteilen, ob die Verwendung der Optimiererhinweise weiterhin angebracht ist. Wenn sich diese Grnde ndern, kann es sein, dass die Optimiererhinweise nicht mehr lnger erforderlich sind und zu einer Beeintrchtigung der Leistung fhren.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

49

Regelmiges Testen der Abfragen


Der Abfrageoptimierer arbeitet dynamisch und ermittelt bei sich ndernden Daten stndig den am besten geeigneten Ausfhrungsplan. Wenn Sie Optimiererhinweise verwenden, wird der Ausfhrungsplan statisch. Aus diesem Grund empfiehlt es sich, Abfragen, fr die Sie den Abfrageoptimierer auer Kraft gesetzt haben, regelmig zu testen.

50

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Empfohlene Methoden
Benennen Sie die empfohlenen Methoden zur Verbesserung der Abfrageleistung.

Thema

Verwenden Sie die Abfragekontrolle, um zu verhindern, dass Abfragen mit Verwenden Sie die Abfragekontrolle, um zu verhindern, dass Abfragen mit langen Ausfhrungszeiten ausgefhrt werden und Systemressourcen beanspruchen langen Ausfhrungszeiten ausgefhrt werden und Systemressourcen beanspruchen Machen Sie sich mit den Daten und der Art und Weise, wie Abfragen auf diese Machen Sie sich mit den Daten und der Art und Weise, wie Abfragen auf diese Daten zugreifen, vertraut Daten zugreifen, vertraut

Einstieg

Die folgenden empfohlenen Methoden knnen Ihnen bei der Optimierung der Abfrageleistung helfen.

Erstellen Sie Indizes, die die am hufigsten verwendeten Abfragen abdecken Erstellen Sie Indizes, die die am hufigsten verwendeten Abfragen abdecken

Entwickeln Sie Indizierungsstrategien fr einzelne und mehrere Abfragen Entwickeln Sie Indizierungsstrategien fr einzelne und mehrere Abfragen

Vermeiden Sie es, den Abfrageoptimierer auer Kraft zu setzen Vermeiden Sie es, den Abfrageoptimierer auer Kraft zu setzen

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die folgenden empfohlenen Methoden helfen Ihnen bei der Bestimmung von Indizierungsstrategien, durch die die Abfrageleistung sichergestellt oder verbessert werden kann. Verwenden Sie die Abfragekontrolle, um zu verhindern, dass Abfragen mit langen Ausfhrungszeiten ausgefhrt werden und Systemressourcen beanspruchen. Standardmig wird die Ausfhrung jeder Abfrage unabhngig von der Ausfhrungsdauer zugelassen. Die Abfragekontrolle verwendet einen geschtzten Kostenwert, um zu verhindern, dass Abfragen mit hohen Kosten berhaupt ausgefhrt werden. Machen Sie sich mit den Daten und der Art und Weise, wie Abfragen auf diese Daten zugreifen, vertraut. Wenn Sie wissen, wie der Abfrageoptimierer durch gruppierte Indizes, nicht gruppierte Indizes und Indizes, die Abfragen abdecken, navigiert, sind Sie in der Lage, sinnvolle Indizes fr die Abfragen zu entwerfen, die die Benutzer ausfhren. Erstellen Sie Indizes, die die am hufigsten verwendeten Abfragen abdecken. Wenn eine Abfrage durch einen Index abgedeckt wird, greift der Abfrageoptimierer nicht auf die Datenseiten zu, da alle erforderlichen Daten im Index enthalten sind. Der Umfang an E/A wird erheblich reduziert. Entwickeln Sie Indizierungsstrategien fr einzelne und mehrere Abfragen. Versuchen Sie, fr alle Abfragen mit hoher Prioritt eine zufrieden stellende Leistung zu erzielen. Vermeiden Sie es, den Abfrageoptimierer auer Kraft zu setzen. Der Abfrageoptimierer whlt in der Regel den effizientesten Ausfhrungsplan aus. Wenn Sie Optimiererhinweise verwenden, sind diese mit der Zeit mglicherweise veraltet und fhren zu einer Beeintrchtigung der Abfrageleistung.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

51

Weitere Informationen zu den folgenden Themen finden Sie in der SQL ServerOnlinedokumentation.
Thema Grafisches Anzeigen des Ausfhrungsplanes mit Symbolen Zwischenspeichern des Ausfhrungsplanes Erstellen von Indizes, die eine Abfrage abdecken Suchbegriff "Grafische Anzeige des Ausfhrungsplanes mithilfe von SQL Query Analyzer" "Zwischenspeicherung und Wiederverwendung von Ausfhrungsplnen" "Verwenden von Indizes fr Sichten", "Auflsen von Indizes fr Sichten"

52

Unterrichtseinheit 13: Optimieren der Abfrageleistung

bungseinheit A: Optimieren der Abfrageleistung


Thema
Geben Sie eine Einfhrung in die bungseinheit.

Einstieg

In dieser bungseinheit erstellen Sie Indizes und analysieren die Abfrageleistung.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Verwenden des grafischen Ausfhrungsplanes, um zu bestimmen, wie eine Abfrage aufgelst wird. Vergleichen der E/A fr Abfragen, die von Indizes abgedeckt oder nicht abgedeckt werden. Vergleichen der E/A fr Abfragen, die Bereiche von Daten abrufen. Verwenden von Optimiererhinweisen, um die Verwendung eines Indexes und einer Verknpfungsmethode zu erzwingen.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L13 befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore13.cmd. Mit dieser Befehlsdatei wird die credit-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist. Erstellen der gespeicherten Prozedur index_cleanup durch das Ausfhren von Index_cleanup.sql. Diese Datei befindet sich im Verzeichnis C:\Moc\2328A\Labfiles\L13.

Unterrichtseinheit 13: Optimieren der Abfrageleistung

53

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 45 Minuten

54

Unterrichtseinheit 13: Optimieren der Abfrageleistung

bung 1 Verwenden des grafischen Ausfhrungsplanes, um zu bestimmen, wie eine Abfrage aufgelst wird
In dieser bung erstellen Sie einen Index fr eine berechnete Spalte und verwenden den grafischen Ausfhrungsplan, um zu ermitteln, ob der Index sinnvoll ist. Sie knnen Abschnitte der Skriptdatei Indexed_View.sql unter C:\Moc\SQL2328A\Labfiles\L13 ffnen, lesen und ausfhren oder die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie eine indizierte Sicht In diesem Verfahren lschen Sie alle vorhandenen Indizes fr die chargeTabelle in der credit-Datenbank und erstellen eine indizierte Sicht, die Rechnungen (Charges) nach Mitglied zusammenfasst. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei Microsoft SQL Server 2000 anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Gruppe Administratoren von Microsoft Windows 2000 ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um vorhandene Indizes fr die charge-Tabelle in der credit-Datenbank zu lschen:
USE credit EXEC index_cleanup charge

4. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um eine Sicht fr die charge-Tabelle in der credit-Datenbank zu erstellen:
CREATE VIEW mem_charges WITH SCHEMABINDING AS SELECT member_no, SUM(charge_amt) AS charge_SUM, COUNT_BIG(*) AS mem_count FROM dbo.charge GROUP BY member_no

Unterrichtseinheit 13: Optimieren der Abfrageleistung

55

5. Geben Sie die beiden folgenden Anweisungen ein, und fhren Sie sie aus, um Indizes fr die mem_charges-Sicht zu erstellen:
CREATE UNIQUE CLUSTERED INDEX cl_mem_chg ON mem_charges(member_no) CREATE NONCLUSTERED INDEX nc_mem_chg_amt ON mem_charges(charge_SUM)

So zeigen Sie den grafischen Ausfhrungsplan an In diesem Verfahren fhren Sie eine Abfrage auf der charge-Tabelle aus und zeigen den Abfrageausfhrungsplan an, um zu ermitteln, wie der Abfrageoptimierer das Abfrageergebnis erhalten hat. 1. Klicken Sie im Abfragefenster im Men Abfrage auf Ausfhrungsplan anzeigen, um den grafischen Ausfhrungsplan zu starten. 2. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um eine Abfrage auf der charge-Tabelle auszufhren:
SELECT member_no, SUM(charge_amt) AS Charge_SUM FROM dbo.charge GROUP BY member_no

3. Wechseln Sie zur Registerkarte Ausfhrungsplan, um sehen Sie sich den grafischen Ausfhrungsplan an. Hat der Abfrageoptimierer die charge-Tabelle als Quelle fr das Resultset ausgewhlt? Begrndung? Nein. Bei Erstellung der indizierten Sicht wurden die Charges fr jedes Mitglied nach member_no summiert. Es ist effizienter, diese Werte aus dem nc_mem_chg_amt-Index abzurufen, als sie neu zu berechnen. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

56

Unterrichtseinheit 13: Optimieren der Abfrageleistung

bung 2 Vergleichen der E/A fr Abfragen, die von Indizes abgedeckt oder nicht abgedeckt werden
In dieser bung vergleichen Sie die E/A, die erforderlich ist, wenn gruppierte und nicht gruppierte Indizes verwendet werden, um selektive Daten abzurufen. Sie knnen Abschnitte der Skriptdatei Covered_Queries.sql unter C:\Moc\SQL2328A\Labfiles\L13 ffnen, lesen und ausfhren oder die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie einen gruppierten Index In diesem Verfahren lschen Sie alle vorhandenen Indizes fr die chargeTabelle und erstellen einen gruppierten Index fr die member_no-Spalte der charge-Tabelle in der credit-Datenbank. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich ggf. unter Verwendung der Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei Microsoft SQL Server 2000 anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Gruppe Administratoren von Microsoft Windows 2000 ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um vorhandene Indizes fr die charge-Tabelle zu lschen:
USE credit EXEC index_cleanup charge

4. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um einen gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
CREATE CLUSTERED INDEX charge_member_no_CL ON charge(member_no)

Unterrichtseinheit 13: Optimieren der Abfrageleistung

57

So bewerten Sie die Unterschiede in den Ausfhrungsplnen, wenn eine Abfrage durch einen Index abgedeckt oder nicht abgedeckt wird In diesem Verfahren fhren Sie eine Abfrage aus, die alle Spalten zurckgibt, und zeigen den Ausfhrungsplan an. Anschlieend lschen Sie vorhandene gruppierte Indizes und erstellen einen nicht gruppierten Index, fhren die Abfrage erneut aus und bewerten dann die Unterschiede im Ausfhrungsplan. 1. Klicken Sie in SQL Query Analyzer im Men Abfrage auf Ausfhrungsplan anzeigen. 2. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um die Statistikoption auf den Wert ON festzulegen:
SET STATISTICS IO ON

3. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um alle Spalten fr die Mitgliedsnummer 5001 abzurufen:
SELECT * FROM charge WHERE member_no = 5001

4. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 3 Index Clustered Index Seek

5. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um den gruppierten Index zu lschen und einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE NONCLUSTERED INDEX charge_member_no ON charge(member_no)

6. Fhren Sie die folgende SELECT-Anweisung erneut aus, um alle Spalten fr die Mitgliedsnummer 5001 abzurufen:
SELECT * FROM charge WHERE member_no = 5001

58

Unterrichtseinheit 13: Optimieren der Abfrageleistung

7. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 8 Index Index Seek

Beide Abfragen verwenden einen Index um die Datenstze zu ermitteln. Warum waren bei Verwendung des nicht gruppierten Indexes mehr logische Lesevorgnge erforderlich? Nachdem das Mitglied im nicht gruppierten Index ermittelt worden ist, ruft SQL Server smtliche Daten fr jede Zeile aus dem gruppierten Index ab. Fr diesen Vorgang muss sowohl der nicht gruppierte als auch der gruppierte Index gelesen werden. ____________________________________________________________ ____________________________________________________________ So wiederholen Sie den Test mit einer Abfrage, die durch einen nicht gruppierten Index abgedeckt wird In diesem Verfahren lschen Sie vorhandene Indizes, erstellen einen gruppierten Index fr die member_no-Spalte der charge-Tabelle, fhren eine Abfrage aus, die von dem gruppierten Index abgedeckt wird, und zeigen den Ausfhrungsplan an. Anschlieend lschen Sie den gruppierten Index, erstellen einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle, fhren die Abfrage erneut aus (die von dem nicht gruppierten Index ebenfalls abgedeckt wird) und zeigen den Ausfhrungsplan an. 1. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes zu lschen und einen gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE CLUSTERED INDEX charge_member_no_CL ON charge(member_no)

2. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um nur die member_no-Spalte fr die Mitgliedsnummer 5001 abzurufen:
SELECT member_no FROM charge WHERE member_no = 5001

3. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 3 Index Clustered Index Seek

Unterrichtseinheit 13: Optimieren der Abfrageleistung

59

4. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um den gruppierten Index zu lschen und einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE NONCLUSTERED INDEX charge_member_no ON charge(member_no)

5. Fhren Sie die folgende SELECT-Anweisung erneut aus, um nur die member_no-Spalte fr die Mitgliedsnummer 5001 abzurufen:
SELECT member_no FROM charge WHERE member_no = 5001

Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation)

Ergebnis 1 2 Index Index Seek

Unterscheidet sich der Umfang der E/A der beiden Abfragen, die unter Verwendung des gruppierten Indexes ausgefhrt wurden, obwohl eine der beiden Abfragen von dem gruppierten Index abgedeckt wurde? Begrndung? Nein. Aufgrund der Merkmale eines gruppierten Indexes ist die Blattebene mit den Datenseiten identisch. Eine Abfrage, die vom gruppierten Index abgedeckt wird, bietet keine Vorteile. ____________________________________________________________ ____________________________________________________________ Unterscheidet sich der Umfang der E/A der beiden Abfragen, die unter Verwendung des nicht gruppierten Indexes ausgefhrt wurden, obwohl eine der beiden Abfragen von dem nicht gruppierten Index abgedeckt wurde? Begrndung? Ja. Aufgrund der Merkmale eines nicht gruppierten Indexes ist die Blattebene nicht mit den Datenseiten identisch. Eine Abfrage, die vom nicht gruppierten Index abgedeckt wird, ist von Vorteil, da kein Zugriff auf die Datenseiten erforderlich ist. Da die Abfrage durch einen nicht gruppierten Index abgedeckt wurde, konnte der Umfang der E/A von 8 auf 2 Operationen reduziert werden. ____________________________________________________________ ____________________________________________________________ Unterscheidet sich die Leistung der Abfrage, die vom gruppierten Index abgedeckt wird, erheblich von der Leistung der Abfrage, die vom nicht gruppierten Index abgedeckt wird? Nein. In diesem Fall sind die Abfragen bis auf eine E/A-Operation identisch, was keinen deutlichen Leistungsgewinn darstellt. ____________________________________________________________ ____________________________________________________________

60

Unterrichtseinheit 13: Optimieren der Abfrageleistung

bung 3 Vergleichen der E/A fr Abfragen, die Bereiche von Daten abrufen
In dieser bung vergleichen Sie die E/A, die erforderlich ist, wenn gruppierte und nicht gruppierte Indizes verwendet werden, um einen Bereich von Daten abzurufen. Sie knnen Abschnitte der Skriptdatei Range_Queries.sql unter C:\Moc\SQL2328A\Labfiles\L13 ffnen, lesen und ausfhren oder die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So vergleichen Sie die Verwendung eines gruppierten Indexes und eines nicht gruppierten Indexes, die eine Abfrage abdecken In diesem Verfahren lschen Sie alle vorhandenen Indizes, erstellen einen gruppierten Index fr die member_no-Spalte der charge-Tabelle, fhren eine Abfrage aus und zeigen den Ausfhrungsplan an. Anschlieend lschen Sie vorhandene gruppierte Indizes und erstellen einen nicht gruppierten Index, fhren die Abfrage erneut aus und bewerten dann die Unterschiede im Ausfhrungsplan. 1. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes zu lschen und einen gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
USE credit EXEC index_cleanup charge CREATE CLUSTERED INDEX charge_member_no_CL ON charge(member_no)

2. Klicken Sie im Abfragefenster im Men Abfrage auf Ausfhrungsplan anzeigen. 3. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um die Statistikoption auf den Wert ON festzulegen:
SET STATISTICS IO ON

4. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um die Mitgliedsnummern 5001 bis 6000 abzurufen:
SELECT member_no FROM charge WHERE member_no BETWEEN 5001 AND 6000

5. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 58 Index Clustered Index Seek

Unterrichtseinheit 13: Optimieren der Abfrageleistung

61

6. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um den gruppierten Index zu lschen und einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE NONCLUSTERED INDEX charge_member_no ON charge(member_no)

7. Fhren Sie die folgende SELECT-Anweisung erneut aus, um die Mitgliedsnummern 5001 bis 6000 abzurufen:
SELECT member_no FROM charge WHERE member_no BETWEEN 5001 AND 6000

8. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 17 Index Index Seek

9. Vergleichen Sie die statistische Ausgabe der beiden Abfragen. Fhrt in diesem Beispiel die Verwendung des einen Indexes zu einer deutlich besseren Leistung als die Verwendung des anderen Indexes? Begrndung? Ja. Der Unterschied bezglich der E/A verhlt sich proportional zum Unterschied zwischen der Anzahl der Zeilen pro Datenseiten und der Anzahl der Zeilen pro Blattebenenseite. Wenn beispielsweise 10 Zeilen auf eine Datenseite und 100 Zeilen auf eine Blattebenenseiten passen, ist das Verhltnis 10 zu 1. Das bedeutet, dass fr 10 E/A-Operationen, die fr den Zugriff auf die Datenseiten notwendig sind, lediglich eine E/AOperation erforderlich ist, um auf die Blattebene einer abgedeckten Abfrage zuzugreifen. ____________________________________________________________ ____________________________________________________________

62

Unterrichtseinheit 13: Optimieren der Abfrageleistung

So fhren Sie eine abgedeckte Abfrage aus, die keine WHERE-Klausel enthlt In diesem Verfahren lschen Sie alle vorhandenen Indizes, erstellen einen gruppierten Index fr die member_no-Spalte der charge-Tabelle, fhren eine Abfrage aus und zeigen den Ausfhrungsplan an. Anschlieend lschen Sie vorhandene gruppierte Indizes und erstellen einen nicht gruppierten Index, fhren die Abfrage erneut aus und bewerten dann die Unterschiede im Ausfhrungsplan. 1. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes zu lschen und einen gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE CLUSTERED INDEX charge_member_no_CL ON charge(member_no)

2. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um alle Mitgliedsnummern abzurufen:
SELECT member_no FROM charge

3. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 675 Index Clustered Index Scan

4. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um den gruppierten Index zu lschen und einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
EXEC index_cleanup charge CREATE NONCLUSTERED INDEX charge_member_no ON charge(member_no)

5. Fhren Sie die folgende SELECT-Anweisung erneut aus, um alle Mitgliedsnummern abzurufen:
SELECT member_no FROM charge

Unterrichtseinheit 13: Optimieren der Abfrageleistung

63

6. Notieren Sie die statistischen Informationen in der folgenden Tabelle.


Informationen Scananzahl Logische Lesevorgnge Ausfhrungsplan (Index- oder Tabellenscan) Ausfhrungsplan (Art der Indexoperation) Ergebnis 1 187 Index Index Scan

7. Vergleichen Sie die statistische Ausgabe der beiden Abfragen. Worin besteht der Unterschied zwischen einem Tabellenscan und einem Indexscan? Ein Tabellenscan scannt immer die ganze Tabelle. Ein Indexscan (gruppierter Index oder nicht gruppierter Index, der eine Abfrage abdeckt) scannt smtliche Blattebenenseiten oder nur einen Teil der Blattebenenseiten. Der Abfrageoptimierer gibt einem Indexscan immer den Vorzug vor einem Tabellenscan, da ein Indexscan in den meisten Fllen die Anzahl der Seitenlesevorgnge begrenzt. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Welche Gre (Anzahl der Seiten) wird in der statistischen Ausgabe fr die Blattebene des nicht gruppierten Indexes aufgefhrt? Die Gre der Blattebene des nicht gruppierten Indexes betrgt ungefhr 186 Seiten (187 Seite - 1 Stammseite = 186). ____________________________________________________________ ____________________________________________________________

64

Unterrichtseinheit 13: Optimieren der Abfrageleistung

Wenn Sie noch Zeit haben Verwenden von Optimiererhinweisen, um die Verwendung eines Indexes und einer Verknpfung zu erzwingen
In dieser bung verwenden Sie Optimiererhinweise, um zu erzwingen, dass der Abfrageoptimierer die von Ihnen angegebenen Indizes und Verknpfungen verwendet. Sie knnen Abschnitte der Skriptdatei Hints.sql unter C:\Moc\SQL2328A\Labfiles\L13 ffnen, lesen und ausfhren oder die angegebenen Transact-SQL-Anweisungen eingeben und ausfhren. So vergleichen Sie Ausfhrungsplne, wenn Sie einen Indexhinweis verwenden In diesem Verfahren erzwingen Sie, dass der Abfrageoptimierer einen bestimmten Index verwendet. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich ggf. unter Verwendung der Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei Microsoft SQL Server 2000 anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Gruppe Administratoren von Microsoft Windows 2000 ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes zu lschen und einen gruppierten und einen nicht gruppierten Index fr die charge-Tabelle der credit-Datenbank zu erstellen:
USE credit GO EXEC index_cleanup charge

4. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um einen gruppierten Index fr die charge_dt-Spalte der charge-Tabelle zu erstellen:
CREATE CLUSTERED INDEX charge_date_CL ON charge(charge_dt)

Unterrichtseinheit 13: Optimieren der Abfrageleistung

65

5. Geben Sie die folgende Anweisung ein, und fhren Sie sie aus, um einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
CREATE NONCLUSTERED INDEX charge_member_NC ON charge(member_no)

6. Klicken Sie im Men Abfrage auf Ausfhrungsplan anzeigen, um den grafischen Ausfhrungsplan zu aktivieren. 7. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um Zeilen aus der charge-Tabelle abzurufen, in denen member_no dem Wert 4000 entspricht:
SELECT * FROM charge WHERE member_no = 4000

Welcher Index wird laut Ausgabe des Ausfhrungsplanes vom Abfrageoptimierer verwendet? Der charge_member_NC-Index wurde ausgewhlt, da er fr diese Abfrage eine hohe Selektivitt aufweist. ____________________________________________________________ ____________________________________________________________ 8. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um unter Verwendung des charge_date_CL-Indexes Zeilen aus der charge-Tabelle abzurufen, in denen member_no dem Wert 4000 entspricht:
SELECT * FROM charge WITH(INDEX (charge_date_CL)) WHERE member_no = 4000

Welcher Index wird laut Ausgabe des Ausfhrungsplanes vom Abfrageoptimierer verwendet? Der charge_date_CL-Index wurde ausgewhlt, da seine Verwendung erzwungen wurde. ____________________________________________________________ ____________________________________________________________

66

Unterrichtseinheit 13: Optimieren der Abfrageleistung

So vergleichen Sie den Ausfhrungsplan, wenn Sie einen Indexhinweis verwenden In diesem Verfahren werden Sie beobachten, wie mit Hilfe eines Indexhinweises erzwungen wird, dass der Abfrageoptimierer einen anderen Ausfhrungsplan bereitstellt. 1. Geben Sie die folgenden Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes zu lschen und einen gruppierten Index fr die chargeTabelle der credit-Datenbank zu erstellen:
USE credit GO EXEC index_cleanup member CREATE UNIQUE CLUSTERED INDEX member_no_CL ON member(member_no)

2. Aktivieren Sie in SQL Query Analyzer die Anzeige des grafischen Ausfhrungsplanes, und whlen Sie dann im Men Abfrage den Befehl Ausfhrungsplan anzeigen aus. 3. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um die Tabellen charge und member miteinander zu verknpfen:
SELECT m.lastname, SUM(charge_amt) FROM charge AS c JOIN member AS m ON c.member_no = m.member_no WHERE m.lastname = 'BARR' GROUP BY m.lastname

Welche Verknpfungsmethode wird laut Ausgabe des Ausfhrungsplanes vom Abfrageoptimierer verwendet? Als effizienteste Verknpfungsmethode wird eine Mergeverknpfung/innere Verknpfung ausgewhlt. ____________________________________________________________ ____________________________________________________________ 4. Geben Sie die folgende SELECT-Anweisung ein, und fhren Sie sie aus, um zu erzwingen, dass der Abfrageoptimierer eine Hashverknpfung verwendet, um die Tabellen charge und member miteinander zu verknpfen:
SELECT m.lastname, SUM(charge_amt) FROM charge AS c INNER HASH JOIN member AS m ON c.member_no = m.member_no WHERE m.lastname = 'BARR' GROUP BY m.lastname

Welche Verknpfungsmethode wird laut Ausgabe des Ausfhrungsplanes vom Abfrageoptimierer verwendet? Als Verknpfungsmethode wird eine Hashverknpfung/innere Verknpfung ausgewhlt, da ihre Verwendung erzwungen wurde. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 13: Optimieren der Abfrageleistung

67

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Einfhrung zum Abfrageoptimierer Abrufen von Ausfhrungsplaninformationen Verwenden eines Indexes zum Abdecken einer Abfrage Indizierungsstrategien Auerkraftsetzen des Abfrageoptimierers

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch.

Klren Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

1. Ein Finanzanalyst fhrt Abfragen mit langen Ausfhrungszeiten aus, die dazu fhren, dass die Antwortzeiten fr die Benutzer, die Transaktionen eingeben, lnger werden. Sie bitten den Finanzanalysten, die Aktivitten zu begrenzen, er wei jedoch nicht, welche Abfragen mehr Ressourcen beanspruchen als andere. Wie knnen Sie die Auswirkungen fr die Verarbeitung von Transaktionsabfragen reduzieren? Verwenden Sie die Abfragekontrolle, um die Abfragen des Finanzanalysten auf Abfragen zu beschrnken, deren Ausfhrungszeit maximal 30 Sekunden betrgt.

2. Sie ermitteln mit Hilfe von SQL Profiler die fnf Abfragen, die die schlechteste Leistung aufweisen. Wie knnen Sie die Ursache fr die schlechte Abfrageleistung ermitteln? Welche Vorteile bieten die einzelnen Methoden? Eines der Tools, die sehr gut geeignet sind, um die Ursache fr eine schlechte Abfrageleistung zu ermitteln, ist der grafische Ausfhrungsplan. Grafische Ausfhrungsplne ermglichen es Ihnen, anzuzeigen, wie eine Abfrage ausgefhrt wurde. Sie knnen jeden Schritt des Planes sowie die Abfolge der einzelnen Schritte anzeigen. Der Plan enthlt darber hinaus Kostenschtzungen und Warnungen, falls Indizes oder Statistiken fehlen sollten. Sie knnen auch die Anweisungen STATISTICS IO und STATISTICS TIME verwenden, um weitere Informationen zur Abfrage anzuzeigen, einschlielich der Hufigkeit der Ausfhrung eines Tabellenscans und der Gesamt-E/A, die SQL Server fr die Verarbeitung der Abfrage verwendet hat. Mit Hilfe von STATISTICS TIME knnen Sie ermitteln, wie lange die Verarbeitung der einzelnen Abfragephasen einschlielich CPU- und Kompilierungszeit gedauert hat.

68

Unterrichtseinheit 13: Optimieren der Abfrageleistung

3. Sie haben bestimmt, dass durch Hinzufgen eines weiteren Indexes zu einer Tabelle erreicht werden kann, dass der Index mehrere Abfragen abdecken kann. Durch das Vorhandensein eines Indexes, der eine Abfrage abdeckt, wird die Leistung gesteigert, wodurch die Kosten, die durch das Vorhandensein des zustzlichen Indexes entstehen, aufgewogen werden. Welche Anforderungen mssen erfllt sein, damit ein Index eine Abfrage abdeckt? Alle Spalten, auf die in der Abfrage verwiesen wird, mssen indiziert werden. Es muss mindestens ein nicht gruppierter Index vorhanden sein. Darber hinaus knnen zusammengesetzte Indizes und gruppierte Indizes verwendet werden, um eine Abfrage abzudecken.

4. Whrend Sie die vorhandenen Indizes untersuchen, stellen Sie fest, dass der gruppierte Index der Client-Tabelle die Last Name-Spalte verwendet. Sie wissen, dass Kunden blicherweise einzeln anhand des Nachnamens gesucht werden. Darber hinaus ist bekannt, dass Kunden im Rahmen der Berichterstellung regelmig anhand der Client Representative ID-Spalte gruppiert werden. Sollten Sie einen nicht gruppierten Index fr die Client Representative ID-Spalte erstellen? Nein. Sie sollten zuerst den gruppierten Index fr die Last Name-Spalte lschen und einen neuen gruppierten Index fr die Client Representative ID-Spalte erstellen. Durch die Erstellung eines neuen gruppierten Indexes kann die Berichterstellung erheblich beschleunigt werden. Anschlieend sollten Sie einen nicht gruppierten Index fr die Last Name-Spalte erstellen. Durch das Erstellen eines nicht gruppierten Indexes erzielen Sie dieselbe Leistung, wenn Sie einzelne Kunden anhand des Nachnamens suchen.

5. Im Juli haben Sie Optimiererhinweise in einer Abfrage verwendet, um die Leistung der Abfrage zu verbessern. Drei Monate spter stellen Sie fest, dass diese Abfrage erneut eine schlechte Leistung aufweist. Was ist die Ursache? Die Daten knnen sich so verndern, dass die angegebenen Optimiererhinweise nicht mehr zu einer effizienten Verarbeitung der Abfrage fhren. Darber hinaus knnen sich die Merkmale der Parameterwerte ndern, die von den Benutzern an die Abfrage bergeben werden, was ebenfalls dazu fhrt, dass der Optimiererhinweis keine effiziente Verarbeitung mehr bewirkt.

Unterrichtseinheit 14: Analysieren von Abfragen


Inhalt bersicht Abfragen mit dem AND-Operator Abfragen mit dem OR-Operator bungseinheit A: Analysieren von Abfragen mit dem AND-Operator und dem OR-Operator Abfragen mit Verknpfungsoperationen bungseinheit B: Analysieren von Abfragen mit unterschiedlichen Verknpfungsstrategien Empfohlene Methoden Lernzielkontrolle 1 2 4

5 35

48 57 58

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 14: Analysieren von Abfragen

iii

Hinweise fr den Kursleiter


Prsentation: 60 Minuten bungseinheit: 90 Minuten Diese Unterrichtseinheit vermittelt Kursteilnehmern umfassende Kenntnisse darin, wie der Abfrageoptimierer von Microsoft SQL Server 2000 Abfragen auswertet und verarbeitet, die den AND-Operator und den OR-Operator sowie Verknpfungsoperationen enthalten. Auerdem werden den Kursteilnehmern Kenntnisse darin vermittelt, wann sie den Abfrageoptimierer auer Kraft setzen sollten. In den bungseinheiten fhren die Kursteilnehmer verschiedene Abfragen durch. Auerdem analysieren die Kursteilnehmer, wie der Abfrageoptimierer Abfragen mit dem logischen AND-Operator und dem logischen OR-Operator verarbeitet. Weiterhin analysieren die Kursteilnehmer, wie Nested Loop-, Merge- und Hashverknpfungen verarbeitet werden. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Analysieren des Leistungsgewinns durch das Schreiben effizienter Abfragen und Erstellen ntzlicher Indizes fr Abfragen mit dem logischen ANDOperator. Analysieren des Leistungsgewinns durch das Schreiben effizienter Abfragen und Erstellen ntzlicher Indizes fr Abfragen mit dem logischen OROperator. Auswerten, wie der Abfrageoptimierer die verschiedenen Verknpfungsstrategien zur Abfrageoptimierung verwendet.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_14.ppt Die Beispieldatei C:\Moc\2328A\Demo\D14_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheiten durch. Machen Sie sich mit der Prsentation einschlielich der Animationen vertraut. Gehen Sie alle relevanten Whitepaper auf der Kursleiter-CD durch.

iv

Unterrichtseinheit 14: Analysieren von Abfragen

Multimediaprsentation
In diesem Abschnitt werden Vorgehensweisen bei der Multimediaprsentation beschrieben, die nicht in den Randnotizen enthalten und nicht fr die Unterlagen der Kursteilnehmer geeignet sind. Die Multimediaprsentation muss im Kurs abgespielt werden, da ihr Inhalt zu keinem anderen Zeitpunkt der Unterrichtseinheit vorgestellt wird. In dieser Multimediaprsentation wird vorgestellt, wie der Abfrageoptimierer Mergeverknpfungen verarbeitet.

Wie Mergeverknpfungen verarbeitet werden


So bereiten Sie die Multimediaprsentation vor und starten sie Klicken Sie auf die Schaltflche auf der Folie, um die Multimediaprsentation zu starten.

Skript fr die Multimediaprsentation


Wenn der Abfrageoptimierer eine Abfrage mit einer Verknpfungsoperation verarbeitet, kann die Abfrage mit Hilfe eines Mergeverknpfungsalgorithmus optimiert werden. 1. In diesem Beispiel werden die member-Tabelle und die payment-Tabelle in den member_no-Spalten verknpft. Die zum Verknpfen der Tabellen verwendeten Spalten werden durch die Mergeverknpfungsoperation in zwei Listen sortierter Eingabewerte konvertiert. Beachten Sie, dass die Eingabewerte in m.member_no eindeutige Werte sind und dass die Eingabewerte in p.member_no keine eindeutigen Werte sind. Diese Tabellen stellen 1:n-Beziehungen dar: Fr ein Mitglied gibt es viele Zahlungen. 2. Der Abfrageoptimierer vergleicht den ersten Wert aus Eingabe A (Input A) mit dem ersten Wert in Eingabe B (Input B). Wenn die Werte gleich sind, werden die bereinstimmenden Zeilen zurckgegeben. Wenn der Wert aus Input A niedriger ist als der Wert aus Input B, dann erhlt der Abfrageoptimierer den nchsten Eingabewert aus Input A. Wenn der Wert aus Input B niedriger ist als der Wert aus Input A, dann erhlt der Abfrageoptimierer den nchsten Eingabewert aus Input B. Da der Wert 1 der niedrigere Wert ist, wird die 1 verworfen, und der nchste Wert in Input A wird fr den nchsten Vergleich verwendet. 3. Der Abfrageoptimierer wertet aus, dass 2 gleich 2 ist. Wenn die Eingabewerte gleich sind, werden bereinstimmende Zeilen zurckgegeben.

Unterrichtseinheit 14: Analysieren von Abfragen

4. Der nchste Eingabewert (3) in Input A wird mit dem Eingabewert 2 in Input B verglichen. Da der Wert 2 der niedrigere Wert ist, wird die 2 verworfen, und der nchste Wert in Input B wird fr den nchsten Vergleich verwendet. 5. Da wieder der Wert 2 der niedrigere Wert ist, wird die 2 verworfen, und der nchste Wert in Input B wird fr den nchsten Vergleich verwendet. 6. Der Abfrageoptimierer setzt die Auswertung fort. Er vergleicht mit dem nchsten Eingabewert in Input B, der ebenfalls 2 betrgt. Eingabewert 2 wird verworfen, da er der niedrigere Wert ist, und der nchste Eingabewert in Input B wird fr den nchsten Vergleich verwendet 7. Der nchste Eingabewert in Input B ist die 4. Der Abfrageoptimierer vergleicht die beiden Werte. Da der Wert 3 niedriger als der Wert 4 ist, wird die 3 verworfen, und der nchste Wert in Input A wird fr den nchsten Vergleich verwendet. 8. Der Abfrageoptimierer wertet aus, dass 4 gleich 4 ist und gibt alle bereinstimmenden Zeilen zurck. 9. Der nchste Eingabewert (5) in Input A wird mit dem Eingabewert 4 in Input B verglichen. Da der Wert 4 der niedrigere Wert ist, wird die 4 verworfen, und der nchste Wert in Input B wird fr den nchsten Vergleich verwendet. 10. Da wieder der Wert 4 der niedrigere Wert ist, wird die 4 verworfen, und der nchste Wert in Input B wird fr den nchsten Vergleich verwendet. 11. Der nchste Eingabewert in Input B ist die 8. Der Abfrageoptimierer vergleicht die beiden Werte. Da der Wert 5 niedriger als der Wert 8 ist, wird die 5 verworfen, und der nchste Wert in Input A wird fr den nchsten Vergleich verwendet. 12. Der Abfrageoptimierer setzt die Auswertung fort. Er vergleicht den nchsten Eingabewert in Input A, der 6 betrgt. Er verwirft diesen Eingabewert und verwendet den nchsten Eingabewert in Input A fr den nchsten Vergleich. 13. Wie Sie sehen knnen, setzt der Abfrageoptimierer bei Input A fort, vergleicht den nchsten Schlsselwert mit Eingabewert 8 und verwirft den niedrigeren Wert. Der Abfrageoptimierer setzt diesen Vorgang fort, bis er bereinstimmende Eingabewerte findet. 14. Da 8 gleich 8 ist, gibt der Abfrageoptimierer die Zeilen zurck. 15. Der nchste Eingabewert in Input A ist die 9. Da der Wert 8 der niedrigere Wert ist, verwirft der Abfrageoptimierer diesen Eingabewert und verwendet den nchsten Eingabewert in Input B fr den nchsten Vergleich. 16. Der Abfrageoptimierer vergleicht mit dem nchsten Eingabewert in Input B, der ebenfalls 8 betrgt. Er verwirft diesen Eingabewert. 17. Da alle Zeilen aus Input B verarbeitet wurden, beendet der Abfrageoptimierer das Auswerten der brigen Werte in Input A. 18. Die Ergebnisse einer Mergeverknpfungsoperation knnen dann im nchsten Schritt des Ausfhrungsplanes, wie beispielsweise bei einem Bookmark Lookup oder einer anderen Verknpfungsoperation, verwendet werden.

vi

Unterrichtseinheit 14: Analysieren von Abfragen

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Abfragen mit dem AND-Operator Beschreiben Sie, wie der Abfrageoptimierer den AND-Operator verarbeitet. Erlutern Sie, dass die Abfrageoptimierung davon abhngt, ob fr einige oder fr alle Spalten, auf die in der WHERE-Klausel verwiesen wird, Indizes vorhanden sind. Abfragen mit dem OR-Operator Beschreiben Sie, wie der Abfrageoptimierer den OR-Operator verarbeitet. Erlutern Sie, dass die Abfrageoptimierung davon abhngt, ob fr einige oder fr alle Spalten, auf die in der WHERE-Klausel verwiesen wird, Indizes vorhanden sind. Abfragen mit Verknpfungsoperationen Erlutern Sie die Selektivitt und die Dichte einer JOIN-Klausel. Beschreiben Sie, wie der Abfrageoptimierer die verschiedenen Verknpfungsstrategien verwendet, um Abfragen mit Verknpfungen zu verarbeiten.

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheiten in dieser Unterrichtseinheit hngen auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheiten


Im folgenden Abschnitt werden die Anforderungen zum Einrichten der bungseinheiten dieser Unterrichtseinheit beschrieben.

Anforderung zum Einrichten der bungseinheit A


Fr die bungseinheit in dieser Unterrichtseinheit muss sich die credit-Datenbank in einem fr die bungseinheiten erforderlichen Status befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der beiden folgenden Aktionen durch: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore14A.cmd.

Unterrichtseinheit 14: Analysieren von Abfragen

vii

Anforderung zum Einrichten der bungseinheit B


Fr die bungseinheit in dieser Unterrichtseinheit muss sich die credit-Datenbank in einem fr die bungseinheiten erforderlichen Zustand befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der beiden folgenden Aktionen durch: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore14B.cmd. Achtung Falls dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore14A.cmd ausfhren, um sicherzustellen, dass die erste bungseinheit ordnungsgem funktioniert. Falls dieser Kurs angepasst wurde, mssen die Kursteilnehmer die Batchdatei C:\Moc\2328A\Batches\Restore14B.cmd ausfhren, um sicherzustellen, dass die zweite bungseinheit ordnungsgem funktioniert.

Ergebnisse der bungseinheiten


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

iv

Unterrichtseinheit 14: Analysieren von Abfragen

This page is intentionally left blank.

Unterrichtseinheit 14: Analysieren von Abfragen

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Abfragen mit dem AND-Operator Abfragen mit dem OR-Operator Abfragen mit Verknpfungsoperationen

Einstieg

In dieser Unterrichtseinheit lernen Sie, wie der Abfrageoptimierer den logischen AND-Operator und den logischen OR-Operator verarbeitet und wie der Abfrageoptimierer die verschiedenen Verknpfungsstrategien verwendet.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Analysieren des Leistungsgewinns durch das Schreiben effizienter Abfragen und Erstellen ntzlicher Indizes fr Abfragen mit dem logischen ANDOperator. Analysieren des Leistungsgewinns durch das Schreiben effizienter Abfragen und Erstellen ntzlicher Indizes fr Abfragen mit dem logischen OROperator. Auswerten, wie der Abfrageoptimierer die verschiedenen Verknpfungsstrategien zur Abfrageoptimierung verwendet.

Unterrichtseinheit 14: Analysieren von Abfragen

Abfragen mit dem AND-Operator


Beschreiben Sie, wie eine Abfrage, die den ANDOperator enthlt, optimiert wird.

Thema

Verarbeiten des AND-Operators Gibt die Zeilen zurck, die alle Bedingungen fr jedes in der WHERE-Klausel angegebene Kriterium erfllen Beschrnkt die Anzahl zurckgegebener Zeilen bei jeder zustzlichen Suchbedingung immer weiter Kann fr jede Suchbedingung der WHERE-Klausel einen Index verwenden Richtlinien zum Indizieren und Leistungsaspekte Definieren eines Indexes auf der Grundlage eines sehr selektiven Suchkriterium Leistungsunterschiede zwischen dem Erstellen mehrerer einspaltiger Indizes und dem Erstellen eines zusammengesetzten Index vergleichen

Einstieg

Das Verarbeiten des ANDOperators durch den Abfrageoptimierer hngt davon ab, ob fr einige oder fr alle Spalten, auf die in der WHERE-Klausel verwiesen wird, Indizes vorhanden sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Verarbeiten des AND-Operators durch den Abfrageoptimierer hngt davon ab, ob fr einige oder fr alle Spalten, auf die in der WHERE-Klausel verwiesen wird, Indizes vorhanden sind.

Verarbeiten des AND-Operators


Wenn eine Abfrage den AND-Operator enthlt, gilt fr den Abfrageoptimierer Folgendes: Gibt die Zeilen zurck, die alle Bedingungen fr jedes in der WHEREKlausel angegebene Kriterium erfllen. Beschrnkt die Anzahl zurckgegebener Zeilen bei jeder zustzlichen Suchbedingung immer weiter. Kann fr jede Suchbedingung der WHERE-Klausel einen Index verwenden. Verwendet immer einen Index, wenn der Index ntzlich ist. Wenn die Indizes fr keine der Spalten in der WHERE-Klausel ntzlich sind, fhrt der Abfrageoptimierer einen Tabellenscan oder einen Scan des gruppierten Indexes aus. Kann mehrere Indizes verwenden, falls sie ntzlich sind. Wenn mehrere Indizes vorhanden sind und einige Indizes fr beliebige Spalten in der WHERE-Klausel ntzlich sind, ermittelt der Abfrageoptimierer, welche Indexkombination verwendet wird.

Unterrichtseinheit 14: Analysieren von Abfragen

Im Ausfhrungsplan kann sich zeigen, dass ein Index oder die meisten Indizes zum Verarbeiten der Abfrage verwendet wurden Die Kombination aus Indizes wird durch Folgendes ermittelt: Selektivitt der Suche. Vorhandene Indextypen, wie z. B. gruppierte oder nicht gruppierte Indizes. Die Mglichkeit, den Index abzudecken. Das Vorhandensein einer indizierten Sicht. Kann mglicherweise nur einen Index verwenden, auch wenn mehrere ntzliche Indizes vorhanden sind. Wenn der Abfrageoptimierer einen sehr selektiven Index findet, wird dieser Index verwendet. Dann wird eine Filteroperation verwendet, um die brigen Suchergebnisse mit den qualifizierenden Zeilen zu verarbeiten.

Richtlinien zum Indizieren und Leistungsaspekte


Die beste Methode zum Erstellen eines Indexes fr Abfragen, die den ANDOperator enthalten, ist, wenn mindestens ein sehr selektives Suchkriterium vorhanden ist und ein Index fr die Spalte definiert wird. Sie knnen die Leistungsunterschiede beim Erstellen von mehreren einspaltigen Indizes und einem zusammengesetzten Index vergleichen. Die Abfrageleistung wird nicht unbedingt verbessert, indem jede Spalte indiziert wird, die Teil des AND-Operators ist. Mehrere Indizes sind jedoch vorteilhaft, wenn die Spalten, auf die der AND-Operator verweist, eine geringere Selektivitt aufweisen.

Unterrichtseinheit 14: Analysieren von Abfragen

Abfragen mit dem OR-Operator


Thema
Beschreiben Sie, wie eine Abfrage, die den OROperator enthlt, optimiert wird.

Gibt die Zeilen zurck, die beliebige Bedingungen fr jedes in der WHERE-Klausel angegebene Kriterium erfllen Erhht die Anzahl zurckgegebener Zeilen bei jeder zustzlichen Suchbedingung immer weiter Kann einen Index verwenden, der alle Teile des OR-Operators erfllt, oder verwendet verschiedene Indizes fr jeden Teil des OR-Operators Fhrt immer einen Tabellenscan oder einen Scan des gruppierten Indexes durch, wenn eine Spalte, auf die im OR-Operator verwiesen wird, keinen Index aufweist oder wenn der Index nicht ntzlich ist Kann mehrere Indizes verwenden

Einstieg

Das Verarbeiten des OROperators durch den Abfrageoptimierer hngt ebenfalls davon ab, ob fr einige oder fr alle Spalten, auf die in der WHEREKlausel verwiesen wird, Indizes vorhanden sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Verarbeiten des OR-Operators durch den Abfrageoptimierer hngt ebenfalls davon ab, ob fr einige oder fr alle Spalten, auf die in der WHEREKlausel verwiesen wird, Indizes vorhanden sind. Wenn eine Abfrage den OR-Operator enthlt, gilt fr den Abfrageoptimierer Folgendes: Gibt die Zeilen zurck, die beliebige Bedingungen fr jedes in der WHEREKlausel angegebene Kriterium erfllen. Erhht die Anzahl zurckgegebener Zeilen bei jeder zustzlichen Suchbedingung immer weiter. Kann einen Index verwenden, der alle Teile des OR-Operators erfllt, oder verwendet verschiedene Indizes fr jeden Teil des OR-Operators. Fhrt immer einen Tabellenscan oder einen Scan des gruppierten Indexes durch, wenn eine Spalte, auf die im OR-Operator verwiesen wird, keinen Index aufweist oder wenn der Index nicht ntzlich ist. Wenn mehrere Indizes vorhanden sind und alle Indizes ntzlich sind, fhrt der Abfrageoptimierer Folgendes aus: Durchsucht eine Tabelle mit Hilfe eines Indexes fr jede Spalte. Sortiert die qualifizierenden Werte fr jede Spalte. Kombiniert die Ergebnisse. Ruft die qualifizierenden Zeilen mit Hilfe einer Bookmark LookupOperation ab. Anmerkung Der Abfrageoptimierer konvertiert die IN-Klausel in den OROperator.

Unterrichtseinheit 14: Analysieren von Abfragen

bungseinheit A: Analysieren von Abfragen mit dem AND-Operator und dem OR-Operator
Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit betrachten Sie den Ausfhrungsplan und werten aus, wie der Abfrageoptimierer eine Abfrage optimiert, in der der AND-Operator und der OR-Operator verwendet wird.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Interpretieren von statistischen Informationen zu einer Abfrage, in der der AND-Operator verwendet wird, und Ermitteln, warum der Abfrageoptimierer bestimmte Indizes verwendet oder nicht verwendet. Interpretieren, warum der Abfrageoptimierer Abfragen mit einer kurzen Werteliste anders verarbeitet als Abfragen mit einer langen Werteliste. Erklren der Menge von Eingabe-/Ausgabevorgngen (E/A), die zum Verarbeiten einer Abfrage mit geschachtelten SELECT-Anweisungen verwendet werden, und Erlutern, warum der Abfrageoptimierer einen bestimmten Ausfhrungsplan ausgewhlt hat.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die credit-Datenbank in Microsoft SQL Server 2000. Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L14 befinden.

Unterrichtseinheit 14: Analysieren von Abfragen

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore14A.cmd. Mit dieser Befehlsdatei wird die credit-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Ressourcen verfgbar: Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16

Unterrichtseinheit 14: Analysieren von Abfragen (Fortsetzung) Benutzername SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 60 Minuten

Unterrichtseinheit 14: Analysieren von Abfragen

bung 1 Auswerten von Abfragen mit einigen Indizes


In dieser bung werden Sie drei Indizes fr die member-Tabelle erstellen. Sie werden mit Hilfe des AND-Operators eine Abfrage ausfhren, die drei Suchbedingungen enthlt, und dabei die Grnde fr das Erstellen des Plantyps durch den Abfrageerlutern. Sie werden auerdem die E/A-Vorgnge erklren, die zum Verarbeiten der Abfrage verwendet werden. Sie knnen Abschnitte der Skriptdatei EvalQuery.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie Indizes In diesem Verfahren werden Sie alle Indizes fr die member-Tabelle lschen und drei nicht gruppierte Indizes fr die Spalten firstname, corp_no und member_no erstellen. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie mit SQL Query Analyzer diese Anweisung ein, und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle zu lschen:
USE credit EXEC index_cleanup member

4. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um drei Indizes fr die member-Tabelle zu erstellen:
USE Credit CREATE NONCLUSTERED INDEX fname ON member(firstname) CREATE NONCLUSTERED INDEX corp_no ON member(corp_no) CREATE NONCLUSTERED INDEX mem_no ON member(member_no) GO

Anmerkung Die member-Tabelle enthlt 10.000 eindeutige Mitglieder (Zeilen).

Unterrichtseinheit 14: Analysieren von Abfragen

So fhren Sie eine Abfrage aus, die einige Indizes verwendet In diesem Verfahren werden Sie fr die Statistikoption ON festlegen, eine Abfrage ausfhren, die drei Suchbedingungen in der WHERE-Klausel enthlt (wobei fr jede Spalte, auf die in der WHERE-Klausel verwiesen wird, ein Index erstellt wird), die statistischen Informationen aufzeichnen und die Ergebnisse im Ausfhrungsplan beobachten. 1. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um fr die Statistikoption ON festzulegen:
SET STATISTICS IO ON

2. Klicken Sie im Men Abfrage auf Ausfhrungsplan anzeigen. 3. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um Daten zu Mitgliedern abzurufen, deren Vorname mit dem Buchstaben Q beginnt, deren Personalnummer hher als 450 ist und deren Mitgliedsnummer hher als 6.000 ist:
USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 6000

Anmerkung Diese Abfrage wird im Verlauf dieser bung als ursprngliche Abfrage bezeichnet. 4. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Namen der Indizes zum Verarbeiten der Abfrage Ergebnis 5 2 18 2 (fname und corp_no)

10

Unterrichtseinheit 14: Analysieren von Abfragen

5. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 6. Untersuchen Sie den Ausfhrungsplan. Er hnelt der folgenden Abbildung. Beachten Sie die im Ausfhrungsplan verwendeten Vorgnge. In dieser bung werden Sie den Ausfhrungsplan analysieren, um die verwendete Anzahl der E/A-Vorgnge und die Grnde fr die Auswahl dieses Ausfhrungsplanes zu erklren.
member.fname Kosten: 7% member.corp_no Kosten: 6%

Filter Kosten:8%

Hash Match/Inne Kosten: 22%

Bookmark Lookup Kosten: 66%

Filter Kosten: 0%

Select Kosten:0%

So erklren Sie die zum Verarbeiten der ursprnglichen Abfrage verwendeten E/A-Vorgnge In diesem Verfahren werden Sie die ursprngliche Abfrage als drei SELECTAnweisungen neu schreiben, um die 18 E/A-Vorgnge der ursprngliche Abfrage zu verstehen und zu erklren. Jede Anweisung stellt eine Suchbedingung der WHERE-Klausel dar, die die Suche beschrnkt. Fr jede Anweisung werden Sie statistische Informationen aufzeichnen und die Anzahl von E/A-Vorgngen zum Verarbeiten der Abfrage erklren. 1. Geben Sie die SELECT-Anweisung ein, mit der nur die erste Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie diese Anweisung aus:
USE credit SELECT firstname FROM member WHERE firstname LIKE 'Q%'

2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Namen der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 411 1 3 1 (fname) Ja

Unterrichtseinheit 14: Analysieren von Abfragen

11

3. Geben Sie die SELECT-Anweisung ein, mit der nur die zweite Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie diese Anweisung aus:
USE credit SELECT corp_no FROM member WHERE corp_no > 450

4. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Namen der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 303 1 3 1 (corp_no) Ja

5. Geben Sie die SELECT-Anweisung ein, mit der nur die dritte Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie diese Anweisung aus:
USE credit SELECT member_no FROM member WHERE member_no > 6000

6. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Namen der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 4000 1 9 1 (mem_no) Ja

12

Unterrichtseinheit 14: Analysieren von Abfragen

7. Vergleichen Sie die statistischen Informationen der ursprnglichen Abfrage mit dem Breakdown jeder Suchbedingung der Abfrage. Ursprngliche Abfrage
USE credit SELECT *FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 6000

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis der ursprnglichen Abfrage 5 2 18 2 (fname und corp_no)

Ergebnis der Abfrage mit der ersten Suchbedingung 411 1 3 1 (fname)

Ergebnis der Abfrage mit der zweiten Suchbedingung 303 1 3 1 (corp_no)

Ergebnis der Abfrage mit der dritten Suchbedingung 4000 1 9 1 (mem_no)

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. Warum wurden von den drei einzelnen Abfragen so wenige E/A-Vorgnge verwendet? Die Anzahl der E/A-Vorgnge wurde reduziert, da jede Abfrage den Index abdecken konnte. Ausschlieliches Lesen der Indexseiten auf Blattebene und nicht der Datenseiten reduziert die Anzahl der E/AVorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Warum hat der Abfrageoptimierer in der ursprnglichen Abfrage den Index fr die member_no-Spalte nicht verwendet? Da die Suchbedingung WHERE member_no > 6000 eine geringe Selektivitt aufweist. Die Abfrage gibt 4.000 von 10.000 Zeilen zurck. Im Vergleich zu anderen Suchbedingungen in der WHERE-Klausel beschrnkt diese WHERE-Klausel die Suche nicht. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

13

So lernen Sie den Ausfhrungsplan kennen, indem Sie Suchbedingungen kombinieren In diesem Verfahren werden Sie die ursprngliche Abfrage neu schreiben, indem Sie die Suchbedingungen der WHERE-Klausel kombinieren, die der Abfrageoptimierer im Ausfhrungsplan verwendet. Sie werden die statistischen Informationen aufzeichnen und den Ausfhrungsplan auswerten, um die Anzahl der E/A-Vorgnge zu erklren. 1. Geben Sie die SELECT-Anweisung ein, mit der die erste und die zweite Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie die Anweisung aus.
USE credit SELECT firstname FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450

2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 12 2 6 2 (fname und corp_no) Ja

Beachten Sie, dass der Abfrageoptimierer beim Ausfhren der Abfrage fr jede Suchbedingung einen Index verwendet.

14

Unterrichtseinheit 14: Analysieren von Abfragen

3. Vergleichen Sie die statistischen Informationen der ursprnglichen Abfrage mit der Abfrage, die die erste und die zweite Suchbedingung enthlt. Ursprngliche Abfrage
USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 6000

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis der ursprnglichen Abfrage 5 2 18 2 (fname und corp_no)

Ergebnis der Abfrage mit der ersten und der zweiten Suchbedingung 12 2 6 2 (fname und corp_no)

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. 4. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 5. Untersuchen Sie den Ausfhrungsplan. Warum weisen beide Abfragen die Scananzahl 2 auf? Beide Abfragen verwenden zwei Indizes. Der Abfrageoptimierer verwendet einen Index zur Zeit. Im ersten Durchgang verwendet der Abfrageoptimierer den Index fr die firstname-Spalte der member-Tabelle und fhrt automatisch eine abgedeckte Abfrage durch. Die Abfrage ist abgedeckt, da nur die Schlsselwerte (ein Scan und drei E/A-Vorgnge) erforderliche Informationen darstellen. Im zweiten Durchgang (Scananzahl 2) verwendet der Abfrageoptimierer den Index fr die corp_no-Spalte der member-Tabelle und deckt die Abfrage automatisch ab. Fr den Abfrageoptimierer sind nur drei E/A-Vorgnge zum Suchen in jedem Index erforderlich. Fr das Suchen in zwei Indizes ergeben sich insgesamt sechs E/A-Vorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

15

bung 2 Auswerten von Abfragen mit allen Indizes


In dieser bung werden Sie Abfragen mit dem AND-Operator fr die memberTabelle durchfhren und die statistischen Informationen aufzeichnen. Die in dieser bung verwendete Abfrage gleicht der in bung 1 verwendeten Abfrage. Es wurde jedoch eine Suchbedingung von member_no > 6500 zu member_no > 8000 gendert. Es sind die gleichen nicht gruppierten Indizes fr die member-Tabelle vorhanden, die fr die firstname-, corp_no- und member_no-Spalten definiert wurden. Sie werden auerdem die Indizierungsstrategie ndern, um zu zeigen, wie verschiedene Indizes die E/A-Vorgnge bei einer Abfrage reduzieren knnen. Sie knnen Abschnitte der Skriptdatei EvalQueryIndex.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder Ihre eigenen Transact-SQL-Anweisungen eingeben und ausfhren. So fhren Sie eine Abfrage aus, die alle Indizes verwendet In diesem Verfahren werden Sie fr die Statistikoption ON festlegen, eine Abfrage ausfhren, die statistischen Informationen aufzeichnen und die Ergebnisse des Ausfhrungsplanes beobachten. 1. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um Daten zu Mitgliedern abzurufen, deren Vorname mit dem Buchstaben Q beginnt, deren Personalnummer grer als 450 ist und deren Mitgliedsnummer grer als 8.000 ist.
USE credit SET STATISTICS IO ON SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 8000

Anmerkung Diese Abfrage wird im Verlauf dieser bung als ursprngliche Abfrage bezeichnet. 2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1 3 13 3 (fname, corp_no und mem_no)

3. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen.

16

Unterrichtseinheit 14: Analysieren von Abfragen

4. Untersuchen Sie den Ausfhrungsplan. Er hnelt der folgenden Abbildung. Beachten Sie die im Ausfhrungsplan verwendeten Vorgnge. In dieser bung werden Sie den Ausfhrungsplan analysieren, um die verwendete Anzahl der E/A-Vorgnge und die Grnde fr die Auswahl dieses Ausfhrungsplanes zu erklren.
member.fname Kosten: 78% member.corp_no Kosten: 67% member.mem_no Kosten: 11%

Hash Match Team Kosten: 0%

Hash Match Root Kosten: 44%

Bookmark Lookup Kosten: 11%

Select Kosten: 0%

Verwendet der Abfrageoptimierer den Index fr die member_no-Spalte? Begrndung? Ja. Die Suchbedingung member_no > 8000 ist sehr selektiv. ____________________________________________________________ ____________________________________________________________ 5. Vergleichen Sie die ursprngliche Abfrage dieser bung mit der ursprnglichen Abfrage aus bung 1. Ursprngliche Abfrage
USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 8000 USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 6000

Ursprngliche Abfrage (bung1)

Warum verwendet die ursprngliche Abfrage dieser bung den Index, der fr die member_no-Spalte definiert wurde, und die ursprngliche Abfrage aus bung 1 nicht? Die Suchbedingung member_no > 6000 weist eine geringe Selektivitt auf. Die Abfrage gibt 4.000 von 10.000 Zeilen zurck. Die Suchbedingung member_no > 8000 weist eine hohe Selektivitt auf und gibt 2000 von 10.000 Zeilen zurck. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

17

So erklren Sie die zum Verarbeiten der ursprnglichen Abfrage verwendeten E/A-Vorgnge In diesem Verfahren werden Sie die ursprngliche Abfrage als drei SELECTAnweisungen neu schreiben. Jede Anweisung stellt eine Suchbedingung der WHERE-Klausel dar, die die Suche beschrnkt. Sie werden fr jede Anweisung statistische Informationen aufzeichnen. Dann werden Sie diese Informationen verwenden, um zu erlutern, warum der Abfrageoptimierer einen bestimmten Ausfhrungsplan auswhlt, und um die Anzahl der E/A-Vorgnge zu erklren. 1. Geben Sie die SELECT-Anweisung ein, mit der nur die erste Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie die Anweisung aus.
USE credit SELECT firstname FROM member WHERE firstname LIKE 'Q%'

2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 411 1 3 1 (fname) Ja

3. Geben Sie die SELECT-Anweisung ein, mit der nur die zweite Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie die Anweisung aus.
USE credit SELECT corp_no FROM member WHERE corp_no > 450

4. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 303 1 3 1 (corp_no) Ja

5. Geben Sie die SELECT-Anweisung ein, mit der nur die dritte Suchbedingung der WHERE-Klausel in die ursprngliche Abfrage eingeschlossen wird, und fhren Sie die Anweisung aus.
USE credit SELECT member_no FROM member WHERE member_no > 8000

18

Unterrichtseinheit 14: Analysieren von Abfragen

6. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 2000 1 6 1 (mem_no) Ja

7. Vergleichen Sie die statistischen Informationen der ursprnglichen Abfrage mit dem Breakdown jeder Suchbedingung der Abfrage. Ursprngliche Abfrage
USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 8000

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis der ursprnglichen Abfrage 1 3 13 3 (fname, corp_no und mem_no)

Ergebnis der Abfrage mit der ersten Suchbedingung 411 1 3 1 (fname)

Ergebnis der Abfrage mit der zweiten Suchbedingung 303 1 3 1 (corp_no)

Ergebnis der Abfrage mit der dritten Suchbedingung 2000 1 3 1 (mem_no)

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. 8. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 9. Untersuchen Sie den Ausfhrungsplan fr die ursprngliche Abfrage. Wie erklren Sie die dreizehn E/A-Vorgnge in der ursprnglichen Abfrage? Der Abfrageoptimierer verwendet drei Indizes. Fr jeden Index sind drei E/A-Vorgnge erforderlich. Drei E/A-Vorgnge multipliziert mit drei E/A-Vorgngen ergibt neun E/A-Vorgnge. Die verbleibenden E/A-Vorgnge werden fr Bookmark Lookup, Hash Match Root/Inner Join und Hash Match Team/Inner Join verwendet. Dies ergibt insgesamt dreizehn E/A-Vorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

19

So fhren Sie eine Abfrage fr eine Tabelle mit einem gruppierten Index aus In diesem Verfahren werden Sie den nicht gruppierten Index fr die member.member_no-Spalte lschen und einen gruppierten Index fr die member.member_no-Spalte erstellen. Nach dem Erstellen des Indexes werden Sie die ursprngliche Abfrage ausfhren und die nderungen im Ausfhrungsplan und der Seiten-E/A beobachten. 1. Geben Sie die Anweisung ein, und fhren Sie sie aus, um den nicht gruppierten Index fr die member.member_no-Spalte zu lschen und einen gruppierten Index zu erstellen.
USE credit DROP INDEX member.mem_no GO CREATE CLUSTERED INDEX mem_no_CL ON member(member_no) GO

Anmerkung Es sind zwei nicht gruppierte Indizes vorhanden: Einer wurde fr die corp_no-Spalte definiert, und der andere wurde fr die firstnameSpalte definiert. 2. Geben Sie die ursprngliche Abfrage fr die member-Tabelle mit einem gruppierten Index fr die member_no-Spalte ein, und fhren Sie die Abfrage aus.
USE credit SELECT * FROM member WHERE firstname LIKE 'Q%' AND corp_no > 450 AND member_no > 8000

3. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 1 1 31 1 (mem_no) Nein

20

Unterrichtseinheit 14: Analysieren von Abfragen

4. Vergleichen Sie die statistischen Informationen der Abfrage fr eine Tabelle mit einem gruppierten Index fr die member_no-Spalte mit der Abfrage fr eine Tabelle mit einem nicht gruppierten Index fr die member_no-Spalte.
Ergebnis der Abfrage (gruppierter Index fr member_no) 1 1 31 1 (mem_no) Ergebnis der Abfrage (nicht gruppierter Index fr member_no) 1 3 13 3 (fname, corp_no und mem_no)

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. 5. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 6. Untersuchen Sie den Ausfhrungsplan. Hat sich die Abfrageleistung durch einen gruppierten Index fr member_no-Spalte verbessert? Begrndung? Ja. Fr die Abfrage mit dem gruppierten Index fr die member_noSpalte sind 31 E/A-Vorgnge, ein Scan und weniger Schritte im Ausfhrungsplan erforderlich. ____________________________________________________________ ____________________________________________________________ Warum verwendet der Abfrageoptimierer den gruppierten Index fr die member_no-Spalte? Der Abfrageoptimierer whlt normalerweise einen gruppierten Index aus, wenn die Abfrage nicht durch einen Index abgedeckt ist. Der Abfrageoptimierer verwendet einen gruppierten Index, da die Zeilen sortiert sind und es beim Verarbeiten von Abfragen, die Datenbereiche angeben, effizienter ist. Mit Hilfe des gruppierten Indexes fr member_no liest SQL Server alle 2000 Zeilen. Dafr sind neun E/AVorgnge erforderlich. Zeilen, die die Suchbedingungen nicht erfllen, werden beim Lesen des Mitgliedsnummernbereichs entfernt. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

21

bung 3 Auswerten von Abfragen mit dem IN-Schlsselwort


In dieser bung werden Sie einen Index fr die member-Tabelle erstellen, die Leistung von Abfragen mit dem IN-Schlsselwort beobachten und beobachten, wie sich der Ausfhrungsplan mit der Vergrerung der Werteliste ndert. Je lnger die Liste, desto weniger effizient ist die Abfrage. Sie knnen Abschnitte der Skriptdatei EvalQueryIN.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So fhren Sie eine Abfrage aus, die ein IN-Schlsselwort enthlt In diesem Verfahren werden Sie vorhandene Indizes fr die member-Tabelle lschen, einen Index erstellen, eine Abfrage ausfhren, statistische Informationen aufzeichnen und den Ausfhrungsplan untersuchen. 1. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle zu lschen:
USE credit EXEC index_cleanup member

2. Geben Sie diese Anweisung ein und fhren Sie sie aus, um einen eindeutigen, nicht gruppierten Index fr die member_no-Spalte der memberTabelle zu erstellen:
USE credit CREATE UNIQUE nonclustered INDEX mbr_mem_no ON member(member_no) GO

3. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um fr die Statistikoption ON festzulegen:
SET STATISTICS IO ON

4. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um alle Daten fr bestimmte Mitgliedsnummern abzurufen:
USE credit SELECT * FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,200,201, 202,203,204,205,206,207,208,209,210,211,212,213, 214,215,216,217,218,219,220,221,222,223,224,225, 226,227,228,229,230,231,232)

5. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 43 43 129 1 (mbr_mem_no) Ja

22

Unterrichtseinheit 14: Analysieren von Abfragen

6. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 7. Untersuchen Sie den Ausfhrungsplan. Er hnelt der folgenden Abbildung. Beachten Sie die im Ausfhrungsplan verwendeten Vorgnge. In dieser bung werden Sie den Ausfhrungsplan analysieren, um die verwendete Anzahl der E/A-Vorgnge und die Grnde fr die Auswahl dieses Ausfhrungsplanes zu erklren.
member.mbr_mem... Kosten: 0% Bookmark Lookup Kosten: 91% SELECT Kosten: 9%

Durch Bookmark Lookup lassen sich 43 der 129 E/A-Vorgnge erklren. Wie erklren Sie die brigen 86 E/A-Vorgnge? Tipp STATISTICS I/O zeigt eine Scananzahl von 43. Die brigen 86 E/A-Vorgnge ergeben sich aus dem Lesen (Scananzahl) der Tabelle. Dies wird fr jeden Wert in der Werteliste fr die Abfrage einmal vorgenommen. Die Werteliste fr die Abfrage enthlt 43 Werte. Der Abfrageoptimierer verwendet den nicht gruppierten Index, um nach jedem Wert zu suchen. Um den notwendigen Wert zu erhalten, liest der Abfrageoptimierer die Stammseite. Dann liest der Abfrageoptimierer eine Seite auf Blattebene, um die Zeilen-ID (Row Identifier, RID) zu erhalten (deckt den Index ab). Fr jede der 43 Zeilen sind zwei E/A-Vorgnge erforderlich. Dies ergibt 86 E/A-Vorgnge. Durch das Verwenden einer RID zum Abrufen von Daten, ist genau ein E/AVorgang pro Zeile erforderlich. Fr zwlf Zeilen ergeben sich 43 E/AVorgnge. 43 + 86 = 129 E/A-Vorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Wenn die Abfrage so gendert werden wrde, dass sie einen Index verwendet, der die Abfrage abdeckt, welcher Schritt des Ausfhrungsplanes wrde dann wegfallen? Begrndung? Der Schritt Bookmark Lookup wrde wegfallen, da die Abfrage nur den ersten Schritt des Ausfhrungsplanes verarbeiten msste und nur die Daten der member_no-Spalte auswhlen msste. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

23

Wie wrde die gesamte Seiten-E/A fr diese Abfrage lauten, die von einem Index abgedeckt wird? 43 Seiten-E/A. Durch das Wegfallen des Schrittes Bookmark Lookup fallen 43 E/A-Vorgnge weg. 129 - 43 = 86 E/A. ____________________________________________________________ ____________________________________________________________ So zeigen Sie, wann eine Abfrage mit einer Werteliste ineffizient wird. In diesem Verfahren werden Sie eine Abfrage ausfhren, die statistischen Informationen aufzeichnen und den Ausfhrungsplan mit dem der vorherigen Abfrage vergleichen. Die Abfrage in diesem Verfahren hnelt der vorherigen Abfrage, jedoch schliet die IN-Liste einen zustzlichen Wert ein. Durch den zustzlichen Wert in der Abfrage verarbeitet der Abfrageoptimierer die Abfrage anders. 1. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um bestimmte Mitgliedsnummern abzurufen. Beachten Sie, dass diese Abfrage von der ursprnglichen Abfrage abweicht. Die IN-Liste enthlt jetzt 44 Werte.
USE credit SELECT * FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,200,201,202, 203,204,205,206,207,208,209,210,211,212,213,214,215, 216,217,218,219,220,221,222,223,224,225,226,227,228, 229,230,231,232,233)

2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Wird die Abfrage von einem Index abgedeckt? Ergebnis 44 1 147 Keine Nein

3. Vergleichen Sie die statistischen Informationen fr diese Abfrage mit den statistischen Informationen der vorherigen Abfrage. Vorherige Abfrage
USE credit SELECT * FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,200,201, 202,203,204,205,206,207,208,209,210,211,212,213, 214,215,216,217,218,219,220,221,222,223,224,225, 226,227,228,229,230,231,232)

24

Unterrichtseinheit 14: Analysieren von Abfragen


USE credit SELECT * FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,200,201,202, 203,204,205,206,207,208,209,210,211,212,213,214,215, 216,217,218,219,220,221,222,223,224,225,226,227,228, 229,230,231,232,233)

Abfrage mit zustzlichem Wert

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis der vorherigen Abfrage 43 43 129 Ja (mem_no)

Ergebnis der Abfrage mit zustzlichem Wert 44 1 147 Keine

4. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 5. Untersuchen Sie den Ausfhrungsplan. Warum hat der Abfrageoptimierer fr die Abfrage mit dem zustzlichen Wert (233) in der Werteliste einen anderen Ausfhrungsplan verwendet? Mit dem Vergrern der Werteliste verarbeitet der Abfrageoptimierer die Abfrage anders. Ein neuer Ausfhrungsplan wird verwendet, um mehr Werte effizienter zu verarbeiten ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Beschreiben Sie den Ausfhrungsplan fr die Abfrage mit dem zustzlichen Wert (233). Der Ausfhrungsplan erstellt zuerst eine interne Tabelle, um die Liste der Werte zu speichern, die sortiert sind (Constant Scan). Die interne Tabelle wird dann mit Hilfe einer Hashverknpfung mit der Liste der Schlsselwerte verknpft, die mit Hilfe eines Tabellenscans abgerufen wurden. Fr diesen Ausfhrungsplan sind mehr E/A-Vorgnge erforderlich, um die Verknpfung zwischen der internen Tabelle und der member-Tabelle zu verarbeiten. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

25

bung 4 Auswerten von Abfragen mit geschachtelten SELECT-Anweisungen


In dieser bung werden Sie die Leistung von Abfragen mit geschachtelten SELECT-Anweisungen beobachten. Sie werden den Ausfhrungsplan einer Abfrage untersuchen, die eine Werteliste zurckgibt, die Anzahl der E/A-Vorgnge erklren und erlutern, warum der Abfrageoptimierer den speziellen Ausfhrungsplan ausgewhlt hat. Sie knnen Abschnitte der Skriptdatei EvalQueryNested.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So fhren Sie eine Abfrage mit einer geschachtelten SELECTAnweisung aus In diesem Verfahren werden Sie eine Abfrage mit einer geschachtelten SELECT-Anweisung ausfhren, die eine Werteliste zurckgibt, und die statistischen Informationen aufzeichnen. 1. Geben Sie diese SELECT-Anweisung ein und fhren Sie sie aus, um Mitgliedsdaten zu Mitgliedern abzurufen, deren Mitgliedsnummern zwischen 100 und 111 liegen:
USE credit SELECT * FROM member WHERE member_no IN (SELECT member_no FROM member WHERE member_no BETWEEN 100 AND 111)

Anmerkung Diese Abfrage wird im Verlauf dieser bung als ursprngliche Abfrage bezeichnet. 2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 12 13 44 1 (mbr_mem_no)

26

Unterrichtseinheit 14: Analysieren von Abfragen

So erklren Sie die zum Verarbeiten der ursprnglichen Abfrage verwendeten E/A-Vorgnge In diesem Verfahren werden Sie die ursprngliche Abfrage als zwei SELECTAnweisungen neu schreiben. Jede Anweisung steht fr einen Schritt im Ausfhrungsplan. Zu jeder Anweisung werden Sie statistische Informationen aufzeichnen, um zu erlutern, warum der Abfrageoptimierer einen bestimmten Ausfhrungsplan ausgewhlt hat, und dann werden Sie die Anzahl der E/AVorgnge erklren. 1. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um Mitgliedsnummern zwischen 100 und 111 abzurufen:
USE credit SELECT member_no FROM member WHERE member_no BETWEEN 100 AND 111

Anmerkung In der ursprnglichen Abfrage ist die SELECT-Anweisung der erste Schritt des Ausfhrungsplanes. 2. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Ergebnis 12 1 2

Wurde ein Index zum Verarbeiten dieser Abfrage verwendet? Wird diese Abfrage von einem Index abgedeckt? Begrndung? Ja (member_no). Ja, diese Abfrage wird von einem Index abgedeckt, da die gesamten Daten im Index vorhanden sind. ____________________________________________________________ ____________________________________________________________ 3. Geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um bestimmte Mitgliedsnummern abzurufen.
USE credit SELECT member_no FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,110,111)

Anmerkung In der ursprnglichen Abfrage ist die SELECT-Anweisung der zweite Schritt des Ausfhrungsplanes.

Unterrichtseinheit 14: Analysieren von Abfragen

27

4. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Ergebnis 12 12 24

Wurde ein Index zum Verarbeiten dieser Abfrage verwendet? Wird diese Abfrage von einem Index abgedeckt? Ja (member_no). Ja, diese Abfrage wird von einem Index abgedeckt, da die gesamten Daten im Index vorhanden sind. ____________________________________________________________ ____________________________________________________________ 5. Vergleichen Sie die statistischen Informationen der ursprnglichen Abfrage mit dem Breakdown von jedem Schritt des Ausfhrungsplanes. Ursprngliche Abfrage
USE credit SELECT * FROM member WHERE member_no IN (SELECT member_no FROM member WHERE member_no BETWEEN 100 AND 111) USE credit SELECT member_no FROM member WHERE member_no BETWEEN 100 AND 111 USE credit SELECT member_no FROM member WHERE member_no IN (100,101,102,103,104,105,106,107,108,109,110,111)

Abfrage zum ersten Schritt Abfrage zum zweiten Schritt

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge

Ergebnis der ursprnglichen Abfrage 12 13 44

Ergebnis der Abfrage (erster Schritt des Ausfhrungsplanes) 12 1 2

Ergebnis der Abfrage (zweiter Schritt des Ausfhrungsplanes) 12 12 24

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. 6. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen.

28

Unterrichtseinheit 14: Analysieren von Abfragen

7. Fhren Sie die ursprngliche Abfrage aus, und untersuchen Sie den Ausfhrungsplan. Erlutern Sie, warum der Abfrageoptimierer in der ersten Abfrage diesen Plan erstellt hat, und geben Sie an, wie viele E/A-Vorgnge fr jeden Schritt im Ausfhrungsplan verwendet wurden. Der Abfrageoptimierer verarbeitet zuerst die geschachtelte SELECTAnweisung, indem der Wertebereich auf Blattebene des nicht gruppierten Indexes gelesen wird (ein Index deckt diese Abfrage ab). Dazu sind nur zwei E/A-Vorgnge erforderlich, und es werden zwlf Werte zurckgegeben (nicht die Zeile). Dadurch wird ein Scan generiert. Dann werden alle zwlf Werte gleichzeitig verarbeitet. Fr jeden Wert sind zwei E/A-Vorgnge erforderlich, ein Vorgang zum Lesen der Stammseite und der andere zum Lesen der Seite auf Blattebene. Dies ergibt insgesamt 24 E/A-Vorgnge. In diesem Schritt wird ein Index verwendet, der die Abfrage abdeckt. Dadurch werden zwlf Scans generiert. Dies ergibt insgesamt 13 Scans (1 + 12 = 13). Die Verknpfungsoperation verknpft diese Ergebnisse und erzeugt so zwlf Zeilen Im letzten Schritt wird ein Bookmark Lookup ausgefhrt, bei dem fr jeden der zwlf Werte ein E/A-Vorgang erforderlich ist. Insgesamt werden in diesem Ausfhrungsplan 2 +24 + 12 = 38 E/A-Vorgnge verwendet. Durch die sechs E/A-Vorgnge der Verknpfungsoperation ergeben sich insgesamt 44 E/A-Vorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

29

bung 5 Auswerten von Abfragen mit dem OR-Operator


In dieser bung werden Sie mehrere Abfragen mit dem OR-Operator fr die member-Tabelle ausfhren, fr die ein nicht gruppierter Index fr die member_no-Spalte vorhanden ist Sie werden die statistischen Informationen aufzeichnen, E/A-Vorgnge vergleichen und den Ausfhrungsplan untersuchen. Sie werden vorhandene Indizes lschen, zwei Indizes erstellen, eine Abfrage erneut ausfhren und den Ausfhrungsplan vergleichen, der fr die gleiche Abfrage fr eine Tabelle mit Teilindizierung verwendet wurde. Sie knnen Abschnitte der Skriptdatei EvalQueryOR.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So fhren Sie eine Abfrage fr eine Tabelle mit Teilindizierung aus In diesem Verfahren werden Sie drei Abfragen ausfhren und deren statistische Informationen aufzeichnen und auswerten. 1. Lschen Sie alle Indizes fr die member-Tabelle in der credit-Datenbank.
USE credit EXEC index_cleanup member

2. Erstellen Sie einen eindeutigen nicht gruppierten Index fr die member_noSpalte der member-Tabelle.
CREATE UNIQUE nonclustered INDEX mbr_mem_no ON member(member_no)

3. Legen Sie fr STATISTICS IO die Option ON fest.


SET STATISTICS IO ON

4. Geben Sie diese SELECT-Anweisung ein und fhren Sie sie aus, um ein Mitglied abzurufen, dessen Mitgliedsnummer gleich 1234 oder dessen Regionsnummer gleich 5 ist. Abfrage 1
USE credit SELECT * FROM member WHERE member_no=1234 OR region_no=5

Anmerkung Fr die member_no-Spalte der member-Tabelle ist ein eindeutiger nicht gruppierter Index vorhanden. 5. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1.166 1 147 Keine (Tabellenscan)

30

Unterrichtseinheit 14: Analysieren von Abfragen

6. Geben Sie diese SELECT-Anweisung ein und fhren Sie sie aus, um ein Mitglied abzurufen, dessen Mitgliedsnummer gleich 1234 oder dessen Unternehmensnummer gleich 410 ist. Abfrage 2
USE credit SELECT * FROM member WHERE member_no=1234 OR corp_no=410

7. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 10 1 147 Keine (Tabellenscan)

8. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 9. Untersuchen Sie den Ausfhrungsplan. Er hnelt der folgenden Abbildung.
Table Scan Kosten: 99% SELECT Kosten: 1%

Beachten Sie die im Ausfhrungsplan verwendeten Vorgnge. Sie werden diesen Ausfhrungsplan verwenden, um ihn mit einem anderen Ausfhrungsplan spter in dieser bung zu vergleichen. 10. Geben Sie diese SELECT-Anweisung ein und fhren Sie sie aus, um ein Mitglied abzurufen, dessen Regionsnummer gleich 5 oder dessen Unternehmensnummer gleich 410 ist. Abfrage 3
USE credit SELECT * FROM member WHERE region_no = 5 OR corp_no = 410

11. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1173 1 145 Keine (Tabellenscan)

Unterrichtseinheit 14: Analysieren von Abfragen

31

12. Vergleichen Sie die statistischen Informationen der drei Abfragen. Abfrage 1 Abfrage 2 Abfrage 3
USE credit SELECT * FROM member WHERE member_no=1234 OR region_no=5 USE credit SELECT * FROM member WHERE member_no=1234 OR corp_no=410 USE credit SELECT * FROM member WHERE region_no=5 OR corp_no=410

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis von Abfrage 1 1.166 1 147 Keine (Tabellenscan)

Ergebnis von Abfrage 2 10 1 147 Keine (Tabellenscan)

Ergebnis von Abfrage 3 1.173 1 147 Keine (Tabellenscan)

Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. Weisen diese drei Ausfhrungsplne Unterschiede auf? Begrndung? Nein, die drei Ausfhrungsplne weisen keine Unterschiede auf, da fr alle ein Tabellenscan erforderlich ist. Mindestens eine der Spalten, auf die der OR-Operator verweist, hat keinen Index. Wenn eine Spalte keinen Index hat, fhrt der Abfrageoptimierer einen Tabellenscan durch. Aufgrund der Funktionsweise der Logik des OR-Operators werden alle Spalten, die auf einen OR-Operator verweisen, getrennt verarbeitet. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

32

Unterrichtseinheit 14: Analysieren von Abfragen

So lschen Sie vorhandene Indizes und erstellen Indizes In diesem Verfahren werden Sie alle vorhandenen Indizes lschen und zwei Indizes fr die member-Tabelle erstellen. 1. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um fr die Statistikoption OFF festzulegen:
SET STATISTICS IO OFF

2. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle zu lschen:
USE credit EXEC index_cleanup member

3. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um zwei Indizes fr die member-Tabelle zu erstellen:
USE credit CREATE UNIQUE nonclustered INDEX mbr_mem_no ON member(member_no) CREATE clustered INDEX mbr_corp_no_CL ON member(corp_no)

So fhren Sie eine Abfrage fr eine Tabelle mit vollstndiger Indizierung aus In diesem Verfahren werden Sie fr die Statistikoption ON festlegen, Abfrage 2 dieser bung erneut ausfhren und die statistischen Informationen aufzeichnen und auswerten. 1. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um fr die Statistikoption ON festzulegen:
SET STATISTICS IO ON

2. Fhren Sie Abfrage 2 erneut aus, wodurch Mitgliedsnummer 1234 oder Unternehmensnummer 410 abgerufen wird. Abfrage 2
USE credit SELECT * FROM member WHERE member_no=1234 OR corp_no=410

3. Zeichnen Sie die statistischen Informationen in der folgenden Tabelle auf.


Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 10 2 24 2 (mbr_mem_no und mbr_corp_no_CL)

Unterrichtseinheit 14: Analysieren von Abfragen

33

4. Vergleichen Sie die statistischen Informationen von Abfrage 2 fr eine Tabelle mit Teilindizierung mit den statistischen Informationen von Abfrage 2 fr eine Tabelle mit vollstndiger Indizierung. Abfrage 2
USE credit SELECT * FROM member WHERE member_no=1234 OR corp_no=410

Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage

Ergebnis von Abfrage 2 (Teilindizierung) 10 1 147 Keine (Tabellenscan)

Ergebnis von Abfrage 2 (vollstndige Indizierung) 10 2 24 Ja (mbr_mem_no und mbr_corp_no_CL)

5. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 6. Untersuchen Sie den Ausfhrungsplan, und vergleichen Sie ihn mit dem Ausfhrungsplan fr die gleiche Abfrage, die fr eine Tabelle mit Teilindizierung ausgefhrt wurde. Warum unterscheidet sich der Ausfhrungsplan fr eine Tabelle mit vollstndiger Indizierung vom Ausfhrungsplan, der fr die gleiche Abfrage fr eine Tabelle mit Teilindizierung verwendet wurde? Der Ausfhrungsplan fr eine Tabelle mit vollstndiger Indizierung ist anders, da fr jede Spalte, auf die der OR-Operator verweist, ein ntzlicher Index vorhanden ist. Der Abfrageoptimierer verwendet einen Index zur Suche in der corp_no-Spalte und einen anderen Index zur Suche in der member_no-Spalte. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

34

Unterrichtseinheit 14: Analysieren von Abfragen

Wie lautet der Ausfhrungsplan, und wie viele E/A-Vorgnge werden verwendet? Fr Schritt 1a sind zwei E/A-Vorgnge erforderlich, um eine Zeile der member_no-Spalte abzurufen, die einen nicht gruppierten Index aufweist, der die Abfrage abdeckt. Dieser Vorgang trgt nicht zum Wert der Scananzahl bei, da er den Index abdeckt. Dieser Vorgang greift nicht auf die Tabelle zu. Fr Schritt 2b sind zwei E/A-Vorgnge erforderlich, um zehn Zeilen der corp_no-Spalte abzurufen, die einen gruppierten Index aufweist. Durch diesen Vorgang kann ein Scan erklrt werden. In Schritt 2 und 3 werden die Ergebnisse verkettet und sortiert. Fr diese Vorgnge sind zehn E/A-Vorgnge erforderlich. Schritt 3 ist eine Bookmark Lookup-Operation. Der Abfrageoptimierer liest die zehn Zeilen einzeln mit Hilfe der RID oder des Gruppierungsschlssels. Ein E/A-Vorgang fr jede Zeile entspricht zehn E/AVorgngen und erklrt den zweiten Scan. E/A-Vorgnge insgesamt: 2 + 2 + 10 + 10 = 24 E/A-Vorgnge. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

35

Abfragen mit Verknpfungsoperationen


Stellen Sie die Themen dieses Abschnitts vor.

Thema

Selektivitt und Dichte einer JOIN-Klausel Verarbeiten von Verknpfungen Verarbeiten von Nested Loop-Verknpfungen Multimediaprsentation: Wie Mergeverknpfungen verarbeitet werden berlegungen zum Verwenden von Mergeverknpfungen Verarbeiten von Hashverknpfungen

Einstieg

In diesem Abschnitt werden Abfrageoptimierungen erlutert, in denen Verknpfungsoperationen verwendet werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird erlutert wie der Abfrageoptimierer Abfragen optimiert, in denen Verknpfungsoperationen verwendet werden.

36

Unterrichtseinheit 14: Analysieren von Abfragen

Selektivitt und Dichte einer JOIN-Klausel


Erlutern Sie die Selektivitt und die Dichte einer JOINKlausel.

Thema

Selektivitt einer JOIN-Klausel


Prozentsatz der zurckgegebenen Zeilen

Einstieg

Basiert auf Indexdichte, falls Statistiken verfgbar sind Basiert auf verschiedenen Erwgungen, falls Statistiken nicht verfgbar sind Dichte einer JOIN-Klausel Ein Index mit einer groen Zahl von doppelten Werten weist eine hohe Verknpfungsdichte auf Ein eindeutiger Index weist eine niedrige Verknpfungsdichte auf

Die Reihenfolge, in der der Abfrageoptimierer die Verknpfungen verarbeitet, wird neben der Selektivitt und der Dichte der Daten auch durch das Vorhandensein von Indizes und einer WHERE-Klausel bestimmt.

Selektivitt

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Reihenfolge, in der der Abfrageoptimierer die Verknpfungen verarbeitet, wird neben der Selektivitt und der Dichte der Daten auch durch das Vorhandensein von Indizes und einer WHERE-Klausel bestimmt. Methodischer Hinweis

Verwenden Sie die Abbildung auf der Folie, um erneut darauf hinzuweisen, dass durch geringe Selektivitt viele Zeilen und durch hohe Selektivitt wenige Zeilen zurckgegeben werden.

Selektivitt einer JOIN-Klausel


Die Selektivitt einer JOIN-Klausel ist der Prozentsatz der Zeilen einer Tabelle, die zu einer einzigen Zeile verknpft werden. Selektivitt wird von der Anzahl von Zeilen abgeleitet, die wahrscheinlich zurckgegeben werden, wie bei der WHERE-Klausel. Bei einer geringen Selektivitt werden viele Zeilen zurckgegeben, bei einer hohen Selektivitt werden wenige Zeilen zurckgegeben. Die Basis ist ein Vielfaches der Zeilen in beiden Tabellen, nachdem lokale Prdikate (WHEREKlausel) auf verknpfte Tabellen und Aggregationen angewandt wurden. Dieser Algorithmus unterscheidet sich vom Ermitteln der Anzahl von Zeilen, die mit einer Suchbedingung bereinstimmen.

Ermitteln der Selektivitt einer JOIN-Klausel


Sie knnen die Selektivitt einer JOIN-Klausel mit Hilfe der Dichte der Daten berechnen. Der Abfrageoptimierer ermittelt basierend auf den folgenden Parametern die Selektivitt einer JOIN-Klausel. Falls Statistiken verfgbar sind, basiert die Verknpfungsselektivitt auf der Dichte des Indexes fr alle Spalten. Methodischer Hinweis
Weisen Sie auf die Punkte hin, die der Abfrageoptimierer abschtzt, um die Selektivitt einer JOIN-Klausel zu ermitteln, falls keine Statistiken verfgbar sind.

Falls keine Statistiken verfgbar sind, da keine Indizes vorhanden sind, vorhandene Indizes nicht ntzlich sind, oder falls keine WHERE-Klausel in die Abfrage eingeschlossen ist, verarbeitet der Abfrageoptimierer die Abfrage auf folgende Weise effizienter: Anwenden einer geeigneten Verknpfungsstrategie. Verwenden anderer physischer Operatoren.

Unterrichtseinheit 14: Analysieren von Abfragen

37

Dynamisches Erstellen von Spaltenstatistiken. Die Anzahl von Zeilen in jeder Tabelle der Verknpfung.

Dichte einer JOIN-Klausel


Die Dichte einer JOIN-Klausel ist der durchschnittliche Prozentsatz der doppelten Werte zwischen den inneren und ueren Tabellen. Der Abfrageoptimierer verwendet die Dichte einer JOIN-Klausel, um zu ermitteln, welche Tabelle als innere und welche Tabelle als uere Tabelle verarbeitet wird. Ein Index mit einer groen Anzahl von doppelten Werten weist eine hohe Dichte auf. Dies ist fr Verknpfungen keine hohe Selektivitt. Beispielsweise enthlt die orders_details-Tabelle viele Bestellungen fr einen Kunden. Ein eindeutiger Index weist eine geringe Verknpfungsdichte auf. Dies ist sehr selektiv. Beispielsweise ist in der customer-Tabelle jeder Kunde nur einmal aufgelistet. Die customer ID-Spalte ist eindeutig. Falls ein Index eine geringe Verknpfungsdichte aufweist, kann der Abfrageoptimierer auf die Daten mit Hilfe eines gruppierten oder nicht gruppierten Indexes zugreifen. Ein gruppierter Index ist jedoch normalerweise ntzlich fr Indizes mit einer hohen Verknpfungsdichte. Beispiel Verwenden Sie in diesem Beispiel die folgenden Annahmen, um zu ermitteln, wie der Abfrageoptimierer einen Ausfhrungsplan erzeugt. Die employee-Tabelle enthlt 1.000 Zeilen. Die department-Tabelle enthlt 100 Zeilen (eindeutige Abteilungen). Die Daten sind gleichmig verteilt (10 Angestellte pro Abteilung). Es sind keine Indizes oder Statistiken vorhanden.
USE credit SELECT * FROM department AS dept INNER JOIN employee AS empl ON dept.deptno = empl.deptno

Wenn fr verknpfte Spalten kein Index vorhanden ist, verwendet der Abfrageoptimierer eine Verknpfungsstrategie, mit der ermittelt wird, welche Tabelle die uere und welche Tabelle die innere Tabelle ist. Dazu wird das Zeilenverhltnis zwischen Tabellen ausgewertet. Falls in der WHERE-Klausel Suchbedingungen vorhanden sind, kann der Abfrageoptimierer diese Bedingungen zuerst verwenden, um zu ermitteln, wie die Tabellen verknpft werden. Dies basiert auf der Selektivitt.

38

Unterrichtseinheit 14: Analysieren von Abfragen

Verarbeiten von Verknpfungen


Stellen Sie dar, wie der Abfrageoptimierer eine Verknpfung verarbeitet.

Thema

USE credit USE credit SELECT m.member_no, c.charge_no, c.charge_amt, c.statement_no SELECT m.member_no, c.charge_no, c.charge_amt, c.statement_no FROM member AS m INNER JOIN charge AS c FROM member AS m INNER JOIN charge AS c ON m.member_no = c.member_no ON m.member_no = c.member_no WHERE c.member_no = 5678 WHERE c.member_no = 5678

Einstieg

Betrachten wir nun, wie der Abfrageoptimierer eine Verknpfung verarbeitet.

Eindeutiger nicht gruppierter Index member member


member_no member_no

Ergebnis
member_no charge_no member_no charge_no

.. .. .. 5678 5678 .. .. ..

.. .. .. Chen Chen .. .. ..

5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678 5678

(13 row(s) affected

30257 30257 17673 17673 15259 15259 16351 16351 32778 32778 48897 48897 60611 60611 66794 66794 74396 74396 76840 76840 86173 86173 87902 87902 99607 99607

Nicht gruppierter Index charge charge


charge_no member_no charge_no member_no

.. .. .. 15259 15259 .. .. .. 16351 16351 .. .. .. 17673 17673 .. .. ..

.. .. .. 5678 5678 .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. ..

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Wenn Sie wissen, wie der Abfrageoptimierer Verknpfungsvorgnge verarbeitet, knnen Sie ermitteln, welche Indextypen Sie erstellen sollten. Verknpfungen werden paarweise verarbeitet. Es spielt keine Rolle, wie viele Tabellen Sie kombinieren, Verknpfungen bestehen immer zwischen zwei Tabellen. Das Ergebnis dieser Verknpfungen wird Zwischenergebnis genannt. Zwischenergebnisse knnen mit Hilfe eines Verknpfungsalgorithmus mit einer anderen Tabelle verknpft werden. Fr jede Verknpfung ermittelt der Abfrageoptimierer den geeigneten Verknpfungsalgorithmus, der verwendet werden soll. Beim Verarbeiten von Verknpfungsoperationen fhrt der Abfrageoptimierer normalerweise Folgendes durch: Ermitteln der Reihenfolge, in der die Tabellen verarbeitet werden, basierend auf Indizes, Selektivitt und Dichte. Die Reihenfolge wird nicht durch die Reihenfolge der Tabelle bestimmt, auf die in der SELECT-Anweisung verwiesen wird. Identifizieren, welche Tabelle die optimale uere Tabelle ist. Ermitteln aller bereinstimmenden Zeilen der inneren Tabelle zu jeder qualifizierenden Zeile in der ueren Tabelle.

Weisen Sie darauf hin, dass der Abfrageoptimierer die Suchbedingungen in der WHERE-Klausel konvertiert, sodass die member-Tabelle die uere Tabelle ist. Erlutern Sie, dass der Abfrageoptimierer mit Hilfe dieser Konvertierung die Suche beschrnkt. Die Suche wird beschrnkt, da die member-Tabelle nur eine qualifizierende Zeile aufweist, whrend die charge-Tabelle viele Zeilen aufweist.

Auswerten der Verwendung von Indizes


Die Selektivitt und die Dichte einer JOIN-Klausel beeinflussen, welcher Indextyp fr das Verarbeiten der Abfrage am ntzlichsten ist. Ein Index fr die Spalte, die in der WHERE-Klausel angegeben ist, kann beeinflussen, welche Tabelle als uere Tabelle verwendet wird und welche Verknpfungsstrategie verwendet wird. Selektivitt bestimmt, welche Tabelle die innere Tabelle ist. Der Abfrageoptimierer bercksichtigt automatisch die Verwendung redundanter JOIN-Klauseln und Bedingungen in der WHERE-Klausel.

Unterrichtseinheit 14: Analysieren von Abfragen

39

Beispiel

In diesem Beispiel weist die member_no-Spalte in der member-Tabelle einen eindeutigen nicht gruppierten Index auf, und die member_no-Spalte in der charge-Tabelle weist einen nicht gruppierten Index auf. Beide Indizes sind zum Verarbeiten der Abfrage ntzlich.
USE credit SELECT m.member_no, c.charge_no, c.charge_amt, c.statement_no FROM member AS m INNER JOIN charge AS c ON m.member_no = c.member_no WHERE c.member_no = 5678

Der Abfrageoptimierer konvertiert die Suchkriterien in der WHERE-Klausel, sodass die Abfrage wie folgt verarbeitet wird: WHERE m.member_no = 5678 Durch das Konvertieren der member-Tabelle in die uere Tabelle beschrnkt der Abfrageoptimierer die Suche, da die member-Tabelle nur eine qualifizierende Zeile aufweist, die charge-Tabelle aber viele Zeilen.

40

Unterrichtseinheit 14: Analysieren von Abfragen

Verarbeiten von Nested Loop-Verknpfungen


Erlutern Sie, wie geschachtelte Verknpfungen verarbeitet werden.

Thema

Einstieg

USE credit USE credit SELECT m.member_no, c.charge_no, c.charge_amt, s.statement_no SELECT m.member_no, c.charge_no, c.charge_amt, s.statement_no FROM member AS mm INNER JOIN charge AS cc FROM member AS INNER JOIN charge AS ON m.member_no == c.member_no ON m.member_no c.member_no INNER JOIN statement AS ss INNER JOIN statement AS ON c.member_no == s.member_no ON c.member_no s.member_no WHERE m.member_no == 5678 WHERE m.member_no 5678

Falls die Abfrage eine JOINKlausel enthlt, wertet der Abfrageoptimierer die Anzahl von Tabellen, Indizes und Verknpfungen aus, um die optimale Reihenfolge und die zu verwendende Verknpfungsstrategie zu ermitteln.

member member
.. .. .. 5678 5678 .. .. ..

member_no member_no

statement statement
.. .. .. 5678 5678 15678 15678 .. .. ..

.. .. .. Chen Chen .. .. ..

statement_no member_no statement_no member_no

charge charge

.. .. .. 5678 5678 5678 5678 .. .. ..

.. .. .. .. .. .. .. ..

1 Ruft qualifizierende Zeilen aus beiden 1 Tabellen ab und verknpft sie

charge_no charge_no .. .. .. 15259 15259 .. .. .. 16351 16351 .. .. .. 17673 17673 .. .. ..

member_no member_no .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. .. 5678 5678 .. .. ..

2 Verknpft die Ergebnisse mit den 2 qualifizierenden Zeilen der charge-Tabelle

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Falls die Abfrage eine JOIN-Klausel enthlt, wertet der Abfrageoptimierer die Anzahl von Tabellen, Indizes und Verknpfungen aus, um die optimale Reihenfolge und die zu verwendende Verknpfungsstrategie zu ermitteln. Der Abfrageoptimierer verarbeitet Nested Loop-Verknpfungen als geschachtelte Iterationen

Definieren einer geschachtelten Iteration


Eine geschachtelte Iteration liegt vor, wenn der Abfrageoptimierer einen Satz von Nested Loop-Verknpfungen erstellt und das Resultset anwchst, whrend die Zeilen verarbeitet werden. Der Abfrageoptimierer fhrt die folgenden Schritte durch. 1. Finden einer Zeile der ersten Tabelle. 2. Verwenden der Zeile, um die nchste Tabelle zu scannen. 3. Verwenden des Ergebnisses der vorherigen Tabelle, um die nchste Tabelle zu scannen.

Auswerten von Verknpfungskombinationen


Der Abfrageoptimierer wertet automatisch mindestens vier oder mehr mgliche Verknpfungskombinationen aus. Dies gilt auch dann, wenn diese Kombinationen nicht im Verknpfungsprdikat angegeben sind. Sie mssen keine redundanten Klauseln hinzufgen. Der Abfrageoptimierer gleicht die Kosten aus und verwendet Statistiken, um die Anzahl von Verknpfungskombinationen zu ermitteln, die ausgewertet werden. Das Auswerten aller mglichen Verknpfungskombinationen ist ineffizient und aufwendig.

Unterrichtseinheit 14: Analysieren von Abfragen

41

Auswerten der Kosten der Abfrageleistung


Wenn der Abfrageoptimierer eine geschachtelte Verknpfung durchfhrt, sollten Sie bedenken, dass bestimmte Kosten verursacht werden. Nested Loop-Verknpfungen sind Mergeverknpfungen und Hashverknpfungen weit berlegen, wenn kleine Transaktionen ausgefhrt werden, wie beispielsweise solche, von denen nur ein kleiner Satz von Zeilen betroffen ist. Fr den Abfrageoptimierer gilt Folgendes: Verwendet Nested Loop-Verknpfungen, wenn die uere Eingabe sehr klein ist und wenn die innere Eingabe indiziert und sehr gro ist. Verwendet die kleinere Eingabe als uere Tabelle. Erfordert, dass ein ntzlicher Index fr das Verknpfungsprdikat der inneren Tabelle vorhanden ist. Verwendet immer eine Nested Loop-Verknpfungsstrategie, wenn die Verknpfungsoperation nicht den Gleichheitsoperator verwendet. Beispiel In diesem Beispiel wird die member-Tabelle (10.000 Zeilen) mit der chargeTabelle (100.000 Zeilen) verknpft. Die charge-Tabelle ist mit der statementTabelle (20.000 Zeilen) verknpft. Fr die member_no-Spalte in jeder Tabelle sind nicht gruppierte Indizes vorhanden. Der Abfrageoptimierer hat die Verknpfung verarbeitet, als die member-Tabelle mit der statement-Tabelle verknpft wurde, und das Ergebnis dieser Verknpfung wurde mit der chargeTabelle kombiniert.
USE credit SELECT m.member_no, c.charge_no, c.charge_amt, s.statement_no FROM member AS m INNER JOIN charge AS c ON m.member_no = c.member_no INNER JOIN statement AS s ON c.member_no = s.member_no WHERE m.member_no = 5678

Der Abfrageoptimierer fhrt die folgenden Schritte durch, um die Abfrage zu verarbeiten: 1. Abrufen der qualifizierenden Zeilen der member-Tabelle und der statement-Tabelle und anschlieendes Verknpfen des Ergebnisses mit Hilfe der Nested Loop-Verknpfungsstrategie. 2. Abrufen der qualifizierenden Zeilen der charge-Tabelle, und anschlieendes Verknpfen des Ergebnisses mit den Ergebnissen der ersten Nested Loop-Verknpfung mit Hilfe einer anderen Nested Loop-Verknpfungsstrategie.

42

Unterrichtseinheit 14: Analysieren von Abfragen

Multimediaprsentation: Wie Mergeverknpfungen verarbeitet werden


Thema
Erlutern Sie, wie Mergeverknpfungen verarbeitet werden.

Einstieg

In dieser Prsentation sehen Sie, wie Mergeverknpfungen verarbeitet werden.

Methodischer Hinweis
Aktivieren Sie in Microsoft Windows Media Player im Men Ansicht die Option Beschreibung, um die Untertitel der Prsentation anzuzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Die Spalten der Verknpfungsbedingungen werden als Eingaben verwendet, um eine Mergeverknpfung zu verarbeiten. SQL Server fhrt die folgenden Schritte durch, wenn eine Mergeverknpfungsstrategie verwendet wird: 1. Verwenden des ersten Eingabewertes jeder Eingabemenge. 2. Vergleichen der Eingabewerte. 3. Ausfhren eines Mergealgorithmus. Wenn die Eingabewerte gleich sind, werden die Zeilen zurckgegeben. Wenn die Eingabewerte nicht gleich sind, wird der niedrigere Wert verworfen, und der nchste Eingabewert dieser Eingabe wird fr den nchsten Vergleich verwendet. 4. Wiederholen dieses Vorgangs bis alle Zeilen einer dieser Eingabemengen verarbeitet wurden. 5. Auswerten der brigen Suchbedingungen der Abfrage und Zurckgeben der qualifizierenden Zeilen. Anmerkung Es wird nur ein Durchgang pro Eingabe vorgenommen. Die Mergeverknpfungsoperation endet, nachdem alle Eingabewerte einer Eingabe ausgewertet wurden. Die brigen Werte der anderen Eingabe werden nicht verarbeitet.

Unterrichtseinheit 14: Analysieren von Abfragen

43

berlegungen zum Verwenden von Mergeverknpfungen


Weisen Sie auf die Details einer Mergeverknpfungsoperation hin.

Thema

Verknpfte Spalten mssen sortiert sein Auswerten sortierter Werte Verwenden einer vorhandenen Indexstruktur Nutzen der Sortieroperationen Fhrt eigene Sortieroperationen durch Leistungsaspekte
USE credit USE credit SELECT m.lastname, p.payment_amt SELECT m.lastname, p.payment_amt FROM member AS m INNER JOIN payment AS p FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no ON m.member_no = p.member_no WHERE p.payment_amt < 7000 AND m.firstname < 'Jak' WHERE p.payment_amt < 7000 AND m.firstname < 'Jak'

Einstieg

Bei einen Mergeverknpfung werden zwei sortierte Eingaben verwendet, die dann verknpft werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bei einer Mergeverknpfung werden zwei sortierte Eingaben verwendet, die dann verknpft werden.

Verknpfte Spalten mssen sortiert sein


Wenn Sie eine Abfrage mit Verknpfungsoperationen ausfhren und die verknpften Spalten in sortierter Reihenfolge vorliegen, verarbeitet der Abfrageoptimierer die Abfrage mit Hilfe einer Mergeverknpfungsstrategie. Eine Mergeverknpfung ist sehr effizient, da die Spalten bereits sortiert sind und weniger Seiten-E/A erforderlich sind.

Auswerten sortierter Werte


Damit der Abfrageoptimierer die Mergeverknpfung verwendet, mssen die Eingaben sortiert sein. Der Abfrageoptimierer wertet sortierte Werte in der folgenden Reihenfolge aus: 1. Verwenden einer vorhandenen Indexstruktur (am hufigsten). Der Abfrageoptimierer kann die Indexstruktur eines gruppierten Indexes oder eines abgedeckten, nicht gruppierten Indexes verwenden. 2. Nutzen der Sortieroperationen, die von den GROUP BY-, ORDER BY- und CUBE-Klauseln verwendet werden. Die Sortieroperation muss nur einmal durchgefhrt werden. 3. Fhrt eigene Sortieroperationen durch, in denen ein SORT-Operator dargestellt wird, wenn der Ausfhrungsplan grafisch angezeigt wird. Dies wird vom Abfrageoptimierer sehr selten durchgefhrt.

44

Unterrichtseinheit 14: Analysieren von Abfragen

Beispiel 1

In diesem Beispiel ist fr die member_no-Spalte der payment-Tabelle ein gruppierter Index vorhanden, und ein eindeutiger gruppierter Index ist fr die member_no-Spalte der member-Tabelle vorhanden. Mit Hilfe des gruppierten Indexes fr jede Tabelle scannt der Abfrageoptimierer die member-Tabelle und die payment-Tabelle. Nach dem Scannen des Inhalts jeder Tabelle fhrt der Abfrageoptimierer eine Mergeverknpfung zwischen beiden Tabellen durch, da beide Eingaben bereits von den gruppierten Indizes sortiert wurden. Dies ist eine Mergeverknpfung/innere Verknpfung.
USE credit SELECT m.lastname, p.payment_amt FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no WHERE p.payment_amt < 7000 AND m.firstname < 'Jak'

Beispiel 2

In diesem Beispiel ist ein eindeutiger gruppierter Index fr die member_noSpalte der member-Tabelle vorhanden, und in der Abfrage ist explizit eine ORDER BY-Klausel fr die member_no-Spalte der payment-Tabelle angegeben.
USE credit SELECT m.lastname, m.firstname, p.payment_dt FROM member AS m INNER JOIN payment AS p ON m.member_no = p.member_no ORDER BY p.member_no

Leistungsaspekte
Bercksichtigen Sie die folgenden Aspekte dazu, wie der Abfrageoptimierer die Mergeverknpfung verwendet: SQL Server fhrt eine Mergeverknpfung fr alle Typen von Verknpfungsoperationen durch (mit Ausnahme von CROSS JOIN-Operationen oder FULL JOIN-Operationen), einschlielich der UNION-Operationen. Eine Mergeverknpfungsoperation kann eine 1:1-, 1:n- oder n:n-Operation sein. Wenn es sich bei der Mergeverknpfung um eine n:n-Operation handelt, verwendet SQL Server eine temporre Tabelle, um die Zeilen zu speichern. Treten bei den Eingaben doppelte Werte auf, so muss eine Eingabe bis zum ersten doppelten Wert zurckgespult werden, whrend alle doppelten Werte der anderen Eingabe verarbeitet werden. Die Abfrageleistung ist bei einer Mergeverknpfung sehr hoch, die Kosten knnen ebenfalls hoch sein, wenn der Abfrageoptimierer eine eigene Sortieroperation durchfhren muss. Wenn die Datenmenge umfangreich ist und die gewnschten Daten vorsortiert aus den Indizes der vorhandenen B-Bume (Balanced Tree) abgerufen werden knnen, ist die Mergeverknpfung hufig der schnellste Verknpfungsalgorithmus. Eine Mergeverknpfung wird normalerweise verwendet, wenn die beiden Verknpfungseingaben viele Daten aufweisen und in den Verknpfungsspalten sortiert sind (wenn z. B. die Verknpfungseingaben beim Scannen sortierter Indizes gewonnen wurden). Mergeverknpfungsoperationen knnen nur mit einem Gleichheitsoperator im Verknpfungsprdikat durchgefhrt werden.

Unterrichtseinheit 14: Analysieren von Abfragen

45

Verarbeiten von Hashverknpfungen


Thema
Erlutern Sie, wie Hashverknpfungen verarbeitet werden.
Untersuchungseingabe member_no member_no 1 1 .. .. .. 9817 9817 .. .. .. Erstellungseingabe Hashbucket Hashb Hashbucket Datenzeilen Datenzeilen Datenzeilen 9817 DeBroux 9817 DeBroux .. .. .. 10686 Zuvel 10686 Zuvel .. .. .. 8342 Hjellen 8342 Hjellen .. .. ..

Einstieg

Der Abfrageoptimierer verwendet eine Hashverknpfung, wenn diese Option voraussichtlich effizienter ist als das Verarbeiten von Abfragen mit Hilfe einer Nested Loop- oder Mergeverknpfung.

Hashschlssel
xxx xxx zzz zzz yyy yyy nnn nnn .. .. ..

xxx

yyy

.. .. ..

member_no lastname Ergebnis member_no lastname 9817 DeBroux DeBroux 9817

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Mit der Hashingstrategie werden Daten basierend auf einer gegebenen Eigenschaft oder einem gegebenen Merkmal in gleich groe Stze von handlicher Gre unterteilt. Mit den gruppierten Daten kann dann ermittelt werden, ob ein bestimmtes Datenelement mit einem vorhandenen Wert bereinstimmt. Anmerkung Doppelte Daten oder Bereiche von Daten sind fr Hashverknpfungen nicht ntzlich, da die Daten nicht organisiert oder sortiert sind.

Wann eine Hashverknpfung verwendet wird


Der Abfrageoptimierer verwendet eine Hashverknpfungsoption, wenn diese Option voraussichtlich effizienter ist als das Verarbeiten von Abfragen mit Hilfe einer Nested Loop- oder Mergeverknpfung. Normalerweise werden Hashverknpfungen verwendet, wenn kein Index vorhanden ist oder vorhandene Indizes nicht ntzlich sind.

Zuweisen einer Erstellungs- und Untersuchungseingabe


Der Abfrageoptimierer weist eine Erstellungs- und Untersuchungseingabe zu. Wenn der Abfrageoptimierer die Erstellungs- und Untersuchungseingabe nicht ordnungsgem zuweist (dies ist aufgrund von ungenauen Schtzungen der Dichte mglich), werden sie dynamisch umgekehrt. Die Funktion zum dynamischen ndern der Rolle wird als Role reversal bezeichnet. Erstellungseingaben bestehen aus den Spaltenwerten einer Tabelle mit der geringsten Zeilenanzahl. Durch Erstellungseingaben wird eine Hashtabelle im Arbeitsspeicher erstellt, um diese Werte zu speichern.

46

Unterrichtseinheit 14: Analysieren von Abfragen

Hashbucket ist der Speicherort in der Hashtabelle, in den alle Zeilen der Erstellungseingabe eingefgt wird. Zeilen aus einer der Verknpfungstabellen werden in dem Hashbucket platziert, bei dem der Hashschlsselwert der Zeile mit dem Hashschlsselwert des Buckets bereinstimmt. Hashbuckets werden als verknpfte Listen gespeichert und enthalten nur die Spalten, die fr die Abfrage notwendig sind. Eine Hashtabelle enthlt Hashbuckets. Eine Hashtabelle wird aus der Erstellungseingabe erstellt. Die Untersuchungseingabe besteht aus den Spaltenwerten der Tabellen mit den meisten Zeilen. Die Erstellungseingabe berprft die Untersuchungseingabe, um im Hashbucket eine bereinstimmende Zeile zu finden. Anmerkung Mit Hilfe von Spalten- oder Indexstatistiken ermittelt der Abfrageoptimierer, welche der Eingaben kleiner ist.

Verarbeiten einer Hashverknpfung


In der folgenden Liste ist auf vereinfachte Weise dargestellt, wie der Abfrageoptimierer eine Hashverknpfung verarbeitet. Diese Liste ist nicht vollstndig, da der Algorithmus sehr komplex ist. SQL Server: 1. Lesen der Untersuchungseingabe. Von jeder Untersuchungseingabe wird eine Zeile zur Zeit verarbeitet. 2. Durchfhren des Hashalgorithmus fr jede Untersuchungseingabe und Erzeugen eines Hashschlsselwertes. 3. Bestimmen des Hushbuckets, der mit dem Hashschlsselwert bereinstimmt. 4. Zugreifen auf den Hashbucket und Suchen nach der bereinstimmenden Zeile. 5. Zurckgeben der Zeile, wenn eine bereinstimmende Zeile gefunden wird.

Leistungsaspekte
Beachten Sie die folgenden Aspekte zu Hashverknpfungen, die vom Abfrageoptimierer verwendet werden: hnlich wie Mergeverknpfungen ist eine Hashverknpfung sehr effizient, da ein Hashbucket verwendet wird. Hashbuckets sind mit einem dynamischen Index vergleichbar, aber mit weniger Verwaltungsaufwand zum Kombinieren von Zeilen verbunden. Hashverknpfungen knnen fr alle Arten von Verknpfungsoperationen (mit Ausnahme von CROSS JOIN-Operationen) durchgefhrt werden, einschlielich UNION- und DIFFERENCE-Operationen. Ein Hashoperator kann doppelte Werte entfernen und Daten gruppieren, wie z. B. SUM (Gehalt) GROUP BY Abteilung. Der Abfrageoptimierer verwendet nur eine Eingabe fr die Erstellungs- und Untersuchungsrollen. Bei umfangreichen Eingaben mit hnlicher Gre entspricht die Leistung einer Hashverknpfungsoperation etwa einer Mergeverknpfung mit vorherigem Sortiervorgang. Wenn jedoch die Gre der Verknpfungseingaben sehr unterschiedlich ist, weist die Hashverknpfung hufig eine viel bessere Leistung auf.

Unterrichtseinheit 14: Analysieren von Abfragen

47

Hashverknpfungen knnen groe, nicht sortierte, nicht indizierte Eingaben effizient verarbeiten. Hashverknpfungen sind bei komplexen Abfragen ntzlich, da fr die Zwischenergebnisse Folgendes gilt: Sie werden nicht indiziert (es sei denn, sie werden auf einem Datentrger gespeichert und dann indiziert). Sie werden hufig fr die nchste Operation im Ausfhrungsplan nicht sortiert. Der Abfrageoptimierer kann falsche Schtzungen identifizieren und dynamisch Korrekturen vornehmen, damit die Abfrage effizienter verarbeitet wird. Eine Hashverknpfung reduziert die Notwendigkeit der Datenbankdenormalisierung. Denormalisierung wird normalerweise verwendet, um eine bessere Leistung durch Reduzieren der Verknpfungsoperationen zu erreichen, trotz Redundanz durch z. B. inkonsistente Aktualisierungen. Durch Hashverknpfungen haben Sie die Option, als Teil des physischen Datenbankentwurfs Daten vertikal zu partitionieren. Durch vertikales Partitionieren werden Gruppen von Spalten einer einzigen Tabelle in getrennten Dateien oder Indizes dargestellt. Anmerkung Weitere Informationen zu Hashverknpfungen finden Sie unter Grundlegendes zu Hashverknpfungen in der SQL Server-Onlinedokumentation.

48

Unterrichtseinheit 14: Analysieren von Abfragen

bungseinheit B: Analysieren von Abfragen mit unterschiedlichen Verknpfungsstrategien


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit beobachten Sie den Ausfhrungsplan und werten die Abfrageoptimierung mit Hilfe unterschiedlicher Verknpfungsstrategien aus.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, das Verarbeiten einer Abfrage mit Hilfe von Nested Loop-, Merge- und Hashstrategien auszuwerten.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L14 befinden.

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore14B.cmd. Mit dieser Befehlsdatei wird die credit-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Daneben sind die folgenden Informationsquellen verfgbar: Das credit-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Unterrichtseinheit 14: Analysieren von Abfragen

49

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 30 Minuten

50

Unterrichtseinheit 14: Analysieren von Abfragen

bung 1 Verarbeiten von Nested Loop-Verknpfungen


In dieser bung werden Sie Indizes fr die member-Tabelle und die chargeTabelle erstellen und beobachten, wie der Abfrageoptimierer die Abfrage mit Hilfe einer Nested Loop-Verknpfungsstrategie verarbeitet. Sie knnen Abschnitte der Skriptdatei NestedLoopJoin.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So erstellen Sie Indizes In diesem Verfahren werden Sie Indizes fr die member-Tabelle und die charge-Tabelle erstellen. 1. Melden Sie sich mit Hilfe der Informationen in der folgenden Tabelle an der Schulungsraumdomne nwtraders an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer und melden Sie sich gegebenenfalls mit Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind, und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Geben Sie mit SQL Query Analyzer diese Anweisung ein und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle und die chargeTabelle zu lschen:
USE credit EXEC index_cleanup member EXEC index_cleanup charge

4. Geben Sie diese Anweisung ein und fhren Sie sie aus, um einen eindeutigen, nicht gruppierten zusammengesetzten Index fr die lastname-Spalte und die firstname-Spalte der member-Tabelle zu erstellen:
USE credit CREATE UNIQUE nonclustered INDEX mbr_name ON member(lastname, firstname)

5. Geben Sie diese Anweisung ein und fhren Sie sie aus, um einen nicht gruppierten Index fr die member_no-Spalte der charge-Tabelle zu erstellen:
USE credit CREATE nonclustered INDEX chg_mem_no ON charge(member_no)

Unterrichtseinheit 14: Analysieren von Abfragen

51

So beobachten Sie, wie eine Abfrage mit Hilfe der Nested LoopVerknpfungsstrategie verarbeitet wird In diesem Verfahren werden Sie fr die Statistikoption ON festlegen, eine Abfrage ausfhren und statistische Informationen aufzeichnen. 1. Geben Sie diese Anweisung ein, und fhren Sie sie aus, um fr die Statistikoption ON festzulegen:
SET STATISTICS IO ON

2. Klicken Sie im Men Abfrage auf Ausfhrungsplan anzeigen. 3. Geben Sie die SELECT-Anweisung ein, und fhren Sie sie aus, um die Mitgliedsnummer, den Nachnamen und die Gebhrennummer zu Mitgliedern mit dem Nachnamen Barr und dem Vornamen Bos abzurufen.
USE credit SELECT member.member_no, lastname, charge_no FROM member JOIN charge ON member.member_no = charge.member_no WHERE member.lastname = 'BARR' AND firstname = 'BOS'

4. Zeichnen Sie die statistischen Informationen fr die member-Tabelle auf.


Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
3 1 (mbr_name)

5. Zeichnen Sie die statistischen Informationen fr die charge-Tabelle auf.


Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
26 1 (chg_mem_no)

Warum sind fr die member-Tabelle drei E/A-Vorgnge erforderlich und fr die charge-Tabelle 26 E/A-Vorgnge? Zu einer Zeile der member-Tabelle sind mehrere Zeilen in der charge-Tabelle vorhanden. Dies weist auf eine standardmige 1:nBeziehung hin. ____________________________________________________________ ____________________________________________________________

52

Unterrichtseinheit 14: Analysieren von Abfragen

6. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 7. Untersuchen Sie den Ausfhrungsplan. Nach welcher Strategie hat der Abfrageoptimierer die Zeilen in beiden Tabellen gesucht? Nested Loop-/innere Verknpfung. Der Abfrageoptimierer verwendet den nicht gruppierten Index, um den Mitgliedsnamen BOS BARR in der member-Tabelle zu suchen. Nachdem das richtige Mitglied gefunden wurde, wurde mit Hilfe der member_no-Spalte nach bereinstimmenden Zeilen im chg_mem_no-Index der charge-Tabelle gesucht. Dies ist eine Nested Loop-/innere Verknpfung. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

53

bung 2 Verarbeiten von Mergeverknpfungen


In dieser bung werden Sie alle Indizes fr die member-Tabelle und die charge-Tabelle lschen, eine Abfrage ausfhren und den Ausfhrungsplan auswerten. Sie werden dann Indizes fr die member-Tabelle und die chargeTabelle erstellen, eine Abfrage erneut ausfhren und die Seiten-E/A vergleichen. Sie knnen Abschnitte der Skriptdatei MergeJoin.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So beobachten Sie, wie der Abfrageoptimierer eine Abfrage fr eine Tabelle ohne Indizes verarbeitet In diesem Verfahren werden Sie alle Indizes fr die member-Tabelle und die charge-Tabelle lschen, eine Abfrage ausfhren und die statistischen Informationen auswerten. 1. Geben Sie diese Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle und die charge-Tabelle zu lschen:
USE credit EXEC index_cleanup member EXEC index_cleanup charge

2. Legen Sie ON fr die Option STATISTICS IO fest, geben Sie diese SELECT-Anweisung ein, und fhren Sie sie aus, um die Mitgliedsnummer, den Nachnamen und die Gebhrennummer zu Mitgliedern mit dem Nachnamen Hahn abzurufen.
USE credit SELECT member.member_no, lastname, charge_no FROM member JOIN charge ON member.member_no = charge.member_no WHERE member.lastname = 'HAHN'

Anmerkung Diese Abfrage wird im Verlauf dieser bung als ursprngliche Abfrage bezeichnet. 3. Zeichnen Sie die statistischen Informationen fr die member-Tabelle auf.
Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
145 Keine (Tabellenscan)

54

Unterrichtseinheit 14: Analysieren von Abfragen

4. Zeichnen Sie die statistischen Informationen fr die charge-Tabelle auf.


Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
582 Keine (Tabellenscan)

So erstellen Sie Indizes und werten aus, wie der Abfrageoptimierer eine Abfrage fr eine Tabelle mit Indizes verarbeitet In diesem Verfahren werden Sie Indizes fr die member-Tabelle und die charge-Tabelle erstellen, die ursprngliche Abfrage erneut ausfhren und auswerten, wie der Abfrageoptimierer die Abfrage mit Hilfe einer Mergeverknpfungsstrategie verarbeitet. 1. Geben Sie diese Anweisung ein und fhren Sie sie aus, um einen nicht gruppierten zusammengesetzten Index fr die member_no-Spalte und die lastname-Spalte der member-Tabelle zu erstellen:
USE credit CREATE nonclustered INDEX mbr_name ON member(member_no, lastname)

2. Geben Sie diese Anweisung ein und fhren Sie sie aus, um einen nicht gruppierten zusammengesetzten Index fr die member_no-Spalte und die charge_no-Spalte der charge-Tabelle zu erstellen:
USE credit CREATE nonclustered INDEX chg_charge_no ON charge(member_no, charge_no)

3. Fhren Sie die ursprngliche Abfrage aus, mit der der Mitgliedsname, der Nachname und die Gebhrennummer zu Mitgliedern mit dem Nachnamen Hahn abgerufen werden. Ursprngliche Abfrage
USE credit SELECT member.member_no, lastname, charge_no FROM member JOIN charge ON member.member_no = charge.member_no WHERE member.lastname = 'HAHN'

4. Zeichnen Sie die statistischen Informationen fr die member-Tabelle auf.


Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
32 1 (mbr_name)

Unterrichtseinheit 14: Analysieren von Abfragen

55

5. Zeichnen Sie die statistischen Informationen fr die charge-Tabelle auf.


Informationen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage Ergebnis 1
235 1 (chg_charge_no)

6. Vergleichen Sie die statistischen Informationen einer Abfrage, die fr eine Tabelle ohne Indizes ausgefhrt wurde, mit der gleichen Abfrage, die fr eine Tabelle mit ntzlichen Indizes ausgefhrt wurde. Wurden die E/A-Vorgnge durch das Hinzufgen von Indizes reduziert? Ja. Wenn Indizes vorhanden sind, liest der Abfrageoptimierer nur die Seiten, die erforderlich sind, um die Ergebnisse zurckzugeben. ____________________________________________________________ ____________________________________________________________ 7. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 8. Untersuchen Sie den Ausfhrungsplan. Mit welcher Verknpfungsstrategie hat der Abfrageoptimierer die Verknpfung verarbeitet? Mergeverknpfung/innere Verknpfung. Der Abfrageoptimierer scannt Teile des Indexes fr die charge-Tabelle und Teile des Indexes fr die member-Tabelle. Der Abfrageoptimierer konnte diese Informationen verknpfen (zusammenfhren) und die angeforderten Informationen zurckgeben. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ Warum hat der Abfrageoptimierer diese Strategie ausgewhlt? Der Abfrageoptimierer hat diese Strategie ausgewhlt, da er die Abfrage fr jede Tabelle abdecken konnte. Da der Abfrageoptimierer die Abfrage abgedeckt hat, hat er nur die Seiten auf Blattebene der nicht gruppierten Indizes gescannt, die in sortierter Reihenfolge gepflegt werden. Dadurch konnte die Mergeverknpfung die Vorteile der Eingaben von jeder Tabelle nutzen, die bereits sortiert waren. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

56

Unterrichtseinheit 14: Analysieren von Abfragen

bung 3 Verarbeiten von Hashverknpfungen


In dieser bung werden Sie alle Indizes fr die member-Tabelle und die charge-Tabelle lschen, eine Abfrage ausfhren und beobachten, wie der Abfrageoptimierer die Abfrage mit Hilfe einer Hashverknpfungsstrategie verarbeitet. Sie knnen Abschnitte der Skriptdatei HashJoin.sql in C:\Moc\2328A\Labfiles\L14 ffnen, berprfen und ausfhren oder die bereitgestellten Transact-SQL-Anweisungen eingeben und ausfhren. So beobachten Sie, wie eine Abfrage mit Hilfe der Hashverknpfungsstrategie verarbeitet wird In diesem Verfahren werden Sie alle Indizes fr die member-Tabelle und die charge-Tabelle lschen, eine Abfrage ausfhren und auswerten, wie der Abfrageoptimierer die Abfrage verarbeitet. 1. Geben Sie diese Anweisungen ein, und fhren Sie sie aus, um vorhandene Indizes fr die member-Tabelle und die charge-Tabelle zu lschen:
USE credit EXEC index_cleanup member EXEC index_cleanup charge

2. Geben Sie die SELECT-Anweisung ein, und fhren Sie sie aus, um die Mitgliedsnummer, den Nachnamen und die Gebhrennummer zu Mitgliedern mit dem Nachnamen Barr und dem Vornamen Bos abzurufen:
USE credit SELECT m.member_no, lastname, charge_no FROM member m JOIN charge c ON m.member_no = c.member_no WHERE m.lastname = 'BARR' AND firstname = 'BOS'

3. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen. 4. Untersuchen Sie den Ausfhrungsplan. Mit welcher Strategie hat der Abfrageoptimierer diese Zeilen gefunden? Begrndung? Hashbereinstimmung/innere Verknpfung. Wenn keine Indizes vorhanden sind, muss der Abfrageoptimierer beide Tabellen scannen, um die angeforderten Zeilen zu finden. Dann erstellt der Abfrageoptimierer eine Hashtabelle aus den qualifizierenden Zeilen der memberTabelle, verarbeitet jede Zeile der charge-Tabelle und gibt die bereinstimmenden Zeilen zurck. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 14: Analysieren von Abfragen

57

Empfohlene Methoden
Listen Sie die empfohlenen Methoden beim Analysieren von Abfragen auf, in denen der AND-Operator und der OR-Operator oder Verknpfungsoperationen verwendet werden.

Thema

Definieren eines Indexes fr eine Spalte mit hoher Selektivitt Definieren eines Indexes fr eine Spalte mit hoher Selektivitt Sicherstellen, dass ntzliche Indizes fr alle Spalten vorhanden Sicherstellen, dass ntzliche Indizes fr alle Spalten vorhanden sind, auf die im OR-Operator verwiesen wird sind, auf die im OR-Operator verwiesen wird Minimieren der Verwendung von Hashverknpfungen Minimieren der Verwendung von Hashverknpfungen

Einstieg

Beim Analysieren von Abfragen, in denen der ANDOperator und der OROperator oder Verknpfungsoperationen verwendet werden, sollten Sie die folgenden Methoden bercksichtigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Beim Analysieren von Abfragen, in denen der AND-Operator und der OROperator oder Verknpfungsoperationen verwendet werden, sollten Sie die folgenden Methoden bercksichtigen: Definieren eines Indexes fr eine Spalte mit hoher Selektivitt. Die beste Methode zum Indizieren fr Abfragen mit dem AND-Operator ist es, wenn mindestens ein sehr selektives Suchkriterium vorhanden ist und ein Index fr die Spalte definiert wurde. Sicherstellen, dass ntzliche Indizes fr alle Spalten vorhanden sind, auf die im OR-Operator verwiesen wird. Minimieren der Verwendung von Hashverknpfungen durch das Erstellen ntzlicher Indizes und das Schreiben effizienter Abfragen.

58

Unterrichtseinheit 14: Analysieren von Abfragen

Lernzielkontrolle
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Thema

Abfragen mit dem AND-Operator Abfragen mit dem OR-Operator Abfragen mit Verknpfungsoperationen

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** 1. Sie schreiben Abfragen fr eine Anwendung. Sie kennen die Vorteile nicht genau, die das Verwenden mehrerer Einschrnkungen in der WHEREKlausel mit Hilfe des AND-Operators bietet. Nennen Sie einige Vorteile, die das Verwenden mehrerer AND-Operatoren in den Abfragen bietet. Je mehr AND-Operatoren Sie verwenden, desto einschrnkender wird die Abfrage. Durch das Verwenden mehrerer AND-Operatoren knnte die Abfrage viele Indizes verwenden, oder es wird eine bessere Auswahl von Indizes angeboten.

2. Eine Abfrage weist eine schlechte Leistung auf. Der Abfrageoptimierer fhrt gerade einen Tabellenscan durch, obwohl fr einige der Spalten, auf die in der WHERE-Klausel verwiesen wird, Indizes vorhanden sind. Wodurch knnte die schlechte Leistung der folgenden Abfrage verursacht sein?
SELECT * FROM member WHERE lastname = 'GOHAN' OR expr_dt < '31.12.1999' OR region_no = 7

Wenn der OR-Operator in einer Abfrage verwendet wird, muss jede Spalte, die den OR-Operator verwendet, einen Index oder einen ntzlichen Index aufweisen. Wenn nur eine Spalte keinen Index oder keinen ntzlichen Index aufweist, fhrt der Abfrageoptimierer einen Tabellenscan durch.

Unterrichtseinheit 14: Analysieren von Abfragen

59

3. Eine der Abfragen weist eine ausreichende Leistung auf, aber Sie mchten ermitteln, ob Sie die Leistung verbessern knnen. Zurzeit fhrt der Abfrageoptimierer eine Hashverknpfungsoperation durch. Welche Schritte knnen durchgefhrt werden, um die Leistung mglicherweise zu verbessern? Eine Hashverknpfung weist nicht unbedingt eine schlechte Leistung auf. Um die Leistung zu verbessern, berprfen Sie, ob die Verknpfungsspalten ber Indizes oder ntzliche Indizes verfgen. Sie knnen auerdem berprfen, ob die Abfrage eine WHERE-Klausel enthlt, ob die Suchbedingung die Suche beschrnkt und ob ntzliche Indizes fr die Spalten vorhanden sind, auf die in der WHERE-Klausel verwiesen wird.

Unterrichtseinheit 14: Analysieren von Abfragen

This page is intentionally left blank.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren


Inhalt bersicht Einfhrung in Transaktionen und Sperren Verwalten von Transaktionen SQL Server-Sperren Verwalten von Sperren Empfohlene Methoden bungseinheit A: Verwalten von Transaktionen und Sperren Lernzielkontrolle 1 2 4 13 22 33 34 45

Die in diesen Unterlagen enthaltenen Angaben und Daten knnen ohne vorherige Ankndigung gendert werden. Die in diesen Unterlagen genannten Firmen, Produkte, Menschen, Charaktere und/oder Daten sind frei erfunden und sollen keine wirklichen Individuen, Gesellschaften, Produkte oder Veranstaltungen darstellen, soweit nichts anderes angegeben ist. Die Benutzer/innen sind verpflichtet, sich an alle anwendbaren Urheberrechtsgesetze zu halten. Ohne ausdrckliche schriftliche Erlaubnis der Microsoft Corporation darf kein Teil dieser Unterlagen fr irgendwelche Zwecke vervielfltigt oder bertragen werden, unabhngig davon, auf welche Art und Weise oder mit welchen Mitteln, elektronisch oder mechanisch, dies geschieht. Wenn auf dieses Dokument nur auf elektronischem Wege zugegriffen werden kann, sind Sie hiermit berechtigt, eine (1) Kopie zum persnlichen Gebrauch auszudrucken. Microsoft Corporation kann Inhaber von Patenten oder Patentantrgen, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten sein, die den Inhalt dieses Dokuments betreffen. Die Bereitstellung dieses Dokuments gewhrt keinerlei Lizenzrechte an diesen Patenten, Marken, Urheberrechten oder anderen gewerblichen Schutzrechten, es sei denn, dies wurde ausdrcklich durch einen schriftlichen Lizenzvertrag mit der Microsoft Corporation vereinbart. 2000 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio, Windows und Windows NT sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Lndern. Andere in diesem Dokument aufgefhrte Produkt- und Firmennamen sind mglicherweise Marken der jeweiligen Eigentmer. Project Lead: Rich Rose Instructional Designers: Rich Rose, Cheryl Hoople, Marilyn McGill Instructional Software Design Engineers: Karl Dehmer, Carl Raebler, Rick Byham Technical Lead: Karl Dehmer Subject Matter Experts: Karl Dehmer, Carl Raebler, Rick Byham Graphic Artist: Kirsten Larson (Independent Contractor) Editing Manager: Lynette Skinner Editor: Wendy Cleary Copy Editor: Edward McKillop (S&T Consulting) Production Manager: Miracle Davis Production Coordinator: Jenny Boe Production Support: Lori Walker (S&T Consulting) Test Manager: Sid Benavente Courseware Testing: TestingTesting123 Classroom Automation: Lorrin Smith-Bates Creative Director, Media/Sim Services: David Mahlmann Web Development Lead: Lisa Pease CD Build Specialist: Julie Challenger Online Support: David Myka (S&T Consulting) Localization Manager: Rick Terek Operations Coordinator: John Williams Manufacturing Support: Laura King; Kathy Hershey Lead Product Manager, Release Management: Bo Galford Lead Product Manager, Data Base: Margo Crandall Group Manager, Courseware Infrastructure: David Bramble Group Product Manager, Content Development: Dean Murray General Manager: Robert Stewart

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

iii

Hinweise fr den Kursleiter


Prsentation: 45 Minuten bungseinheit: 60 Minuten Diese Unterrichtseinheit vermittelt den Kursteilnehmern Informationen darber, wie Transaktionen und Sperren verwendet werden, um die Integritt von Transaktionen bei gleichzeitiger Verwendung sicherzustellen. Anschlieend folgt eine Diskussion darber, wie Transaktionen ausgefhrt werden und wie ein Rollback fr die Transaktion ausgefhrt wird. Eine kurze Animation soll verdeutlichen, wie die Transaktionsverarbeitung abluft. Als Nchstes wird beschrieben, wie Microsoft SQL Server 2000-Sperren die Datenkonsistenz und Parallelitt aufrechterhalten. Es werden Ressourcen, die gesperrt werden knnen, verschiedene Typen von Sperren und die Kompatibilitt von Sperren werden vorgestellt. Im letzten Abschnitt werden einige Sperroptionen erlutert, Deadlocks beschrieben, und es wird erklrt, wie Informationen zu aktiven Sperren angezeigt werden. In der bungseinheit definieren die Kursteilnehmer eine Transaktion und beobachten die Auswirkungen von BEGIN TRAN-, COMMIT TRAN- und ROLLBACK TRAN-Anweisungen. Danach beobachten sie, welche Auswirkungen es hat, verschiedene Sperroptionen auf eine Transaktion anzuwenden. Am Ende dieser Unterrichtseinheit werden die Kursteilnehmer in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Transaktionsverarbeitung. Ausfhren oder Abbrechen einer Transaktion bzw. Ausfhren eines Rollbacks fr eine Transaktion. Identifizieren von Problemen mit der Parallelitt von Sperren. Identifizieren der Ressourcen, die gesperrt werden knnen, und der Typen von Sperren. Beschreiben der Kompatibilitt von Sperren. Beschreiben, wie Microsoft SQL Server 2000 dynamisches Sperren verwendet. Festlegen von Sperroptionen und Anzeigen von Sperrinformationen.

Unterlagen und Vorbereitung


In diesem Abschnitt werden die erforderlichen Unterlagen und vorbereitenden Aufgaben erlutert, die ntig sind, um diese Unterrichtseinheit zu unterrichten.

Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie folgende Unterlagen: Die Microsoft PowerPoint-Datei 2328A_15.ppt Die Beispieldatei C:\Moc\2328A\Demo\D15_Ex.sql, die alle Beispielskripts der Unterrichtseinheit enthlt, soweit in der Unterrichtseinheit nichts anderes angegeben ist.

iv

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Vorbereitende Aufgaben
Zur Vorbereitung dieser Unterrichtseinheit gehen Sie folgendermaen vor: Lesen Sie alle Unterlagen fr diese Unterrichtseinheit. Arbeiten Sie die bungseinheit durch. Machen Sie sich mit der Prsentation einschlielich der Animation vertraut. Gehen Sie alle relevanten Whitepaper durch, die sich auf der Kursleiter-CD befinden.

Multimediaprsentation
In diesem Abschnitt werden die Verfahren fr die Multimediaprsentation zur Verfgung gestellt, die weder in den Randnotizen enthalten noch fr die Unterlagen der Kursteilnehmer geeignet sind.

SQL Server-Transaktionen
So bereiten Sie die Multimediaprsentation vor Klicken Sie auf die Schaltflche auf der Folie, um die Multimediaprsentation zu starten. Bei dieser Multimediaprsentation wird die SQL Server-Transaktionsverarbeitung vorgestellt. Es wird mit der Definition einer Transaktion begonnen, und es werden die beiden Typen von Transaktionen erlutert: die impliziten und die expliziten Transaktionen. Anschlieend wird erklrt, wie es mglich ist, eine Transaktion abzubrechen oder einen Rollback fr eine Transaktion auszufhren. In der Prsentation wird anschlieend das Transaktionsprotokoll beschrieben, das die Datenbankkonsistenz aufrechterhlt, und es wird erklrt, wie nderungen im Protokoll auf dem Datentrger aufgezeichnet werden, bevor sie in die Datenbank geschrieben werden. Es wird auerdem beschrieben, wie Prfpunkte im Protokoll anzeigen, welche Transaktionen auf die Datenbank angewendet wurden. Abschlieend wird der automatische Wiederherstellungsvorgang beschrieben.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Sonstige Aktivitten
In diesem Abschnitt werden Verfahren bereitgestellt, mit denen interaktive Aktivitten zum Anzeigen und berprfen von Informationen implementiert werden, wie Spiele oder bungen mit Rollenspielen.

Anzeigen der Animation


Alle Animationen sind durch ein Hyperlinksymbol in der unteren linken Ecke der Folie gekennzeichnet. So zeigen Sie die Folie zur Transaktionswiederherstellung und zu den Prfpunkten an Diese Folie zeigt, wie SQL Server im Falle eines Systemausfalls auf einfache Weise Transaktionen wiederherstellen kann. 1. Zeigen Sie die Folie mit dem Thema an, auf der die fr eine Transaktionswiederherstellung erforderlichen Aktionen angezeigt werden. 2. Fahren Sie mit der ersten Animation fort, bei der der Pfeil fr die Transaktion 1 vor der Markierung fr den Prfpunkt endet. Es ist keine Aktion erforderlich, da die Transaktion in der Datenbank widergespiegelt wird. 3. Fahren Sie mit der nchsten Animation fort, bei der der Pfeil fr die Transaktion 2 vor der Markierung fr den Prfpunkt beginnt und nach der Markierung endet. Fr die Transaktion muss ein Rollforward ausgefhrt werden, da ein Teil der Transaktion nach dem Prfpunkt stattgefunden hat. 4. Fahren Sie mit der nchsten Animation fort, bei der der Pfeil fr die Transaktion 3 vor der Markierung fr den Prfpunkt beginnt und erst nach der Markierung fr den Systemausfall endet. Fr die Transaktion muss ein Rollback ausgefhrt werden. 5. Fahren Sie mit der nchsten Animation fort, bei der der Pfeil anzeigt, dass fr die Transaktion 4 nach dem Prfpunkt ein Commit ausgefhrt wird. Sie muss aus dem Protokoll rekonstruiert werden (Rollforward). 6. Fahren Sie mit der letzten Animation fort, bei der der Pfeil fr die Transaktion 5 nach der Markierung fr den Prfpunkt beginnt und erst nach der Markierung fr den Systemausfall endet. Fr die Transaktion muss ein Rollback ausgefhrt werden.

vi

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Strategie fr die Unterrichtseinheit


Verwenden Sie die folgende Strategie, um diese Unterrichtseinheit zu prsentieren: Einfhrung in Transaktionen und Sperren Geben Sie eine Einfhrung in die Begriffe und Konzepte, die in der Unterrichtseinheit verwendet werden. Gehen Sie sicher, dass die Kursteilnehmer den Zusammenhang zwischen den Konzepten verstehen. Verwalten von Transaktionen Spielen Sie die Multimediaprsentation ab. Beschreiben Sie, wie eine Transaktion definiert wird, beschreiben Sie Einschrnkungen fr Transaktionen, erlutern Sie, wie SQL Server Transaktionen verarbeitet, und gehen Sie auf die Transaktionswiederherstellung und auf Prfpunkte ein. Stellen Sie sicher, dass die Kursteilnehmer verstehen, was Transaktionen sind und wie eine Transaktion bei einer automatischen Wiederherstellung verwendet wird. SQL Server-Sperren Beschreiben Sie Probleme mit der Parallelitt von Sperren, Ressourcen, die gesperrt werden knnen, Typen von Sperren und die Kompatibilitt von Sperren. Weisen Sie darauf hin, dass fehlende Sperren zu Problemen fhren knnen und dass SQL Server diese Probleme automatisch behebt. Machen Sie die Kursteilnehmer darauf aufmerksam, dass sich nderungen an ihren Transaktionen negativ auf die Leistung auswirken knnen. Verwalten von Sperren Beschreiben Sie Sperroptionen auf Sitzungs- und auf Tabellenebene, erklren Sie, was Deadlocks sind, und beschreiben Sie, wie Sperrinformationen angezeigt werden. Betonen Sie, dass die Kursteilnehmer Transaktionen entwerfen sollten, um die Anzahl von Deadlocks zu reduzieren. Sie sollten die Transaktionen auerdem testen, um zu ermitteln, ob in einer Transaktion ein Deadlock auftritt.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

vii

Anpassungsinformationen
Dieser Abschnitt beschreibt die Anforderungen zum Einrichten der bungseinheiten fr eine Unterrichtseinheit sowie die Konfigurationsnderungen, die whrend der bungseinheiten an den Kursteilnehmercomputern vorgenommen werden. Diese Informationen sollen Ihnen beim Replizieren oder Anpassen der Microsoft Official Curriculum-Courseware (MOC) helfen. Wichtig Die bungseinheit in dieser Unterrichtseinheit hngt auch von der Schulungsraumkonfiguration ab, die im Abschnitt Anpassungsinformationen am Ende des Dokuments Handbuch fr das Einrichten von Schulungscomputern fr Kurs 2328A, Programmieren einer Microsoft SQL Server 2000Datenbank, angegeben ist.

Einrichten der bungseinheit


Anforderung zum Einrichten der bungseinheit
Fr die bungseinheit in dieser Unterrichtseinheit muss sich die ClassNorthwind-Datenbank in einem fr die bungseinheit erforderlichen Status befinden. Um die Kursteilnehmercomputer so vorzubereiten, dass sie diese Anforderung erfllen, fhren Sie eine der beiden folgenden Aktionen durch: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore15.cmd.

Ergebnisse der bungseinheit


Auf den Kursteilnehmercomputern gibt es keine Konfigurationsnderungen, die die Replikation oder die Anpassung betreffen.

viii

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

This page is intentionally left blank.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

bersicht
Geben Sie eine bersicht ber die Themen und Lernziele dieser Unterrichtseinheit.

Thema

Einfhrung in Transaktionen und Sperren Verwalten von Transaktionen SQL Server-Sperren Verwalten von Sperren

Einstieg

In dieser Unterrichtseinheit werden die folgenden Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********

Lernziele
Am Ende dieser Unterrichtseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Beschreiben der Transaktionsverarbeitung. Ausfhren oder Abbrechen einer Transaktion bzw. Ausfhren eines Rollbacks fr eine Transaktion. Identifizieren von Problemen mit der Parallelitt von Sperren. Identifizieren der Ressourcen, die gesperrt werden knnen, und der Typen von Sperren. Beschreiben der Kompatibilitt von Sperren. Beschreiben, wie Microsoft SQL Server 2000 dynamisches Sperren verwendet. Festlegen von Sperroptionen und Anzeigen von Sperrinformationen.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Einfhrung in Transaktionen und Sperren


Geben Sie eine Einfhrung in dieses Thema.

Thema

Einstieg

Transaktionen stellen sicher, dass mehrere Datennderungen zusammen verarbeitet werden Sperren verhindern Aktualisierungskonflikte Transaktionen sind serialisierbar Das Sperren geschieht automatisch Sperren ermglichen die parallele Verwendung von Daten Parallelittssteuerung

Transaktionen und Sperren stellen die Integritt von Transaktionen sicher.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Transaktionen verwenden Sperren, um zu verhindern, dass andere Benutzer Daten in einer nicht abgeschlossenen Transaktion ndern oder lesen. Sperren werden in OLTP (Online Transaction Processing, Onlinetransaktions-Verarbeitung) fr Mehrbenutzersysteme bentigt. SQL Server stellt mit Hilfe des Transaktionsprotokolls sicher, dass Aktualisierungen abgeschlossen und wiederherstellbar sind.

Diese Unterrichtseinheit behandelt schwerpunktmig OLTP (Online Transaction Processing, Onlinetransaktions-Verarbeitung) anstelle von abfrageintensiven Anwendungen wie z. B. Data Warehousing- und Decision Support-Anwendungen.

Transaktionen
Mit Hilfe von Transaktionen ist sichergestellt, dass mehrere Datennderungen als Einheit verarbeitet werden. Dieses Merkmal wird als Unteilbarkeit bezeichnet. Es wre z. B. mglich, dass bei einer Banktransaktion einem Konto ein Betrag gutgeschrieben und ein anderes Konto belastet wird. Beide Schritte mssen zusammen ausgefhrt werden. SQL Server untersttzt die Transaktionsverarbeitung, um mehrere Transaktionen zu verwalten.

Sperren
Sperren verhindern Aktualisierungskonflikte. Benutzer knnen Daten, die gerade von anderen Benutzern gendert werden, weder lesen noch ndern. Wenn Sie z. B. eine Summe berechnen und sicherstellen mchten, dass keine andere Transaktion die zur Berechnung der Summe verwendeten Daten ndert, knnen Sie das veranlassen, dass das System die Daten mit Sperren belegt. Bercksichtigen Sie die folgenden Aspekte in Bezug auf Sperren: Sperren ermglichen die Serialisierung von Transaktionen, sodass nur jeweils eine Person ein Datenelement ndern kann. Beispielsweise stellen Sperren in einem Flugreservierungssystem sicher, dass ein bestimmter Sitzplatz nur fr eine Person reserviert wird. SQL Server legt die richtige Sperrebene whrend einer Transaktion dynamisch fest und passt sie an. Darber hinaus knnen Sie manuell steuern, wie einige Sperren verwendet werden.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Sperren werden fr parallele Transaktionen bentigt, damit Benutzer zur gleichen Zeit auf Daten zugreifen und diese aktualisieren knnen. Eine hohe Parallelitt bedeutet, dass eine Reihe von Benutzern auf Daten zugreifen knnen und dabei gute Antwortzeiten mit wenigen Konflikten zu verzeichnen sind. Die wichtigsten Aspekte aus der Sicht des Systemadministrators sind hierbei die Anzahl der Benutzer, die Anzahl der Transaktionen und der Durchsatz. Aus der Sicht des Benutzer spielt die Antwortzeit die wichtigste Rolle.

Parallelittssteuerung
Durch eine Parallelittssteuerung ist sichergestellt, dass nderungen, die ein Benutzer vornimmt, nicht die nderungen anderer Benutzer beeintrchtigt. Es gibt zwei Typen. Die Steuerung durch eingeschrnkte Parallelitt ermglicht das Sperren von Daten, wenn sie zur Vorbereitung auf eine Aktualisierung gelesen werden. Andere Benutzer knnen in diesem Fall keine Aktionen ausfhren, die die zugrunde liegenden Daten ndern wrden, bis der Benutzer, der die Sperre angewendet hat, die Daten vollstndig gelesen hat. Verwenden Sie die eingeschrnkte Parallelitt, wenn ein hohes Konfliktrisiko fr Daten besteht und die Kosten fr das Schtzen der Daten mit Sperren niedriger sind als die Kosten, die entstehen, wenn im Falle von Parallelittskonflikten fr Transaktionen ein Rollback ausgefhrt wird. Bei der Steuerung durch vollstndige Parallelitt werden Daten beim ersten Lesen nicht gesperrt. Stattdessen fhrt SQL Server im Falle einer Aktualisierung eine berprfung durch, um zu ermitteln, ob die zugrunde liegenden Daten seit dem ersten Lesen gendert wurden. Ist dies der Fall, erhlt der Benutzer eine Fehlermeldung, fr die Transaktion wird ein Rollback ausgefhrt, und der Benutzer muss noch einmal von vorn anfangen. Verwenden Sie die vollstndige Parallelitt, wenn ein geringes Konfliktrisiko fr Daten besteht und die Kosten, die entstehen, wenn gelegentlich fr eine Transaktion ein Rollback ausgefhrt wird, niedriger sind als die Kosten fr das Sperren von Daten, wenn sie gelesen werden. SQL Server untersttzt eine Vielzahl von Steuerungsmechanismen durch vollstndige und eingeschrnkte Parallelitt. Benutzer geben den Typ der Steuerung durch Parallelitt anhand der Transaktionsisolationsstufe einer Verbindung an.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Verwalten von Transaktionen


Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

Multimediaprsentation: SQL Server-Transaktionen Transaktionswiederherstellung und Prfpunkte berlegungen zum Verwenden von Transaktionen Festlegen der Option fr implizite Transaktionen Einschrnkungen fr benutzerdefinierte Transaktionen

In diesem Abschnitt werden folgende Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird beschrieben, wie Transaktionen definiert werden, was bei der Verwendung von Transaktionen zu bercksichtigen ist, wie die Option fr implizite Transaktionen festgelegt wird und welche Einschrnkungen fr die Verwendung von Transaktionen gelten. Auerdem wird die Verarbeitung und die Wiederherstellung von Transaktionen erlutert.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Multimediaprsentation: SQL Server-Transaktionen


Zeigen Sie ein Beispiel fr eine Transaktionsverarbeitung an.

Thema

Einstieg

In dieser Prsentation wird vorgefhrt, wie Transaktionen verarbeitet werden und wie das Transaktionsprotokoll funktioniert.

Methodischer Hinweis
Aktivieren Sie in Microsoft Windows Media Player im Men Ansicht die Option Beschreibung, um die Untertitel der Prsentation anzuzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In SQL Server werden zwei Arten von Transaktionen unterschieden: Kernpunkt In einer impliziten Transaktion wird jede Transact-SQL-Anweisung, wie z. B. eine INSERT-, UPDATE- oder DELETE-Anweisung, als Transaktion ausgefhrt. In einer expliziten bzw. benutzerdefinierten Transaktion werden die Anweisungen der Transaktion zwischen einer BEGIN TRANSACTION- und einer COMMIT TRANSACTION-Klausel gruppiert. Ein Benutzer kann einen Sicherungspunkt (auch Marker genannt) innerhalb einer Transaktion festlegen. Ein Sicherungspunkt definiert einen Standort, an den eine Transaktion zurckkehren kann, wenn ein Teil der Transaktion abgebrochen wird. Die Transaktion muss dann abgeschlossen werden, oder fr die gesamte Transaktion muss ein Rollback ausgefhrt werden. SQL Server-Transaktionen verwenden folgende Syntax. Syntax BEGIN TRAN[SACTION] [transaction_name | @tran_name_variable [WITH MARK [description]]] Die Option transaction_name gibt einen benutzerdefinierten Transaktionsnamen an. Der Name tran_name_variable bezeichnet eine benutzerdefinierte Variable, die einen gltigen Transaktionsnamen enthlt. WITH MARK gibt an, dass die Transaktion im Transaktionsprotokoll markiert ist. Die Zeichenfolge Description beschreibt eine Markierung zum Wiederherstellen eines Transaktionsprotokolls bis zu einer benannten Markierung. WITH MARK zeigt an, dass diese Markierung zulssig ist. Syntax Syntax Syntax SAVE TRAN[SACTION] {savepoint_name | @savepoint_variable} BEGIN DISTRIBUTED TRAN[SACTION] [transaction_name | @tran_name_variable] COMMIT [TRAN[SACTION] [transaction_name | @tran_name_variable]]

Eine Transaktion, fr die ein Commit durchgefhrt wurde, kann nicht rckgngig gemacht oder per Rollback zurckgesetzt werden.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Syntax Beispiel
Das Beispiel kann nicht ausgefhrt werden, da die verwendeten gespeicherten Prozeduren nicht vorhanden sind.

ROLLBACK [TRAN[SACTION] [transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable]] In diesem Beispiel wird eine Transaktion zum berweisen von Betrgen vom laufenden Konto auf das Sparkonto eines Kunden definiert.
BEGIN TRAN fund_transfer EXEC debit_checking 100, 'account1' EXEC credit_savings 100, 'account1' COMMIT TRAN fund_transfer

Beschreiben des Transaktionsprotokolls


Um die Datenbankkonsistenz zu gewhrleisten und eine problemlose Wiederherstellung zu ermglichen, werden smtliche Transaktionen in einem Transaktionsprotokoll aufgezeichnet. Das Protokoll ist ein Speicherbereich, der automatisch alle nderungen an einer Datenbank mit Ausnahme von nicht protokollierten Vorgngen nachverfolgt. Die nderungen werden whrend ihrer Ausfhrung und noch bevor sie in die Datenbank geschrieben werden im Protokoll auf dem Datentrger aufgezeichnet.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Transaktionswiederherstellung und Prfpunkte


Erlutern Sie den Wiederherstellungsvorgang.

Thema

Transaktionswiederherstellung 1 2 3 4 5 Prfpunkt

Erforderliche Aktion
Keine Rollforward Rollback Rollforward Rollback

Einstieg

Da das Transaktionsprotokoll alle nderungen aufzeichnet, knnen Daten im Fall eines Systemausfalls problemlos wiederhergestellt werden.

Systemausfall

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Da das Transaktionsprotokoll alle Transaktionen aufzeichnet, kann SQL Server im Fall eines Stromausfalls, eines Absturzes der Systemsoftware, eines Clientproblems oder einer Aufforderung zum Abbruch einer Transaktion die Daten automatisch wiederherstellen. Methodischer Hinweis SQL Server gewhrleistet automatisch, dass alle Transaktionen, fr die ein Commit ausgefhrt wurde, im Fall eines Systemausfalls in der Datenbank widergespiegelt werden. SQL Server fhrt mit Hilfe des Transaktionsprotokolls ein Rollforward fr alle Transaktionen aus, fr die ein Commit ausgefhrt wurde, und ein Rollback fr alle Transaktionen, fr die kein Commit ausgefhrt wurde. Auf der Folie wird anhand des Beispiels Folgendes gezeigt: Fr Transaktion 1 wird ein Commit vor dem Prfpunkt ausgefhrt, sodass sie in der Datenbank widergespiegelt wird. Fr die Transaktionen 2 und 4 wurde ein Commit nach dem Prfpunkt ausgefhrt, sodass sie aus dem Protokoll rekonstruiert werden mssen (Rollforward). Fr die Transaktionen 3 und 5 wurde kein Commit ausgefhrt, sodass SQL Server ein Rollback fr sie ausfhrt. Zu Beginn sind die Seiten im Datencache und auf dem Datentrger identisch. Anschlieend luft der folgende Vorgang ab: nderungen werden im Datencache gespeichert, whrend fr die Transaktionen ein Commit ausgefhrt wird. Wenn sich der Cache fllt, werden die genderten Seiten auf den Datentrger geschrieben.

Verwenden Sie die Folie als Diskussionsgrundlage. Fragen Sie die Kursteilnehmer, warum die einzelnen Aktionen erforderlich sind.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Findet SQL Server einen Prfpunkt, so wird der Cache auf den Datentrger geschrieben. Danach weist der Datentrger wieder den gleichen Inhalt wie der Cache auf. Wichtig Verwenden Sie nur dann einen Festplattencontroller mit Schreibcache mit SQL Server, wenn er fr die Verwendung mit einem Datenbankserver entworfen wurde. Andernfalls ist die Verwendung nicht mglich, da SQL Server u. a. keine Transaktionen verwalten kann. Bei Verwendung eines Festplattencontrollers mit Schreibcache kann es so aussehen, als seien Write-Ahead-Protokolle vollstndig, obwohl sie es tatschlich nicht sind.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

berlegungen zum Verwenden von Transaktionen


Gehen Sie auf die Aspekte ein, die beim Verwenden von Transaktionen eine Rolle spielen.

Thema

Richtlinien fr Transaktionen Halten Sie Transaktionen so kurz wie mglich Verwenden Sie bestimmte Transact-SQL-Anweisungen mit Vorsicht Vermeiden Sie Transaktionen, die Interaktion seitens der Benutzer erfordern Aspekte im Zusammenhang mit der Schachtelung von Transaktionen Schachtelung ist mglich, aber nicht empfehlenswert Verwenden Sie @@trancount zum Ermitteln der Schachtelungsebene

Einstieg

Transaktionen sollten im Allgemeinen so kurz wie mglich gehalten werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Es ist im Allgemeinen ratsam, Transaktionen kurz zu halten und das Schachteln von Transaktionen zu vermeiden.

Richtlinien fr Transaktionen
Transaktionen sollten so kurz wie mglich sein. Bei lngeren Transaktionen ist die Wahrscheinlichkeit grer, dass Benutzer nicht auf gesperrte Daten zugreifen knnen. Im Folgenden werden einige Methoden genannt, mit denen Transaktionen kurz gehalten werden knnen: Um die Transaktionszeit auf ein Minimum zu reduzieren, sollten Sie bestimmte Transact-SQL-Anweisungen, wie z. B. die WHILE-Anweisung oder DDL-Anweisungen (Data Definition Language), mit besonderer Vorsicht verwenden. Verzichten Sie auf Benutzereingaben whrend einer Transaktion. berdenken Sie alle Schritte, die einen Benutzereingriff erfordern, vor Beginn der Transaktion. Wenn Sie z. B. einen Kundendatensatz aktualisieren, sollten Sie die bentigten Informationen vom Benutzer abrufen, bevor Sie die Transaktion starten. INSERT, UPDATE und DELETE sollten die Hauptanweisungen in einer Transaktion sein und so geschrieben werden, dass sie sich auf die geringstmgliche Anzahl von Zeilen auswirken. Eine Transaktion sollte nie krzer als eine logische Arbeitseinheit sein. ffnen Sie nach Mglichkeit keine Transaktion whrend des Durchsuchens von Daten. Transaktionen sollten erst gestartet werden, wenn die anfngliche Datenanalyse abgeschlossen ist. Whrend einer Transaktion sollte auf so wenige Daten wie mglich zugegriffen werden. Dadurch wird die Anzahl von gesperrten Zeilen verringert, und es treten weniger Konflikte auf.

10

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Aspekte im Zusammenhang mit der Schachtelung von Transaktionen


Bei der Schachtelung von Transaktionen sollten die folgenden Aspekte bercksichtigt werden: Transaktionen knnen geschachtelt werden; allerdings hat die Schachtelung keine Auswirkung auf die Verarbeitung der Transaktion durch SQL Server. Sie sollten Schachtelungen vermeiden oder zumindest mit Vorsicht verwenden, da Sperren auf unbestimmte Zeit bestehen bleiben, wenn fr eine Transaktion kein Commit oder Rollback ausgefhrt werden konnte. Nur das uerste BEGIN...COMMIT-Anweisungspaar wird angewendet. Die Transaktionsschachtelung tritt normalerweise auf, wenn sich gespeicherte Prozeduren mit BEGIN...COMMIT-Anweisungspaaren oder Trigger gegenseitig aufrufen. Mit Hilfe der globalen Variablen @@trancount knnen Sie ermitteln, ob geffnete Transaktionen vorhanden sind und wie tief sie geschachtelt sind. @@trancount hat den Wert 0, wenn keine geffneten Transaktionen vorhanden sind. Eine BEGIN TRAN-Anweisung erhht @@trancount um den Wert 1, eine ROLLBACK TRAN-Anweisung legt @@trancount auf 0 fest. Anmerkung Sie knnen die DBCC OPENTRAN-Anweisung whrend der aktuellen Sitzung auch verwenden, um Informationen zu aktiven Transaktionen abzurufen.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

11

Festlegen der Option fr implizite Transaktionen


Erlutern Sie, wie implizite Transaktionen festgelegt werden.

Thema

Einstieg

Die Transaktion wird automatisch beim Ausfhren bestimmter Anweisungen gestartet Geschachtelte Transaktionen sind nicht zulssig Die Transaktion muss explizit mit COMMIT oder ROLLBACK TRANSACTION abgeschlossen werden Die Einstellung ist standardmig deaktiviert
SET IMPLICIT_TRANSACTIONS ON SET IMPLICIT_TRANSACTIONS ON

Das Festlegen von impliziten Transaktionen kann sinnvoll sein, wenn Anwendungen nach SQL Server migriert werden.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In den meisten Fllen sollten Transaktionen explizit mit der BEGIN TRANSACTION-Anweisung definiert werden. Allerdings kann fr Anwendungen, die ursprnglich auf anderen Systemen als SQL Server entwickelt wurden, die Verwendung der Option SET IMPLICIT_TRANSACTIONS sinnvoll sein. Sie legt den impliziten Transaktionsmodus fr eine Verbindung fest. Syntax SET IMPLICIT_TRANSACTIONS {ON OFF} Bercksichtigen Sie die folgenden Aspekte beim Festlegen von impliziten Transaktionen: Wenn der implizite Transaktionsmodus fr eine Verbindung aktiviert ist, lst die Ausfhrung einer der folgenden Anweisungen den Beginn einer Transaktion aus:
ALTER TABLE CREATE DELETE DROP FETCH GRANT INSERT OPEN REVOKE SELECT TRUNCATE TABLE UPDATE

Geschachtelte Transaktionen sind nicht zulssig. Befindet sich die Verbindung bereits in einer geffneten Transaktion, so starten diese Anweisungen keine neue Transaktion. Ist die Einstellung aktiviert, muss der Benutzer am Ende der Transaktion explizit einen Commit oder einen Rollback fr die Transaktion ausfhren. Andernfalls wird fr die Transaktion und alle Datennderungen ein Rollback ausgefhrt, wenn der Benutzer die Verbindung trennt. Die Einstellung ist standardmig deaktiviert.

12

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Einschrnkungen fr benutzerdefinierte Transaktionen


Verweisen Sie auf die Elemente, die nicht in benutzerdefinierten Transaktionen verwendet werden knnen.

Thema

Bestimmte Anweisungen drfen nicht eingeschlossen werden:


ALTER DATABASE BACKUP LOG CREATE DATABASE DROP DATABASE RECONFIGURE RESTORE DATABASE RESTORE LOG UPDATE STATISTICS

Einstieg

Fr benutzerdefinierte Transaktionen gelten einige Einschrnkungen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Fr benutzerdefinierte Transaktionen gelten einige Einschrnkungen: Bestimmte Anweisungen drfen nicht in eine explizite Transaktion eingeschlossen werden. Bei einigen Anweisungen handelt es sich z. B. um Vorgnge mit langer Ausfhrungszeit, die Sie wahrscheinlich nicht in einer Transaktion verwenden werden. Im Folgenden werden eingeschrnkte Anweisungen aufgefhrt: ALTER DATABASE BACKUP LOG CREATE DATABASE DROP DATABASE RECONFIGURE RESTORE DATABASE RESTORE LOG UPDATE STATISTICS

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

13

SQL Server-Sperren
Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

Durch Sperren verhinderte Parallelittsprobleme Ressourcen, die gesperrt werden knnen Sperrtypen Kompatibilitt von Sperren

In diesem Abschnitt werden folgende Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt werden neben Aspekten der Parallelitt auch die Ressourcen, die gesperrt werden knnen, die Typen von Sperren, mit denen diese Ressourcen belegt werden knnen, und die Mglichkeiten zum Kombinieren von Sperren behandelt.

14

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Durch Sperren verhinderte Parallelittsprobleme


Beschreiben Sie hufig auftretende Probleme im Zusammenhang mit der Parallelitt von Sperren.

Thema

Verlorene Aktualisierung Abhngigkeit von Daten, fr die kein Commit ausgefhrt wurde (Dirty Read) Inkonsistente Analyse (nicht wiederholbarer Lesevorgang) Lesen eines Phantoms

Einstieg

Sperren stellen eine sinnvolle Manahme dar, mit der die Transaktionsintegritt in folgenden Situationen sichergestellt werden kann...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sperren knnen folgende Situationen verhindern, die die Transaktionsintegritt gefhrden: Verlorene Aktualisierung Eine Aktualisierung kann verloren gehen, wenn eine Transaktion die nderungen einer anderen Transaktion berschreibt. So knnen z. B. zwei Benutzer die gleichen Daten aktualisieren, doch nur die letzte gespeicherte nderung wird in der Datenbank widergespiegelt. Abhngigkeit von Daten, fr die kein Commit ausgefhrt wurde (Dirty Read) Es kommt dann zu einer Abhngigkeit von Daten, fr die kein Commit ausgefhrt wurde, wenn eine Transaktion Daten einer anderen Transaktion liest und fr diese Daten kein Commit ausgefhrt wurde. Eine Transaktion bringt unter Umstnden nderungen mit sich, die auf ungenauen oder nicht vorhandenen Daten basieren. Inkonsistente Analyse (nicht wiederholbarer Lesevorgang) Eine inkonsistente Analyse wird durchgefhrt, wenn eine Transaktion die gleiche Zeile mehrmals liest und die Zeile zwischen den beiden (oder mehreren) Lesevorgngen von einer anderen Transaktion gendert wird. Da die Zeile zwischen Lesevorgngen innerhalb der gleichen Transaktion gendert wurde, fhrt jeder Lesevorgang zu anderen Werten und damit zu inkonsistenten Daten. Angenommen, ein Redakteur liest dasselbe Dokument zweimal, doch zwischen den einzelnen Lesedurchgngen schreibt der Verfasser das Dokument um. Wenn der Redakteur das Dokument zum zweiten Mal liest, unterscheidet es sich vollstndig von der ersten Version. Der ursprngliche Lesevorgang lsst sich nicht wiederholen, was zu Verwirrung fhrt. Es wre sinnvoller, wenn der Redakteur das Dokument erst dann liest, wenn der Verfasser den Schreibvorgang vollstndig beendet hat.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

15

Lesen eines Phantoms Phantome knnen auftreten, wenn Transaktionen nicht vollstndig voneinander getrennt sind. So knnten Sie z. B. eine Aktualisierung aller Datenstze in einem Bereich zur gleichen Zeit vornehmen, zu der eine andere Transaktion einen neuen Datensatz fr den Bereich einfgt. Wenn die Transaktion die Daten das nchste Mal liest, ist ein weiterer Datensatz vorhanden.

16

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Ressourcen, die gesperrt werden knnen


Listen Sie die Ressourcen auf, die von SQL Server gesperrt werden knnen.

Thema

Objekt RID Schlssel Seite Block Tabelle Datenbank

Beschreibung Zeilen-ID Zeilensperre innerhalb eines Indexes Eine Datenseite oder Indexseite Eine Gruppe von Daten- oder Indexseiten Eine vollstndige Tabelle Eine vollstndige Datenbank

Einstieg

Die Anzahl der Sperren muss auf die Datenmenge abgestimmt sein, die jede Sperre hlt.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Eine optimale Leistung wird erreicht, wenn die Anzahl der von SQL Server aufrechterhaltenen Sperren auf die Datenmenge abgestimmt ist, die jede Sperre hlt. Um die Sperrkosten auf ein Minimum zu reduzieren, sperrt SQL Server automatisch Ressourcen auf einer fr die Aufgabe geeigneten Ebene. SQL Server kann die folgenden Arten von Ressourcen sperren.
Objekt RID Schlssel Seite Block Tabelle Datenbank Beschreibung Eine Zeilen-ID, die verwendet wird, um eine einzelne Zeile in einer Tabelle zu sperren. Eine Zeilensperre innerhalb eines Indexes, die verwendet wird, um Schlsselbereiche in serialisierbaren Transaktionen zu schtzen. Eine Datenseite oder Indexseite mit 8 KB. Eine zusammenhngende Gruppe von Datenseiten oder Indexseiten, die whrend der Speicherreservierung verwendet wird. Eine vollstndige Tabelle mit smtlichen Daten und Indizes. Eine vollstndige Datenbank - wird whrend der Wiederherstellung einer Datenbank verwendet.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

17

Sperrtypen
Listen Sie die Sperrtypen auf.

Thema

Standardsperren
Gemeinsame Sperren Exklusive Sperren

Einstieg

SQL Server verfgt ber zwei Haupttypen von Sperren: Standardsperren und Sperren fr besondere Situationen.

Sperren fr besondere Situationen


Beabsichtigte Sperren Aktualisierungssperren Schemasperren Massenaktualisierungssperren

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server verfgt ber zwei Haupttypen von Sperren: Standardsperren und Sperren fr besondere Situationen.

Standardsperren
Im Allgemeinen erhalten Lesevorgnge gemeinsame Sperren und Schreibvorgnge exklusive Sperren.

Gemeinsame Sperren
SQL Server verwendet gemeinsame Sperren (Lesesperren) in der Regel fr Vorgnge, bei denen Daten weder gendert noch aktualisiert werden. Falls SQL Server eine Ressource mit einer gemeinsamen Sperre belegt hat, kann auch eine zweite Transaktion eine gemeinsame Sperre erhalten, selbst wenn die erste Transaktion noch nicht abgeschlossen ist. Bercksichtigen Sie die folgenden Aspekte in Bezug auf gemeinsame Sperren: Sie werden fr Nur-Lese-Vorgnge verwendet; Daten knnen nicht gendert werden. SQL Server hebt gemeinsame Sperren fr einen Datensatz auf, sobald der nchste Datensatz gelesen wird. Eine gemeinsame Sperre bleibt erhalten, bis alle Zeilen, die die Abfrage erfllen, an den Client zurckgegeben wurden.

18

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Exklusive Sperren
SQL Server verwendet exklusive Sperren (Schreibsperren) fr die Datennderungsanweisungen INSERT, UPDATE und DELETE. Bercksichtigen Sie die folgenden Aspekte in Bezug auf exklusive Sperren: Nur eine Transaktion kann eine exklusive Sperre fr eine Ressource erhalten. Eine Transaktion kann keine gemeinsame Sperre fr eine Ressource einrichten, die bereits mit einer exklusiven Sperre belegt wurde. Eine Transaktion kann erst dann eine exklusive Sperre einrichten, wenn alle gemeinsamen Sperren aufgehoben wurden.

Sperren fr besondere Situationen


Je nach Situation kann SQL Server auch andere Typen von Sperren verwenden:

Beabsichtigte Sperren
SQL Server verwendet beabsichtigte Sperren intern, um die Sperrkonflikte mglichst gering zu halten. Beabsichtigte Sperren richten eine Sperrhierarchie ein, sodass andere Transaktionen keine Sperren auf hheren Ebenen einrichten knnen. Wenn z. B. eine Transaktion eine exklusive Sperre auf Zeilenebene fr einen bestimmten Kundendatensatz eingerichtet hat, verhindert die beabsichtigte Sperre, dass eine andere Transaktion eine exklusive Sperre auf Tabellenebene einrichtet. Zu den beabsichtigten Sperren gehren beabsichtigte gemeinsame Sperren (Intent Shared, IS), beabsichtigte exklusive Sperren (Intent Exclusive, IX) und gemeinsame mit beabsichtigten exklusiven Sperren (Shared With Intent Exclusive, SIX).

Aktualisierungssperren
SQL Server verwendet Aktualisierungssperren, wenn eine Seite zu einem spteren Zeitpunkt gendert werden soll. Bevor die Seite gendert wird, stuft SQL Server die Aktualisierungssperre fr die Seite auf eine exklusive Seitensperre herauf, um Sperrkonflikte zu verhindern. Bercksichtigen Sie die folgenden Aspekte in Bezug auf Aktualisierungssperren. Fr Aktualisierungssperren gilt Folgendes: Aktualisierungssperren werden zu Beginn eines Aktualisierungsvorgangs beim ersten Einlesen der Seiten eingerichtet. Aktualisierungssperren sind mit gemeinsamen Sperren kompatibel.

Schemasperren
Schemasperren stellen sicher, dass eine Tabelle oder ein Index nicht gelscht bzw. das zugehrige Schema nicht gendert wird, falls eine andere Sitzung auf die Tabelle oder den Index verweist. In SQL Server stehen zwei Arten von Schemasperren zur Verfgung: Schemastabilitt (Schema Stability, Sch-S), die sicherstellt, dass eine Ressource nicht gelscht wird. Schemanderung (Schema Modification, Sch-M), die sicherstellt, dass keine anderen Sitzungen auf eine Ressource verweisen, die gerade gendert wird.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

19

Massenaktualisierungssperren
Massenaktualisierungssperren ermglichen das parallele Massenkopieren von Daten in dieselbe Tabelle, whrend verhindert wird, dass andere Prozesse, die keine Massenkopien von Daten durchfhren, auf die Tabelle zugreifen. SQL Server verwendet Massenaktualisierungssperren, wenn folgende Optionen angegeben werden: Der TABLOCK-Hinweis oder die Option table lock on bulk load, die mit Hilfe der gespeicherten Systemprozedur sp_tableoption festgelegt wird.

20

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Kompatibilitt von Sperren


Thema
Erlutern Sie, welche Sperren miteinander kompatibel sind.

Sperren knnen mit anderen Sperren kompatibel sein Beispiele


Gemeinsame Sperren sind mit allen Sperren auer exklusiven Sperren kompatibel Exklusive Sperren sind mit allen anderen Sperren nicht kompatibel Aktualisierungssperren sind nur mit gemeinsamen Sperren kompatibel

Einstieg

Sperren knnen mit anderen Sperren kompatibel sein.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sperren knnen mit anderen Sperren kompatibel sein. Sperren verfgen ber eine Kompatibilittsmatrix, die anzeigt, welche Sperren mit anderen Sperren, die fr dieselbe Ressource eingerichtet werden, kompatibel sind. Die Sperren in der folgenden Tabelle werden beginnend bei der Sperre mit den geringsten Einschrnkungen (gemeinsam) bis zu den Sperren mit den meisten Einschrnkungen (exklusiv) aufgelistet. Methodischer Hinweis
Stellen Sie anhand der Beispiele auf der Folie die Sperrmatrix vor. Angeforderte Sperre Beabsichtigte gemeinsame Sperre (Intent Shared, IS) Gemeinsame Sperre (Shared, S) Aktualisierungssperre (Update, U) Beabsichtigte exklusive Sperre (Intent Exclusive, IX) Gemeinsame Sperre mit beabsichtigter exklusiver Sperre (Shared With Intent Exclusive, SIX) Exclusive Sperre (Exclusive, X) Vorhandene erteilte Sperre IS Ja S Ja U Ja IX Ja SIX Ja X Nein

Ja Ja Ja

Ja Ja Nein

Ja Nein Nein

Nein Nein Ja

Nein Nein Nein

Nein Nein Nein

Ja

Nein

Nein

Nein

Nein

Nein

Nein

Nein

Nein

Nein

Nein

Nein

Anmerkung Eine Sperre des Typs IX ist mit einer anderen Sperre des Typs IX kompatibel, da IX nur die Absicht zur Aktualisierung einiger Zeilen anstatt aller Zeilen anzeigt.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

21

Die Kompatibilitt fr Schemasperren stellt sich auerdem wie folgt dar: Sperren des Typs Sch-M (Schemanderung) sind mit allen Sperren inkompatibel. Die Sperre des Typs Sch-S (Schemastabilitt) ist mit allen Sperren mit Ausnahme der Sperre des Typs Sch-M (Schemanderung) kompatibel.

22

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Verwalten von Sperren


Geben Sie eine bersicht ber dieses Thema.

Thema

Einstieg

Sperroptionen auf Sitzungsebene Dynamische Sperrenarchitektur Sperroptionen auf Tabellenebene Deadlocks Anzeigen von Sperrinformationen

In diesem Abschnitt werden folgende Themen behandelt...

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt werden Sperroptionen beschrieben, die Sie auf der Sitzungs- und Tabellenebene angeben knnen. Auerdem wird in dem Abschnitt erlutert, wie SQL Server mit Deadlocks umgeht und wie Sie Informationen zu Sperren anzeigen knnen.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

23

Sperroptionen auf Sitzungsebene


Thema
Geben Sie eine Einfhrung in die Transaktionsisolationsstufe.

Transaktionsisolationsstufe
READ COMMITTED (Standard) READ UNCOMMITTED REPEATABLE READ SERIALIZABLE

Einstieg

SQL Server ermglicht es Ihnen, Sperroptionen auf der Sitzungsebene zu steuern.

Sperrtimeout
Begrenzt den Zeitraum in dem auf eine gesperrte Ressource gewartet wird Verwenden Sie SET LOCK_TIMEOUT

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server ermglicht es Ihnen, Sperroptionen auf der Sitzungsebene zu steuern, indem die Transaktionsisolationsstufe festgelegt wird.

Transaktionsisolationsstufe
Eine Isolationsstufe schtzt eine angegebene Transaktion vor anderen Transaktionen. Die Transaktionsisolationsstufe ermglicht Ihnen das Festlegen der Isolationsstufe fr alle Transaktionen whrend einer Sitzung. Beim Festlegen der Isolationsstufe geben Sie das Standardsperrverhalten fr alle Anweisungen in der Sitzung an. Durch das Festlegen von Isolationsstufen fr Transaktionen mssen Programmierer zwar ein erhhtes Risiko in Bezug auf Integrittsprobleme hinnehmen, knnen jedoch eine Ausweitung des gleichzeitigen Zugriffs auf Daten ermglichen. Je hher die Isolationsstufe ist, desto lnger werden Sperren aufrechterhalten und desto mehr Einschrnkung gelten fr die Sperren. Eine Isolationsstufe auf Sitzungsebene kann mit Hilfe einer Sperrspezifikation in einzelnen Anweisungen berschrieben werden. Mit Hilfe der DBCC USEROPTIONS-Anweisung knnen Sie auerdem eine Transaktionsisolation fr eine Anweisung angeben.

24

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Syntax

SET TRANSACTION ISOLATION LEVEL {READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE} In der folgenden Tabelle werden die Sperroptionen auf Isolationsstufe beschrieben.
Option READ COMMITTED Beschreibung Weist SQL Server an, whrend Lesevorgngen gemeinsame Sperren zu verwenden. Auf dieser Ebene treten keine Dirty Reads auf. Weist SQL Server an, keine gemeinsamen Sperren auszugeben und exklusive Sperren nicht anzuerkennen. Dirty Reads knnen auftreten. Zeigt an, dass weder Dirty Reads noch wiederholte Lesevorgnge auftreten knnen. Lesesperren werden bis zum Ende der Transaktion aufrechterhalten. Verhindert, dass andere Benutzer neue Zeilen aktualisieren oder einfgen, die mit den Kriterien in der WHERE-Klausel der Transaktion bereinstimmen. Phantome sind nicht mglich.

READ UNCOMMITTED REPEATABLE READ

SERIALIZABLE

Beispiel

Im folgenden Beispiel wird die Isolationsstufe fr die aktuelle Sitzung auf READ UNCOMMITTED festgelegt und anschlieend DBCC USEROPTIONS berprft, um festzustellen, ob SQL Server die nderung vorgenommen hat.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED DBCC USEROPTIONS

Ergebnis

set option textsize language dateformat datefirst . . . isolation level (13 row(s) affected)

value 64512 deutsch dmy 7

read uncommitted

Anmerkung Bei Ausfhrung von DBCC wird immer folgende Meldung ausgegeben:
DBCC-Ausfhrung abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich bitte an den Systemadministrator.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

25

Methodischer Hinweis

Sperrtimeout
Mit der Option SET LOCK_TIMEOUT kann die maximale Zeit festgelegt werden, die SQL Server eine Transaktion auf die Freigabe einer blockierten Ressource warten lsst. SET LOCK_TIMEOUT timeout_period timeout_period entspricht der Anzahl von Millisekunden, die verstreichen, bevor SQL Server einen Sperrfehler zurckgibt. Der Wert -1 (Standardwert) zeigt an, dass kein Timeoutzeitraum festgelegt wurde. Wird der Wert gendert, gilt die neue Einstellung danach fr den Rest der Sitzung.

Fhren Sie Sperrtimeouts mit Hilfe mehrerer Abfragefenster vor.

Syntax

Beispiel

Dieses Beispiel legt den Zeitraum fr das Sperrtimeout auf 180.000 Millisekunden fest.
SET LOCK_TIMEOUT 180000

Wenn Sie den aktuellen Sitzungswert ermitteln mchten, fragen Sie die globale Variable @@lock_timeout ab. Beispiel Dieses Beispiel zeigt die aktuelle @@lock_timeout-Einstellung an.
SELECT @@lock_timeout

Ergebnis

180000 (1 row(s) affected)

26

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Dynamische Sperrenarchitektur
Fhren Sie vor, wie die kostengnstigsten Sperren ermittelt werden.

Thema

Dynamische Sperren

Einstieg

Die dynamische Sperrenarchitektur hilft dabei, die kostengnstigsten Sperren zu ermitteln.

Kosten

Zeile

Seite Granularitt

Tabelle

Sperrkosten Parallelittskosten

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** SQL Server verwendet eine dynamische Sperrenarchitektur, um die kostengnstigsten Sperren zu ermitteln. Wird eine Abfrage ausgefhrt, wird automatisch ermittelt, welche Sperren im Hinblick auf die Merkmale des Schemas und der Abfrage am sinnvollsten sind. SQL Server erhht bzw. verringert dynamisch die Granularitt und die Anzahl der Sperrtypen. Der Abfrageoptimierer whlt normalerweise die richtige Granularitt der Sperre, wenn der Ausfhrungsplan kompiliert wird, sodass es nur noch selten notwendig ist, Sperren auszuweiten. Wenn eine Aktualisierung z. B. eine groe Anzahl von Zeilensperren aktiviert und einen signifikanten Prozentsatz einer Tabelle gesperrt hat, werden die Zeilensperren zu einer Tabellensperre ausgeweitet. Die Transaktion erhlt in diesem Fall die Zeilensperren aufrecht, sodass der Verwaltungsaufwand fr Sperren verringert wird. Das dynamische Sperren bietet die folgenden Vorteile: Vereinfachte Datenbankverwaltung, da sich Datenbankadministratoren nicht mehr mit dem Anpassen von Schwellenwerten fr Sperrausweitungen beschftigen mssen Hhere Leistung, da SQL Server den Systemverwaltungsaufwand auf ein Minimum reduziert, indem Sperren verwendet werden, die auf den jeweiligen Task abgestimmt sind

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

27

Sperroptionen auf Tabellenebene


Geben Sie eine Einfhrung in die Sperroptionen auf Tabellenebene.

Thema

Sollten mit Vorsicht verwendet werden Sie knnen eine oder mehrere Sperroptionen fr eine Tabelle angeben Verwenden Sie den optimizer_hints-Teil der FROMKlausel in einer SELECT- oder UPDATE-Anweisung Setzen Sperroptionen auf Sitzungsebene auer Kraft

Einstieg

Im Normalfall sollten Sie keine Sperroption auf Tabellenebene angeben.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Auch wenn SQL Server die dynamische Sperrenarchitektur verwendet, um die am besten geeignete Sperre fr den jeweiligen Client auszuwhlen, ist es mglich, Sperroptionen auf Tabellenebene anzugeben. Ein Tabellenhinweis kann eine Sperrmethode fr den Abfrageoptimierer bezglich einer bestimmten Tabelle und fr eine Anweisung angeben. Anmerkung Verwenden Sie nur dann Sperroptionen auf Tabellenebene, wenn Sie genau verstanden haben, wie Ihre Anwendung funktioniert, und wenn Sie ermittelt haben, dass die angeforderte Sperre auch noch nach einer gewissen Zeit derjenigen vorzuziehen ist, die SQL Server verwenden wrde. Sperroptionen auf Tabellenebene weisen folgende Merkmale auf: Sie knnen eine oder mehrere Sperroptionen fr eine Tabelle angeben. Verwenden Sie den optimizer_hints-Teil der FROM-Klausel in einer SELECT- oder UPDATE-Anweisung. Die Sperroptionen auf Tabellenebene setzen entsprechende Optionen auf Sitzungsebene (Transaktionsisolationsstufe) auer Kraft, die zuvor mit der SET-Anweisung angegeben wurden.

28

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

In der folgenden Tabelle werden die Sperroptionen auf Tabellenebene beschrieben.


Option HOLDLOCK SERIALIZABLE REPEATABLEREAD READCOMMITTED READUNCOMMITTED NOLOCK ROWLOCK PAGLOCK TABLOCK TABLOCKX READPAST UPDLOCK Beschreibung Steuern das Sperrverhalten fr eine Tabelle und setzen die Sperren auer Kraft, mit denen die Isolationsstufe der aktuellen Transaktion erzwungen wrde.

Geben die Gre und den Typ der Sperren an, die fr diese Tabelle verwendet werden sollen.

berspringt gesperrte Zeilen. Verwendet Aktualisierungssperren anstelle von gemeinsamen Sperren.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

29

Deadlocks
Erlutern Sie, wie und warum ein Deadlock auftreten kann.

Thema

Einstieg

Ein Deadlock tritt auf, wenn zwei Transaktionen separate Objekte mit Sperren belegt haben und jede Transaktion eine Sperre fr das Objekt der anderen Transaktion anfordert.

Wie SQL Server einen Deadlock beendet Wie das Auftreten von Deadlocks eingeschrnkt wird Wie die Einstellung fr das Sperrtimeout angepasst wird

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis Ein Deadlock tritt auf, wenn zwei Transaktionen separate Objekte mit Sperren belegt haben und jede Transaktion eine Sperre fr das Objekt der anderen Transaktion anfordert. Jede Transaktion muss warten, bis die andere Transaktion die Sperre aufgehoben hat. Ein Deadlock kann auch dann auftreten, wenn mehrere lang andauernde Transaktionen gleichzeitig in derselben Datenbank ausgefhrt werden. Ein Deadlock kann auch aufgrund der Reihenfolge auftreten, in der der Optimierer eine komplexe Abfrage, wie z. B. eine Verknpfung, verarbeitet, bei der sich die Reihenfolge der Verarbeitung nicht unbedingt steuern lsst.

Gehen Sie auf den Unterschied zwischen Deadlocks und blockierenden Sperren ein.

Wie SQL Server einen Deadlock beendet


SQL Server beendet einen Deadlock, indem eine der Transaktionen automatisch beendet wird. In der folgenden Liste ist der von SQL Server verwendete Vorgang angegeben. 1. Ausfhren eines Rollbacks fr die Transaktion des Deadlockopfers. Im Falle eines Deadlocks rumt SQL Server der Transaktion Prioritt ein, die die lngste Verarbeitungszeit aufweist; diese Transaktion wird fortgesetzt. Fr die Transaktion mit der geringsten Verarbeitungsdauer fhrt SQL Server dagegen einen Rollback durch. 2. Die Anwendung des Deadlockopfers wird benachrichtigt (mit Meldung Nummer 1205). 3. Die aktuelle Anforderung des Deadlockopfers wird abgebrochen.

30

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

4. Die anderen Transaktionen drfen fortgesetzt werden. Wichtig In einer Mehrbenutzerumgebung sollte jeder Client in regelmigen Abstnden nach Meldung Nummer 1205 suchen. Diese Meldung zeigt an, dass fr eine Transaktion ein Rollback ausgefhrt wurde. Falls Meldung 1205 gefunden wird, sollte die Anwendung erneut versuchen, die Transaktion auszufhren.

Wie das Auftreten von Deadlocks eingeschrnkt wird


Auch wenn es nicht mglich ist, Deadlocks ganz zu verhindern, knnen Sie doch das Risiko eines Deadlocks verringern, indem Sie folgende Richtlinien beachten: Verwenden Sie Ressourcen in allen Transaktionen in der gleichen Reihenfolge. So sollten Sie z. B. in allen Transaktionen, die auf mehrere Tabellen verweisen, nach Mglichkeit in der gleichen Reihenfolge auf die Tabellen verweisen. Verkrzen Sie Transaktionen, indem Sie die Anzahl der Schritte mglichst gering halten. Verkrzen Sie die Transaktionszeiten, indem Sie Abfragen vermeiden, die sich auf zahlreiche Zeilen beziehen.

Wie die Einstellung fr das Sperrtimeout angepasst wird


Wenn eine Transaktion beim Warten auf eine Ressource gesperrt wird und deshalb ein Deadlock auftritt, beendet SQL Server eine der beteiligten Transaktionen ohne Timeout. Wenn kein Deadlock auftritt, blockiert SQL Server die Transaktion, die die Sperre anfordert, so lange, bis die andere Transaktion die Sperre aufhebt. Standardmig gibt es keine obligatorische Timeoutzeitspanne, die von SQL Server berprft wird. Es gibt nur eine Mglichkeit zu testen, ob eine Ressource, die Sie sperren mchten, bereits gesperrt ist: Wenn versucht wird, auf die Daten zuzugreifen, kann dies dazu fhren, dass die Daten auf unbestimmte Zeit gesperrt werden. Mit Hilfe der LOCK_TIMEOUT-Einstellung kann eine Anwendung eine Hchstdauer festlegen, die angibt, wie lange eine Anweisung auf eine blockierte Ressource wartet, bis die blockierte Anweisung automatisch abgebrochen wird. Der Abbruch fhrt nicht dazu, dass ein Rollback fr die Transaktion ausgefhrt oder die Transaktion abgebrochen wird. Die Anwendung muss den Fehler auffangen, um auf die Timeoutsituation zu reagieren und Abhilfemanahmen zu ergreifen, z. B. indem die Transaktion erneut abgesendet oder ein Rollback fr die Transaktion ausgefhrt wird. Der KILL-Befehl beendet einen Benutzerprozess basierend auf der Systemprozess-ID (SPID).

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

31

Anzeigen von Sperrinformationen


Gehen Sie auf die verschiedenen Informationen ein, die zu aktiven Sperren angezeigt werden knnen.

Thema

Das Fenster Aktuelle Aktivitt Gespeicherte Systemprozedur sp_lock SQL Profiler Systemmonitor von Windows 2000 Weitere Informationen

Einstieg

Fhren Sie die gespeicherte Systemprozedur sp_lock aus, um einen Bericht zu den aktiven Sperren anzuzeigen.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Methodischer Hinweis In der Regel verwenden Sie SQL Server Enterprise Manager oder die gespeicherte Systemprozedur sp_lock zum Anzeigen eines Berichts ber die aktiven Sperren. Mit Hilfe von SQL Profiler knnen Sie Informationen zu einer bestimmten Gruppe von Transaktionen abrufen. Sie knnen auch Systemmonitor von Microsoft Windows 2000 verwenden, um Sperrverlufe von SQL Server anzuzeigen.

Zeigen Sie den Kursteilnehmern das Fenster Aktuelle Aktivitt in SQL Server Enterprise Manager und SQL Profiler.

Das Fenster Aktuelle Aktivitt


Das Fenster Aktuelle Aktivitt in SQL Server Enterprise Manager zeigt Informationen zu der derzeit bestehenden Sperraktivitt an. Sie knnen die Serveraktivitt pro Benutzer, die Detailaktivitt pro Verbindung und Sperrinformationen pro Objekt anzeigen.

Gespeicherte Systemprozedur sp_lock


Die gespeicherte Systemprozedur sp_lock gibt Informationen zu aktiven Sperren in SQL Server zurck. Syntax Ergebnis EXECUTE sp_lock Ein typisches Resultset sieht hnlich wie das folgende Resultset aus.
spid dbid 12 12 12 12 12 12 12 13 5 5 2 5 5 1 5 1 ObjId 0 0 0 0 981578535 5575058 981578535 0 IndId 0 0 0 0 0 0 0 0 Type DB DB EXT PAG RID TAB TAB DB Resource Mode S S X IX X IS IX S Status GRANT GRANT GRANT GRANT GRANT GRANT GRANT GRANT

1:280 1:528 1:528:0

Die ersten vier Spalten beziehen sich auf verschiedene IDs: Serverprozess-ID (SPID), Datenbank-ID (DBID), Objekt-ID (OBJID) und die Index-ID (INDID).

32

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

Die Type-Spalte zeigt den Typ der derzeit gesperrten Ressource an. Zu den Ressourcentypen gehren die folgenden: DB (Datenbank), Block (Extent, EXT), Tabelle (Table, TAB), Schlssel (Key, KEY), Seite (Page, PAG) und Zeilen-ID (Row Identifier, RID). In der Resource-Spalte sind Informationen zum gesperrten Ressourcentyp enthalten. Eine Ressourcenbeschreibung von 1:528:0 zeigt an, dass Zeile Nummer 0 auf Seite Nummer 528 in Datei 1 mit einer Sperre belegt wurde. In der Mode-Spalte wird der Sperrentyp beschrieben, der auf die Ressource angewendet wird. Zu den Sperrentypen gehren die folgenden: Gemeinsam (Shared, S), Exklusiv (X), Beabsichtigt (Intent, I), Aktualisierung (Update, U) oder Schema (Sch). In der Status-Spalte wird angezeigt, ob die Sperre erteilt wurde (GRANT), wegen eines anderen Vorgangs blockiert ist (WAIT) oder zu einer anderen Sperre konvertiert wird (CNVRT).

SQL Profiler
SQL Profiler ist ein Tool zum berwachen der Serveraktivitten. Sie knnen Informationen zu einer Vielzahl von Ereignissen sammeln, indem Sie Ablaufverfolgungen erstellen, die ein detailliertes Profil von Serverereignissen liefern. Mit diesem Profil knnen Probleme mit Serverressourcen analysiert und gelst, Anmeldeversuche und Verbindungen berwacht und Deadlockprobleme behoben werden.

Systemmonitor von Windows 2000


SQL Server-Sperrinformationen knnen mit Systemmonitor angezeigt werden. Verwenden Sie die Objekte SQL Server:Speicher-Manager und SQL Server:Sperren.

Weitere Informationen
Wenn Sie Informationen zu Sperren und zur aktuellen Serveraktivitt abrufen mchten, knnen Sie die Systemtabellen syslockinfo, sysprocesses, sysobjects und syslogins abfragen oder die gespeicherte Systemprozedur sp_who ausfhren.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

33

Empfohlene Methoden
Listen Sie die empfohlenen Methoden zum Verwalten von Transaktionen und Sperren auf.

Thema

Halten Sie Transaktionen so kurz wie mglich Halten Sie Transaktionen so kurz wie mglich Entwerfen Sie Transaktionen so, dass mglichst wenig Deadlocks Entwerfen Sie Transaktionen so, dass mglichst wenig Deadlocks auftreten knnen auftreten knnen Verwenden Sie die SQL Server-Standardeinstellungen fr Sperren Verwenden Sie die SQL Server-Standardeinstellungen fr Sperren Gehen Sie bei der Verwendung von Sperroptionen mit besonderer Gehen Sie bei der Verwendung von Sperroptionen mit besonderer Vorsicht vor Vorsicht vor

Einstieg

Verwenden Sie die folgenden empfohlenen Methoden zum Verwalten von Transaktionen und Sperren.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Sie sollten die folgenden empfohlenen Methoden beim Verwalten von Transaktionen und Sperren beachten: Halten Sie Transaktionen so kurz wie mglich. Dies verringert die Wahrscheinlichkeit von Sperrkonflikten mit anderen Transaktionen. Eine Transaktion sollte nie krzer als eine logische Arbeitseinheit sein. Entwerfen Sie Transaktionen so, dass mglichst wenig Deadlocks auftreten knnen, sodass Transaktionen nicht erneut gesendet werden mssen. Verwenden Sie die SQL Server-Standardeinstellungen fr Sperren, da der Optimierer im Allgemeinen die besten Sperren auf Basis der jeweiligen Transaktion und anderer Aktivitten in der Datenbank verwendet. Gehen Sie bei der Verwendung von Sperroptionen mit besonderer Vorsicht vor, und testen Sie die Transaktionen, um sicherzustellen, dass die gewhlten Sperren besser sind als die Standardsperren von SQL Server.

34

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

bungseinheit A: Verwalten von Transaktionen und Sperren


Geben Sie eine Einfhrung in die bungseinheit.

Thema

Einstieg

In dieser bungseinheit fhren Sie Transaktionen aus, legen Sperroptionen fest und zeigen Sperrergebnisse an.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Erlutern Sie die Lernziele der bungseinheit.

Lernziele
Am Ende dieser bungseinheit werden Sie in der Lage sein, die folgenden Aufgaben auszufhren: Definieren von Transaktionen mit den BEGIN TRANSACTION- und COMMIT TRANSACTION-Anweisungen. Ermitteln der Anzahl der aktiven Transaktionen durch Abfragen der globalen Variablen @@trancount. Verwenden der gespeicherten Systemprozedur sp_lock und SQL Server Enterprise Manager zum Anzeigen von Sperrinformationen. Verwenden der SET TRANSACTION ISOLATION LEVEL-Anweisung zum Steuern des Sperrverhaltens auf Sitzungsebene. Verwenden von Sperroptionen auf Tabellenebene zum Steuern des Sperrverhaltens fr bestimmte Tabellen. Verwenden der SET LOCK_TIMEOUT-Anweisung zum Steuern der maximalen Zeit, die eine Anweisung auf die Aufhebung einer Sperre wartet.

Voraussetzungen
Um diese bungseinheit zu bearbeiten, bentigen Sie Folgendes: Die Skriptdateien fr diese bungseinheit, die sich in C:\Moc\2328A\Labfiles\L15 befinden.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

35

Einrichten der bungseinheit


Um diese bungseinheit zu bearbeiten, ist eine der folgenden Aktionen erforderlich: Bearbeiten der vorherigen bungseinheit. Ausfhren der Batchdatei C:\Moc\2328A\Batches\Restore15.cmd. Mit dieser Befehlsdatei wird die ClassNorthwind-Datenbank wieder in den Zustand zurckversetzt, der fr diese bungseinheit erforderlich ist.

Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage. Darber hinaus knnen Sie noch die folgenden Ressourcen verwenden: Das Northwind-Datenbankschema. Die Microsoft SQL Server-Onlinedokumentation.

Szenario
Der Aufbau des Schulungsraumes soll die Organisation des weltweit agierenden Handelsunternehmens Northwind Traders widerspiegeln. Das Unternehmen hat den fiktiven Domnennamen nwtraders.msft. Der primre DNS-Server fr nwtraders.msft ist der Kursleitercomputer, dessen IP-Adresse (Internetprotokoll) 192.168.x.200 lautet (wobei x die zugewiesene Schulungsraumnummer ist). Der Name des Kursleitercomputers ist London. Die folgende Tabelle stellt den Benutzernamen, den Computernamen und die IP-Adresse fr jeden Kursteilnehmercomputer in der fiktiven Domne nwtraders.msft bereit. Suchen Sie den Ihrem Computer zugewiesenen Benutzernamen und notieren Sie ihn.
Benutzername SQLAdmin1 SQLAdmin2 SQLAdmin3 SQLAdmin4 SQLAdmin5 SQLAdmin6 SQLAdmin7 SQLAdmin8 SQLAdmin9 SQLAdmin10 SQLAdmin11 SQLAdmin12 SQLAdmin13 SQLAdmin14 SQLAdmin15 SQLAdmin16 Computername Vancouver Denver Perth Brisbane Lisbon Bonn Lima Santiago Bangalore Singapore Casablanca Tunis Acapulco Miami Auckland Suva IP-Adresse 192.168.x.1 192.168.x.2 192.168.x.3 192.168.x.4 192.168.x.5 192.168.x.6 192.168.x.7 192.168.x.8 192.168.x.9 192.168.x.10 192.168.x.11 192.168.x.12 192.168.x.13 192.168.x.14 192.168.x.15 192.168.x.16

36

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren (Fortsetzung) Benutzername SQLAdmin17 SQLAdmin18 SQLAdmin19 SQLAdmin20 SQLAdmin21 SQLAdmin22 SQLAdmin23 SQLAdmin24 Computername Stockholm Moscow Caracas Montevideo Manila Tokyo Khartoum Nairobi IP-Adresse 192.168.x.17 192.168.x.18 192.168.x.19 192.168.x.20 192.168.x.21 192.168.x.22 192.168.x.23 192.168.x.24

Veranschlagte Zeit fr die bungseinheit: 60 Minuten

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

37

bung 1 Erstellen und Ausfhren einer Transaktion


In dieser bung werden Sie die BEGIN TRANSACTION- und ROLLBACK TRANSACTION-Anweisungen verwenden, um zu sehen, welche Auswirkungen Anweisungen auf die nderung von Daten haben. Auerdem wird gezeigt, wie SQL Server mit Hilfe der globalen Variablen @@trancount ermittelt, ob eine Transaktion aktiv ist. So erstellen Sie eine Transaktion und fhren sie aus In diesem Verfahren steuern Sie mit Hilfe der Anweisungen BEGIN TRANSACTION und ROLLBACK TRANSACTION, wie eine UPDATEAnweisung in der Customers-Tabelle verarbeitet wird. 1. Melden Sie sich an der Schulungsraumdomne nwtraders mit Hilfe der Informationen in der folgenden Tabelle an.
Option Benutzername Eingabe SQLAdminx (wobei x die Ihrem Computernamen zugewiesene Nummer ist, wie in der Schulungsraumdomne nwtraders.msft festgelegt) password

Kennwort

2. ffnen Sie SQL Query Analyzer, und melden Sie sich, wenn Sie dazu aufgefordert werden, mittels Microsoft Windows-Authentifizierung am (lokalen) Server an. Sie verfgen ber die Berechtigung, sich bei SQL Server anzumelden und SQL Server zu verwalten, da Sie als SQLAdminx angemeldet sind und SQLAdminx ein Mitglied der lokalen Windows 2000-Gruppe Administratoren ist. Alle Mitglieder dieser Gruppe werden automatisch der sysadmin-Rolle von SQL Server zugeordnet. 3. Klicken Sie in der Liste DB auf ClassNorthwind. 4. ffnen Sie C:\Moc\2328A\Labfiles\L15\Tran1.sql, und gehen Sie den Inhalt der Datei durch. Beachten Sie dabei bitte, dass nach der BEGIN TRAN-Anweisung eine UPDATE-Anweisung eingefgt wurde, jedoch keine entsprechende COMMIT TRAN- oder ROLLBACK TRAN-Anweisung vorhanden ist. Die Anweisungen SELECT und PRINT und die globale Variable @@trancount im Skript sollen den Verarbeitungsfortschritt der Transaktion anzeigen.

38

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

5. Fhren Sie das Skript aus, und sehen Sie sich die Ergebnisse an. Wird zu diesem Zeitpunkt fr die mit der UPDATE-Anweisung vorgenommenen nderungen ein Commit in der Transaktion ausgefhrt? Wie knnen Sie dabei vorgehen? Nein, die Transaktion muss mit einer COMMIT TRAN-Anweisung abgeschlossen werden. Die Transaktion ist noch aktiv und hlt weiterhin alle Sperren aufrecht, die sie abgerufen hat. Die globale Variable @@trancount hat den Wert 1, der anzeigt, dass eine BEGIN TRAN-Anweisung in der Sitzung verwendet wurde. ____________________________________________________________ ____________________________________________________________ Knnten andere Transaktionen die genderten Daten abfragen oder aktualisieren? Andere Transaktionen knnen die genderten Daten erst dann abfragen oder ndern, wenn fr die Transaktion ein Commit (oder Rollback) ausgefhrt wurde. ____________________________________________________________ ____________________________________________________________ 6. Geben Sie eine COMMIT TRANSACTION-Anweisung im Abfragefenster ein. Markieren Sie dann die Anweisung, fhren Sie die Anweisung aus, um die Transaktion abzuschlieen und die nderung dauerhaft zu besttigen. 7. Markieren Sie eine der SELECT-Anweisungen fr die Customers-Tabelle, und fhren Sie die Anweisung aus, um zu berprfen, ob die nderung abgeschlossen wurde.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

39

bung 2 Ausfhren eines Rollbacks fr eine Transaktion


In dieser bung werden Sie die Anweisung ROLLBACK TRANSACTION verwenden, um zu sehen, welche Auswirkungen Anweisungen auf die nderung von Daten innerhalb einer Transaktion haben. So verwenden Sie die ROLLBACK TRANSACTION-Anweisung In diesem Verfahren steuern Sie mit den Anweisungen BEGIN TRANSACTION und ROLLBACK TRANSACTION, wie eine UPDATEAnweisung in der member-Tabelle verarbeitet wird. 1. ffnen Sie C:\Moc\2328A\Labfiles\L15\Tran2.sql, und gehen Sie den Inhalt der Datei durch. Das Skript hnelt zwar Tran1.sql; aber der Name der Kontaktperson lautet anders, und eine ROLLBACK TRAN-Anweisung wurde hinzugefgt. 2. Fhren Sie das Skript aus, und sehen Sie sich die Ergebnisse an. Wird die von der UPDATE-Anweisung vorgenommene nderung permanent in der Datenbank gespeichert? Nein. Fr die Transaktion wurde ein Rollback ausgefhrt, sodass alle whrend der Transaktion vorgenommenen nderungen rckgngig gemacht werden. ____________________________________________________________ ____________________________________________________________ Ist die Transaktion abgeschlossen? Ja. Die ROLLBACK TRAN-Anweisung schliet die Transaktion ab und hebt alle Sperren auf, die die Transaktion angefordert hat. Die Abfrage der globalen Variablen @@trancount gibt den Wert NULL zurck. ____________________________________________________________ ____________________________________________________________

40

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

bung 3 Anzeigen von Sperrinformationen


In dieser bung fhren Sie mehrere Transaktionen gleichzeitig aus, um zu ermitteln, welche Auswirkungen eine solche Aktivitt auf die Sperren hat. Sie werden mehrere Verbindungen mit SQL Query Analyzer herstellen, um mehrere Benutzer zu simulieren, die Transaktionen an SQL Server senden. Die fr die bung verwendeten Skripts enthalten nicht immer COMMIT TRAN- oder ROLLBACK TRAN-Anweisungen. Das Fehlen dieser Anweisungen hlt die Transaktionen aufrecht und die zugehrigen Sperren aktiv, sodass Sie die Sperrinformationen anzeigen knnen. So zeigen Sie Sperrinformationen an In diesem Verfahren steuern Sie mit Hilfe der BEGIN TRANSACTION-Anweisung und der ROLLBACK TRANSACTION-Anweisung, wie eine UPDATE-Anweisung in der Customers-Tabelle verarbeitet wird. 1. Starten Sie SQL Query Analyzer (Verbindung 1), und klicken Sie auf das Symbol Fenster lschen. 2. Fhren Sie die gespeicherte Systemprozedur sp_lock aus, und sehen Sie sich die Ausgabe an. 3. Starten Sie SQL Server Enterprise Manager. 4. Erweitern Sie in SQL Server Enterprise Manager in der Konsolenstruktur Ihren Server, erweitern Sie Verwaltung und anschlieend Aktuelle Aktivitt. Sehen Sie sich die unter Prozessinfo, Sperren / Prozess-ID und Sperren / Objekte angezeigten Informationen an. 5. Stellen Sie eine zweite Verbindung mit SQL Query Analyzer her (Verbindung 2), und klicken Sie dann in der Liste DB auf ClassNorthwind. 6. ffnen Sie C:\Moc\2328A\Labfiles\L15\Lock1.sql mit Hilfe der Verbindung 2, und gehen Sie den Inhalt der Datei durch. Beachten Sie, dass die Transaktion mit der BEGIN TRAN-Anweisung gestartet wurde, jedoch eine entsprechende COMMIT TRAN- oder ROLLBACK TRAN-Anweisung zum Beenden der Transaktion nicht vorhanden ist. 7. Fhren Sie \Lock1.sql mit Verbindung 2 aus, und sehen Sie sich die Ergebnisse an. 8. Wechseln Sie zur Verbindung 1, fhren Sie die gespeicherte Systemprozedur sp_lock aus, und sehen Sie sich dann die Sperrinformationen an. Identifizieren Sie die verschiedenen Sperrentypen und die von der Transaktion gesperrten Ressourcen. Notieren Sie sich diese Informationen zur spteren Verwendung in bung 4. ____________________________________________________________ ____________________________________________________________

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

41

9. Wechseln Sie zu SQL Server Enterprise Manager, klicken Sie mit der rechten Maustaste auf Aktuelle Aktivitt, und klicken Sie dann auf Aktualisieren. 10. Sehen Sie sich in Aktuelle Aktivitt die unter Prozessinfo, Sperren / Prozess-ID und Sperren / Objekte angezeigten Informationen an. 11. Wechseln Sie zur Verbindung 2, und brechen Sie die in Schritt 7 begonnene Transaktion ab, indem Sie eine ROLLBACK TRAN-Anweisung ausfhren. 12. Wechseln Sie zur Verbindung 1, und fhren Sie die gespeicherte Systemprozedur sp_lock aus. Sie werden feststellen, dass die von der Transaktion in Schritt 6 abgerufenen Sperren nun aufgehoben wurden.

42

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

bung 4 Einstellen von Sperroptionen


In dieser bung werden Sie einige SQL Server-Sperroptionen verwenden, um zu ermitteln, wie sich diese auf die Verarbeitung von Transaktionen auswirken. Die mit SQL Query Analyzer in bung 3 hergestellten Verbindungen sollen dabei mehrere Benutzer simulieren, die Transaktionen an SQL Server senden. Im Fenster Aktuelle Aktivitt in SQL Server Enterprise Manager knnen Sie sich die Sperrinformationen fr diese bung ansehen. So legen Sie die Transaktionsisolationsstufe fest In diesem Verfahren verwenden Sie die SET TRANSACTION ISOLATION LEVEL-Anweisung, um das Sperrverhalten auf Sitzungsebene zu steuern. Hierzu werden die mit SQL Query Analyzer in bung 3 hergestellten Verbindungen verwendet. 1. Wechseln Sie zu SQL Query Analyzer (Verbindung 2). 2. ffnen Sie die Skriptdatei C:\Moc\2328A\Labfiles\L15\Lock2.sql mit Verbindung 2, sehen Sie sich den Inhalt an, und fhren Sie das Skript dann aus. 3. Wechseln Sie zur Verbindung 1, fhren Sie die gespeicherte Systemprozedur sp_lock aus, und sehen Sie sich dann die Sperrinformationen an. Identifizieren und berprfen Sie die verschiedenen Sperrentypen und die von der Transaktion gesperrten Ressourcen. Wurden von SQL Server andere Sperren verwendet als in Schritt 8 von bung 3? Begrndung? SQL Server hat diesmal eine exklusive Tabellensperre verwendet, da SQL Server durch die SET TRANSACTION ISOLATION LEVELAnweisung angewiesen wurde, den Sperrentyp zu verwenden, der fr die angegebene Isolationsstufe erforderlich ist. ____________________________________________________________ ____________________________________________________________ 4. Wechseln Sie zur Verbindung 2, und brechen Sie die Transaktion ab, indem Sie eine ROLLBACK TRAN-Anweisung ausfhren. So verwenden Sie Sperroptionen fr Tabellen In diesem Verfahren steuern Sie das Sperrverhalten mit Hilfe von Sperroptionen auf Tabellenebene. 1. Wechseln Sie zu SQL Query Analyzer (Verbindung 1). 2. Fhren Sie die gespeicherte Systemprozedur sp_lock mit Verbindung 1 aus, und sehen Sie sich die Ausgabe an. 3. Wechseln Sie zu SQL Query Analyzer (Verbindung 2).

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

43

4. ffnen Sie die Skriptdatei C:\Moc\2328A\Labfiles\L15\Lock3.sql mit Hilfe der Verbindung 2, und gehen Sie den Inhalt der Datei durch. Beachten Sie, dass eine Sperroption auf Tabellenebene in der FROMKlausel der SELECT-Anweisung definiert wurde. Auerdem sollten Sie bercksichtigen, dass das Skript keine COMMIT TRAN- oder ROLLBACK TRAN-Anweisung enthlt. 5. Fhren Sie die Skriptdatei Lock3.sql mit Verbindung 2 aus. 6. Wechseln Sie zur Verbindung 1, und fhren Sie die gespeicherte Systemprozedur sp_lock aus. Notieren Sie sich die verwendeten Sperrentypen und die gesperrten Ressourcen. ____________________________________________________________ ____________________________________________________________ 7. Stellen Sie eine dritte Verbindung mit SQL Query Analyzer her (Verbindung 3), und klicken Sie in der Liste DB auf ClassNorthwind. 8. ffnen Sie die Skriptdatei C:\Moc\2328A\Labfiles\L15\Lock1.sql mit Hilfe der Verbindung 3, und fhren Sie sie dann aus. 9. Wechseln Sie zur Verbindung 1, und fhren Sie die gespeicherte Systemprozedur sp_lock aus. Kann eine der Transaktionen nicht ausgefhrt werden? Falls dies der Fall ist, warum? Ja, die zweite Transaktion versucht, Daten zu aktualisieren, die von der ersten Transaktion gesperrt sind. Daher muss die zweite Transaktion warten, bis die erste Transaktion abgeschlossen ist. Sie knnen ermitteln, ob eine Transaktion aufgrund eines Sperrkonflikts nicht ausgefhrt werden kann, indem Sie die gespeicherte Systemprozedur sp_lock verwenden und in der Statusspalte nach dem Wort WAIT suchen. In dem Beispiel muss die Transaktion an Verbindung 3 warten, bis die Transaktion an Verbindung 2 abgeschlossen ist. ____________________________________________________________ ____________________________________________________________ Wie lange wartet eine Transaktion, bis eine gesperrte Ressource freigegeben wird? Eine Transaktion wartet unbegrenzt, bis eine gesperrte Ressource freigegeben wird, solange kein Deadlock vorliegt. Sie knnen ein Sperrtimeout fr die Sitzung festlegen und so steuern, wie lange SQL Server wartet, bis gesperrte Ressourcen freigegeben sind. ____________________________________________________________ ____________________________________________________________

44

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

10. Wechseln Sie zu Verbindung 3, und klicken Sie in der Symbolleiste auf das Symbol Abfrageausfhrung abbrechen. 11. Wechseln Sie zur Verbindung 1, und fhren Sie die gespeicherte Systemprozedur sp_lock aus, um zu berprfen, ob die anstehende Transaktion abgebrochen wurde. So legen Sie das Sperrtimeout fr eine Transaktion fest In diesem Verfahren legen Sie einen Zeitraum fr das Sperrtimeout fest, sodass die Transaktion erst so lange wartet wie angegeben, bis sie eine Sperre abruft. 1. Wechseln Sie zur Verbindung 3, und bearbeiten Sie die Skriptdatei C:\Moc\2328A\Labfiles\L15\Lock1.sql, indem Sie die folgende Anweisung unmittelbar vor der BEGIN TRAN-Anweisung hinzufgen:
SET lock_timeout 500

2. Fhren Sie das bearbeitete Skript mit Verbindung 3 aus. Was ist passiert und warum? Die Transaktion an Verbindung 3 wartete auf Ressourcen, die von der Transaktion an Verbindung 2 gesperrt waren. SQL Server hat die Transaktion an Verbindung 3 abgebrochen, da der von Ihnen angegebene Zeitraum fr das Sperrtimeout verstrichen ist. ____________________________________________________________ ____________________________________________________________ 3. Schlieen Sie alle Fenster in SQL Query Analyzer.

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

45

Lernzielkontrolle
Thema
Vertiefen Sie die Lernziele dieser Unterrichtseinheit, indem Sie die Kernpunkte wiederholen.

Einfhrung in Transaktionen und Sperren Verwalten von Transaktionen SQL Server-Sperren Verwalten von Sperren

Einstieg

Die Fragen zur Lernzielkontrolle beziehen sich auf einige der Schlsselkonzepte, die Inhalt dieser Unterrichtseinheit sind.

**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG**********


Gehen Sie anhand dieser Fragen die Themen der Unterrichtseinheit durch. Klren Sie andere offene Fragen der Kursteilnehmer, bevor Sie fortfahren.

1. Sie entwickeln zurzeit ein neues Auftragseingangssystem fr Ihre Firma. Sie erwarten dabei eine starke Beanspruchung des Systems, da 450 Mitarbeiter Kundenbestellungen rund um die Uhr annehmen. Sollten die Mitarbeiter alle Artikel, die ein Kunde whrend eines einzigen Telefonanrufs bestellt, in einer einzelnen Transaktion verarbeiten? Wahrscheinlich ist es am sinnvollsten, jedes bestellte Produkt als separate Transaktion zu behandeln.

2. Einmal im Monat mssen Sie eine Aktualisierung der products-Tabelle in Ihrem Auftragseingangssystem vornehmen. Die products-Tabelle enthlt Millionen von Eintrgen. Jede monatliche Aktualisierung soll mindestens 65 % der Zeilen in der Tabelle betreffen. Sie knnen eine einzige, komplexe UPDATE-Anweisung schreiben, um die Aktualisierung auszufhren. Die Ausfhrung dauert im Normalfall mindestens 30 Minuten, Ist dies die beste Methode, um die Aktualisierung durchzufhren? Nein, teilen Sie die Anweisung nach Mglichkeit in eine Gruppe von kleineren Transaktionen auf, um die Anzahl der Sperrkonflikte mit anderen Benutzern mglichst gering zu halten.

46

Unterrichtseinheit 15: Verwalten von Transaktionen und Sperren

3. Sie erhalten Anrufe von Benutzern. Die Anrufer informieren Sie darber, dass sich die Antwortzeit des Auftragseingangssystems in regelmigen Abstnden um 20 Sekunden erhht. Sie haben den Benutzern jedoch eine Antwortzeit von drei Sekunden zugesichert. Sie haben den Verdacht, dass das Problem durch Sperrkonflikte innerhalb des Systems verursacht wird. Wie wrden Sie die Ursache des Problems ermitteln? Verwenden Sie die gespeicherte Systemprozedur sp_lock oder das Fenster Aktuelle Aktivitt in SQL Server Enterprise Manager, um das Problem zu identifizieren. ndern Sie anschlieend die betroffenen Transaktionen.

You might also like