Professional Documents
Culture Documents
Arbeitsbuch fr Kursleiter
Kursnummer: 2328A
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
iii
Inhalt
Einfhrung
Einfhrung ...............................................................................................................1 Kursunterlagen.........................................................................................................2 Voraussetzungen......................................................................................................3 Kursbeschreibung ....................................................................................................5 Installation ...............................................................................................................9 Microsoft Official Curriculum ...............................................................................12 Microsoft Certified Professional-Programm..........................................................13 Einrichtungen.........................................................................................................15
iv
vi
vii
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.
viii
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.
ix
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
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
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
xiii
xiv
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
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
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.
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...
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
Wir haben alle fr den Kurs erforderlichen Unterlagen fr Sie zusammengestellt. Auf Ihren Tischen finden Sie die folgenden Unterlagen...
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
**********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
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.
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
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
Thema
Einstieg
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
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
**********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
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
Einfhrung
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
iii
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
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.
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
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
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.
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.
Einstieg
**********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.
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.
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.
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?)
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.
**********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.
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.
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.
Client/Server-Kommunikationsprozess
Beschreiben Sie den Client/Server-Kommunikationsprozess.
Thema
Clientanwendung Clientanwendung
Abfrage Abfrage Resultset Resultset
Einstieg
Datenbank-API Datenbank-API (OLE DB, ODBC, (OLE DB, ODBC, DB-Library) DB-Library) 2 Client-Netzwerkbibliothek Client-Netzwerkbibliothek
Open Data Services Open Data Services Relationales Relationales Modul Modul Speichermodul Speichermodul
Resultset Resultset
Server 4
**********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
SQL Server-Dienste
Stellen Sie die Serversoftware fr SQL Server vor.
Thema
Einstieg
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.
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.
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 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.
12
SQL Server-Integration
Thema
Stellen Sie das Thema dar.
Einstieg
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.
13
Einstieg
Internet Internet
SQL Server schliet Clientund Serverkomponenten ein, die unter verschiedenen Betriebssystemen ausgefhrt werden.
Client Server
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
15
Active Directory Sicherheit Multiprozessoruntersttzung Microsoft-Ereignisanzeige Windows 2000-Komponentendienste Windows 2000-Systemmonitor Microsoft Internet-Informationsdienste Windows-Clustering
Einstieg
**********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
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.
17
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
IBM Host
Microsoft Host Integration Server 2000
**********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
SQL Server-Datenbanken
Thema
Stellen Sie die Themen zu den SQL Server-Datenbanken vor.
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.
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.
20
Datenbankobjekte
Thema
Gruppierter Index
PK
EmpNum
integer
FK
FirstName
varchar(20)
Einstieg
Eine Datenbank ist eine Auflistung von Daten, Tabellen und anderen Objekten.
LastName
longstring
CtryCode Extension
char(2) char(6)
FR FR SP
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.
22
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
**********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.
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
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.
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
sysobjects
Alle
26
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
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
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.
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
SQL Server-Sicherheit
Thema
Beschreiben Sie die SQL Server-Sicherheit.
Einstieg
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.
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
**********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
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.
31
Thema
Einstieg
Nachdem Benutzer authentifiziert wurden und sie sich bei SQL Server anmelden knnen, bentigen sie Konten in einer Datenbank.
ODER
SQL Server
Datenbankrolle
**********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
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
**********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
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
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.
35
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
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.
37
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
Beschreiben Sie kurz die verschiedenen Arten der Hilfe von SQL Server.
Methodischer Hinweis
Hilfe zu Transact-SQL
SQL Server-Dokumentation
39
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.
40
Thema
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
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
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
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.
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
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.
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.
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.
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
46
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.
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
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
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.
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. ____________________________________________________________ ____________________________________________________________
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. ____________________________________________________________ ____________________________________________________________
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
iii
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
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.
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.
vi
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.
Einstieg
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.
Thema
Einstieg
**********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.
Thema
Zweischichtenmodell
Einstieg
Sie haben verschiedene Mglichkeiten, logische Schichten physisch in eine verteilte Umgebung einzubinden.
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.
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.
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.
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.
-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
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
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.
13
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.
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
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.
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
Einstieg
Verwenden Sie beim Arbeiten mit Daten in der Datenbank Folgendes: SELECT INSERT UPDATE DELETE
**********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
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
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.
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
Zustzliche Sprachelemente
Thema
Geben Sie eine bersicht ber zustzliche Sprachelemente von TransactSQL.
Lokale Variablen Operatoren Funktionen Beispiele fr Funktionen Sprachkonstrukte zur Ablaufsteuerung Kommentare
Einstieg
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Zu den zustzlichen Elementen von Transact-SQL zhlen lokale Variablen, Operatoren, Funktionen, Ablaufsteuerungsanweisungen und Kommentare.
21
Lokale Variablen
Definieren Sie eine Variable, und erlutern Sie, wie sie verwendet wird.
Thema
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.
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
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
**********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)}]
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.
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
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.
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
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
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
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
Beispiel 2
Dieses Beispiel einer Metadatenfunktion gibt den Namen der aktuell verwendeten Datenbank zurck.
SELECT DB_NAME() AS 'database'
Ergebnis
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
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
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
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
(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
Thema
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.
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
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
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)
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
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 */
33
Dynamisches Erstellen von Anweisungen Verwenden von Batches Verwenden von Skripts Verwenden von Transaktionen Verwenden von XML
Einstieg
**********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
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.
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
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
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.
37
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
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.
39
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
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
41
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.
42
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.
Ergebnis
XML_F52E2B61-18A1-11d1-B105-00805F49916B ---------------------------------------<row OrderID="10248" CompanyName="Federal Shipping" CustomerID="VINET"/> <row OrderID="10249" CompanyName="Speedy Express" CustomerID="TOMSP"/>
43
44
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
**********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)"
45
Thema
Einstieg
In dieser bungseinheit schreiben Sie SELECTAnweisungen, ndern eine Skriptdatei und verwenden Systemfunktionen.
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
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
47
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
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.
49
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
50
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"
51
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
52
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'
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
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.
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
iii
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
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.
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.
vi
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.
Thema
Einstieg
Definieren von Datenbanken Arbeitsweise des Transaktionsprotokolls Festlegen von Datenbankoptionen Abrufen von Datenbankinformationen
**********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.
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.
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.
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.
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.
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
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.
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
(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
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
**********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
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]
11
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
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.
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
14
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.
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.
15
Thema
Einstieg
**********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
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.
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
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.
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.
20
Einstieg
Sie knnen eine ganze Datenbank oder nur bestimmte Dateien in einer Datenbank verkleinern.
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.
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.
EMPTYFILE
Beispiel
22
23
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.
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
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
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
Thema
Datenbank
Einstieg
Wenn Sie eine Datenbank erstellen, sollten Sie wissen, wie die Daten von SQL Server gespeichert werden.
Tabellen, Indizes Daten
Seite (8 KB)
**********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.
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
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.
29
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.
**********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
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.
31
Thema
Gemischte Blcke
Einheitliche Blcke
Einstieg
IAM-Seiten verfolgen die Beziehung zwischen einem Objekt und den von ihm verwendeten Blcken oder Seiten.
**********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
Empfohlene Methoden
Stellen Sie die empfohlenen Methoden zum Erstellen und Verwalten von Datenbanken vor.
Thema
Einstieg
Die folgenden Methoden werden zur Erstellung und Verwaltung von Datenbanken empfohlen.
Festlegen groer Schrittweiten fr die automatische Vergrerung Festlegen groer Schrittweiten fr die automatische Vergrerung
**********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.
33
Einstieg
In dieser bungseinheit erstellen und verwalten Sie die ClassNorthwindDatenbank und lschen das Transaktionsprotokoll.
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.
34
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
35
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
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
37
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
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
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
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.
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
iii
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
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.
vi
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.
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.
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
**********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.
ANSI-Synonym integer dec double precision, float[(n)] for n=8-15 float[(n)] for n=1-7 -
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.
char[(n)] varchar[(n)]
text
UnicodeZeichen
Binr
0-8000
Methodischer Hinweis
Machen Sie die Kursteilnehmer auf die Datentypen cursor, table und sql_variant aufmerksam.
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.
Anmerkung Fhren Sie die gespeicherte Systemprozedur sp_help aus, um eine Liste der derzeit definierten Datentypen abzurufen.
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.
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
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
4 Byte
**********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.
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
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.
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
Thema
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.
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
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.
16
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]
Anmerkung Alle auf einer Spalte basierenden Indizes und Einschrnkungen mssen entfernt werden, bevor die Spalte gelscht werden kann.
17
Thema
Einstieg
**********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
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
**********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.
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
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)
21
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.
22
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.
23
Thema
Einstieg
In dieser bungseinheit erstellen Sie benutzerdefinierte Datentypen, Tabellen, fgen Spalten hinzu lschen sie und generieren Skripts.
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.
24
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
25
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
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.
27
28
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. ____________________________________________________________ ____________________________________________________________
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
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
31
32
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.
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
iii
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
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.
vi
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.
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)
**********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.
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
**********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.
Bestimmen des geeigneten Einschrnkungstyps Erstellen von Einschrnkungen berlegungen zur Verwendung von Einschrnkungen
Einstieg
**********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.
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.
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
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
< 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)
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.
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
Einschrnkungstypen
Beschreiben Sie die Einschrnkungstypen.
Thema
Einstieg
DEFAULT-Einschrnkungen CHECK-Einschrnkungen PRIMARY KEY-Einschrnkungen UNIQUE-Einschrnkungen FOREIGN KEY-Einschrnkungen Kaskadierende referenzielle Integritt
**********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.
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
**********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
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.
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
**********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
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.
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
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
**********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.
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
NO ACTION
Kunden Kunden CustomerID (PK) 1
CASCADE
1
Einstieg
Durch die kaskadierende referenzielle Integritt werden nderungen an der Datenbank automatisch weitergegeben.
UPDATE old UPDATE old CustomerID to new CustomerID to new CustomerID CustomerID
Kunden Kunden CustomerID (PK) 3
**********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.
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
Thema
Einstieg
Deaktivieren der Einschrnkungsberprfung fr vorhandene Daten Deaktivieren der Einschrnkungsberprfung beim Laden neuer Daten
**********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.
21
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
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.
23
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
**********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
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.
25
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.
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
26
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'
27
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
Niedrig
Niedrig
Vor
28
(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
Niedrig
Niedrig
Vor
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
Einstieg
In dieser bungseinheit fgen Sie DEFAULT-, CHECK-, PRIMARY KEYund FOREIGN KEY-Einschrnkungen zu bestimmten Tabellen hinzu.
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.
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
32
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
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
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
36
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.
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
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
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
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
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.
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
iii
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
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.
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
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.
vii
viii
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.
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.
Einfhrung in Indizes
Geben Sie eine Einfhrung in Indizes.
Thema
Einstieg
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.
Thema
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.
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.
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.
Methodischer Hinweis
Antwort: Nein. Auch ohne Index knnen Daten abgefragt und gendert werden. Der Zugriff auf Daten dauert jedoch wesentlich lnger.
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.
Thema
Einstieg
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.
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
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.
11
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
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.
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.
13
Einstieg
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
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.
15
Thema
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
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
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
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.
17
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
Suchen von Zeilen in einem gruppierten Index mit einem nicht gruppierten Index
Thema
sysindexes Nicht gruppierter Index auf dem Vornamen
id
root
Nicht Blattebene
Einstieg
Der sekundre Index wird dazu verwendet, die Suche in zustzlichen Spalten zu beschleunigen.
Gruppierter Index auf dem Nachnamen
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
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
**********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.
19
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
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.
21
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.
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.
22
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.
23
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.
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Das Lschen von Zeilen wirkt sich sowohl auf die Index- als auch auf die Datenseiten aus.
24
Methodischer Hinweis
Weisen Sie darauf hin, dass Zeilen in einem Heap sofort verschoben werden. Sie behalten nicht die Reihenfolge, in der sie eingefgt wurden.
25
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
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.
27
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
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
29
Thema
Einstieg
Bercksichtigen Sie bei der Auswahl des gruppierten Indexes, wie die Tabelle verwendet wird.
Sortieren
Ein gruppierter Index hlt die Daten vorsortiert
**********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.
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
31
Thema
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.
32
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.
33
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
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.
34
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
35
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
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.
36
37
Thema
Einstieg
Die Datenverteilung steht im Zusammenhang mit dem Konzept der Dichte. Bei der Bestimmung der Datendichte sollten Sie auch die Verteilung der Daten berprfen.
**********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.
38
Methodischer Hinweis
Das Beispiel in der Folie kann fr die credit-Datenbank nicht ausgefhrt werden.
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
**********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
Thema
Einstieg
In dieser bungseinheit verwenden Sie zwei Methoden zum Bestimmen der Indexarchitektur einer Tabelle.
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.
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.
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
42
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. ____________________________________________________________ ____________________________________________________________
43
44
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.
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.
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
iii
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
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.
vi
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.
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.
Thema
Einstieg
Zum Erstellen von Indizes verwenden Sie die CREATE INDEX-Anweisung und zum Entfernen von Indizes die DROP INDEX-Anweisung.
**********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.
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
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.
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)
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
# of Duplicates
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
Spalte 1
Spalte 2
**********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.
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)
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.
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
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.
11
Einstieg
Bevor Sie einen Index erstellen, ndern oder entfernen, bentigen Sie eventuell Informationen zu bereits vorhandenen Indizes.
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Bevor Sie einen Index erstellen, ndern oder entfernen, bentigen Sie eventuell Informationen zu bereits vorhandenen Indizes.
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
Methodischer Hinweis
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.
13
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
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.
**********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.
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
100
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
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
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.
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
Einstieg
**********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.
19
Datenfragmentierung
Erlutern Sie, wie die Datenfragmentierung zustande kommt, und nennen Sie Mglichkeiten zum Verwalten der Datenfragmentierung.
Thema
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.
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
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.
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.
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.
Logische Scanfragmentierung
Blockscanfragmentierung
22
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
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.
24
Beispiel
Ergebnis
Pages moved 28
Pages removed 9
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.
26
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
27
Thema
Einstieg
In dieser bungseinheit erstellen Sie Indizes und ermitteln die Gre und Dichte von Indizes.
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.
Weitere Informationen
Sollten Sie beim Ausfhren von Dateien Hilfe bentigen, suchen Sie in der Hilfe von SQL Query Analyzer nach Ausfhren einer Abfrage.
28
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
29
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
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
3. Fhren Sie eine Abfrage der sysindexes-Systemtabelle durch, um zu berprfen, ob die Indizes erstellt wurden.
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
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)
18 7.6 98.82%
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')
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)
18 7.6 98.82%
34
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)
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')
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
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. ____________________________________________________________ ____________________________________________________________
37
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
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
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** Statistiken sind eine Stichprobe aus Spaltenwerten.
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.
39
40
Thema
Sales
Einstieg
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.
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
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.
43
44
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.
45
46
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
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.
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
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.
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.
52
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.
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
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.
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
Thema
Einstieg
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.
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
58
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
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
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
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.
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
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
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)
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)
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
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)
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 ____________________________________________________________ ____________________________________________________________
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
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.
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
iii
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
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.
iv
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.
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.
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
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
**********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.
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.
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.
Thema
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.
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.
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.
Beispiel 2
Ergebnis
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
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
10
Einstieg
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.
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.
11
Beispiel
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.
12
Thema
Einstieg
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.
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.
13
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.
Anmerkung INFORMATION_SCHEMA.VIEW_TABLE_USAGE und INFORMATION_SCHEMA.VIEW_COLUMN_USAGE zeigen Informationen nur fr Ihren Benutzernamen an.
14
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
Fhren Sie vor, wie Abhngigkeitsinformationen mit Hilfe von SQL Server Enterprise Manager angezeigt werden.
Syntax
sp_depends objname
15
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.
16
17
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
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.
19
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
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
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.
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
Subtotal 104874.98
22
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
**********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.
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.
24
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.
25
26
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
**********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.
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
Thema
Einstieg
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.
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
30
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.
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
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. ____________________________________________________________ ____________________________________________________________
33
34
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. ____________________________________________________________
35
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
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'
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
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.
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.
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
iii
iv
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.
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
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.
viii
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.
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.
Thema
Einstieg
Definieren gespeicherter Prozeduren Erstmaliges Verarbeiten gespeicherter Prozeduren Nachfolgendes Verarbeiten gespeicherter Prozeduren Vorteile gespeicherter Prozeduren
**********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.
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.
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.
Thema
Erstellung Erstellung
Analyse Analyse
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
**********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.
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
Thema
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
**********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.
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.
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
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.
11
Thema
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
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.
12
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
13
14
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
**********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.
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
Thema
Einstieg
Eine gespeicherte Prozedur kann selbststndig oder als Teil einer INSERT-Anweisung ausgefhrt werden.
**********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.
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.
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 vor dem heutigen Datum eingestellten Mitarbeiter werden zur CustomersTabelle hinzugefgt. Ergebnis
(9 row(s) affected)
18
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.
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
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
21
Thema
Einstieg
In dieser bungseinheit erstellen Sie gespeicherte Prozeduren und zeigen Informationen zu den Prozeduren an.
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.
22
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
23
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
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')
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')
26
Verwenden von Eingabeparametern Ausfhren gespeicherter Prozeduren mit Hilfe von Eingabeparametern Zurckgeben von Werten mit Hilfe von Ausgabeparametern Explizites erneutes Kompilieren gespeicherter Prozeduren
Einstieg
**********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.
27
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
**********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
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
29
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.
**********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
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
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 . . .
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' . . .
31
32
Thema
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.
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
**********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.
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
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.
35
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
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.
37
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
**********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
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.
39
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.
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
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.
41
42
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.
43
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
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.
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
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.
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
Thema
Einstieg
In dieser bungseinheit fhren Sie ein Skript aus, das mehrere gespeicherte Prozeduren erstellt, und erstellen und ndern eigene gespeicherte Prozeduren.
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.
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
50
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.
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
53
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
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.
55
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
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). ____________________________________________________________ ____________________________________________________________
57
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
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.
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.
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
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
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
iii
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.
iv
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.
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.
vi
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.
Thema
Skalarfunktionen hneln einer integrierten Funktion Funktionen mit mehreren Anweisungen und Tabellenrckgabe Inhalt entspricht dem einer gespeicherten Prozedur
Einstieg
**********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.
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.
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.
Syntax
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
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
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.
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
**********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.
Einstieg
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.
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
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
**********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.
11
Einstieg
**********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
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.
13
Einstieg
Dies ist ein Beispiel fr eine Funktion mit mehreren Anweisungen und Tabellenrckgabe.
**********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
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.
15
Einstieg
**********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
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.
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
Thema
Einstieg
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.
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
20
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.
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
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.
23
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)
24
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.
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.
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
iii
iv
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.
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
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.
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
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.
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
**********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.
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.
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.
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.
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.
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
**********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.
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.
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.
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
Thema
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.
11
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
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
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.
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
16
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.
17
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
77 2
10523 41 9.65 10524 inserted 30.00 77 10524 inserted 30.00 10523 2 19.00 10523 22 10523
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
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
19
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
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
21
Thema
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
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
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.
23
Thema
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
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.
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.
25
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.
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
Products Products 11 2 33 44
15 15 15 10 10 65 65 20 20
**********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
In einer Produktionsumgebung, in der in der Regel keine Trigger eingesetzt werden, ist fr Tests und zur Fehlerbehebung die Funktion @@NESTLEVEL ntzlich.
Methodischer Hinweis
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
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.
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.
Weisen Sie darauf hin, dass das erste Beispiel nicht auf die Employees-Tabelle in der Northwind-Datenbank zutrifft bzw. sich nicht darauf bezieht.
30
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.
31
Beispiele fr Trigger
Erlutern Sie, warum Trigger in SQL Server notwendig sind.
Thema
Einstieg
**********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
Einstieg
Trigger knnen zur Aufrechterhaltung der Datenintegritt verwenden werden, indem nderungen an verknpften Tabellen in der gesamten Datenbank kaskadiert werden.
Products Products 11 2 33 44
BackOrders BackOrders 11 12 12 33 2
15 15 15 10 10 65 65 20 20
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
33
Einstieg
Trigger knnen auch zum Durchsetzen bestimmter Geschftsregeln, wie z. B. Keine Produkte mit einer Bestellhistorie lschen, verwendet werden.
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
77 99 24 24
'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
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.
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
Thema
Einstieg
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.
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
38
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.
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
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
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
43
2. Testen Sie den Trigger. Wurde der Trigger ausgelst? Begrndung? Nein. Die PRIMARY KEY-Einschrnkung hat verhindert, dass dieser Trigger ausgelst wurde. ____________________________________________________________ ____________________________________________________________
44
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.
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. ____________________________________________________________ ____________________________________________________________
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. ____________________________________________________________ ____________________________________________________________
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
iii
Erforderliche Unterlagen
Um diese Unterrichtseinheit zu unterrichten, bentigen Sie die Microsoft PowerPoint-Datei 2328A_12.ppt.
iv
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.
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.
vi
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.
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.
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)
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.
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
Thema
SQL Server erlaubt den Zugriff auf andere Datenquellen Remoteserver muss mit dem lokalen Computer mit SQL Server verbunden sein
Einstieg
Um mit Daten aus einer Remotedatenquelle von SQL Server oder einer anderen OLE DB-Datenquelle arbeiten zu knnen, mssen Sie einen Verbindungsserver einrichten.
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.
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.
**********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.
11
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
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
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
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.
15
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
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
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.
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
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.
19
Optimieren von Remoteabfragen durch SQL Server Verweisen auf Objekte, die auf Verbindungsservern gespeichert sind Zulssige Transact-SQL-Anweisungen
SELECT, INSERT, UPDATE, DELETE
Einstieg
**********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.
object-name
20
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
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.
21
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
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
23
Verbindungsserver
Einstieg
Benutzer
**********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
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.
25
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
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.
27
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
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.
**********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.
29
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.
30
31
Thema
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
Thema
Einstieg
Ein guter Datenbankentwurf ist eine wichtige Voraussetzung fr das Partitionieren von Daten.
33
34
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.
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
Thema
Einstieg
In dieser bungseinheit richten Sie Verbindungsserver ein und fragen Remotedaten ab.
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.
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
38
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.
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
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.
41
42
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.
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
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')
45
46
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
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
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.
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.
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
iii
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
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.
vi
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.
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.
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.
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.
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.
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
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.
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
**********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.
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.
10
11
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.
12
13
Thema
Einstieg
Anzeigen der Ausgabe von STATISTICS-Anweisungen Anzeigen der Ausgabe von SHOWPLAN_ALL und SHOWPLAN_TEXT Grafisches Anzeigen des Ausfhrungsplanes
**********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
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.
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
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
Anmerkung Die SET-Anweisungen bleiben so lange fr die Sitzung gltig, bis Sie die Option OFF angeben oder die Sitzung beenden.
16
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.
17
18
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.
19
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.
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
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.
21
Thema
Abfrageplan
Schrittfolge Schrittfolge
Member.corp_no Kosten: 9%
Einstieg
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
Geben Sie eine kurze Beschreibung der unterschiedlichen Arten von Detailinformationen, die angezeigt werden.
Methodischer Hinweis
Teilbaumkosten
Argument
23
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.
24
25
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
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.
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.
27
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
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.
29
Thema
Indexseiten
Einstieg
Im folgenden Beispiel muss fr eine Abfrage, die durch einen Index abgedeckt wird, eine Einzelseite der Blattebene gelesen werden.
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
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.
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
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.
31
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
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.
33
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.
34
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.
35
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
Indizierungsstrategien
Stellen Sie die Themen dieses Abschnitts vor.
Thema
Einstieg
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.
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
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.
39
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
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.
41
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
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
43
Thema
Einstieg
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
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
**********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.
45
Thema
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
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.
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
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.
49
50
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.
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
Einstieg
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.
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
54
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
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
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)
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
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
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
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)
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
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
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
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
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
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
63
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
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)
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
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. ____________________________________________________________ ____________________________________________________________
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.
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
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.
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
iii
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
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.
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
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.
vii
iv
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.
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.
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.
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.
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.
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.
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
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
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
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%
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%'
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
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
12
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
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
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
Beachten Sie, dass der Abfrageoptimierer beim Ausfhren der Abfrage fr jede Suchbedingung einen Index verwendet.
14
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 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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
15
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
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%
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
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. ____________________________________________________________ ____________________________________________________________
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%'
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
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
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
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
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
20
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
21
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)
22
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
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)
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
Informationen Anzahl der betroffenen Zeilen Scananzahl Anzahl logischer Lesevorgnge Anzahl und Name der Indizes zum Verarbeiten der Abfrage
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
25
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
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.
27
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)
Anmerkung Die statistischen Informationen knnen von denen in der Tabelle abweichen. 6. Klicken Sie auf die Registerkarte Ausfhrungsplan, um den Ausfhrungsplan grafisch anzuzeigen.
28
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
29
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)
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
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
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)
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
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
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
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
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
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
35
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
**********NUR FR DIE VERWENDUNG DURCH DEN KURSLEITER ZULSSIG********** In diesem Abschnitt wird erlutert wie der Abfrageoptimierer Abfragen optimiert, in denen Verknpfungsoperationen verwendet werden.
36
Thema
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.
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.
37
Dynamisches Erstellen von Spaltenstatistiken. Die Anzahl von Zeilen in jeder Tabelle der Verknpfung.
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
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
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
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
**********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.
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
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 .. .. ..
charge charge
.. .. .. .. .. .. .. ..
**********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
41
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
Einstieg
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.
43
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.
44
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.
45
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
.. .. ..
**********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.
46
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.
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.
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
Thema
Einstieg
In dieser bungseinheit beobachten Sie den Ausfhrungsplan und werten die Abfrageoptimierung mit Hilfe unterschiedlicher Verknpfungsstrategien aus.
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.
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.
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
50
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)
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'
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
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
53
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
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'
55
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
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. ____________________________________________________________ ____________________________________________________________ ____________________________________________________________ ____________________________________________________________
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
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.
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.
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
iii
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
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.
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.
vi
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.
viii
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
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.
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
**********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.
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.
Thema
Einstieg
Multimediaprsentation: SQL Server-Transaktionen Transaktionswiederherstellung und Prfpunkte berlegungen zum Verwenden von Transaktionen Festlegen der Option fr implizite Transaktionen Einschrnkungen fr benutzerdefinierte Transaktionen
**********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.
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.
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
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.
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.
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
**********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
11
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
Thema
Einstieg
**********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
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
**********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
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.
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
Thema
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.
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.
**********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
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.
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.
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
Einstieg
**********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
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.
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
Thema
Einstieg
Sperroptionen auf Sitzungsebene Dynamische Sperrenarchitektur Sperroptionen auf Tabellenebene Deadlocks Anzeigen von Sperrinformationen
**********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.
23
Transaktionsisolationsstufe
READ COMMITTED (Standard) READ UNCOMMITTED REPEATABLE READ SERIALIZABLE
Einstieg
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
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.
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)
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.
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.
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
26
Dynamische Sperrenarchitektur
Fhren Sie vor, wie die kostengnstigsten Sperren ermittelt werden.
Thema
Dynamische Sperren
Einstieg
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
27
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
**********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
Geben die Gre und den Typ der Sperren an, die fr diese Tabelle verwendet werden sollen.
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.
30
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.
31
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.
Die ersten vier Spalten beziehen sich auf verschiedene IDs: Serverprozess-ID (SPID), Datenbank-ID (DBID), Objekt-ID (OBJID) und die Index-ID (INDID).
32
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.
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.
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
Thema
Einstieg
In dieser bungseinheit fhren Sie Transaktionen aus, legen Sperroptionen fest und zeigen Sperrergebnisse an.
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.
35
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
37
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
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.
39
40
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
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
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.
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.
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
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.