Holger Schmeling Datenbankentwicklung mit dem Microsoft SQL Server 2005 ISBN-10: 3-446-22532-3 ISBN-13: 978-3-446-22532-9 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-22532-9 sowie im Buchhandel
1 Einleitung... 1 1.1 Was vermittelt dieses Buch?... 1 1.2 Für wen ist dieses Buch?... 2 1.3 Wo finde ich was?... 3 1.4 Welche Voraussetzungen werden benötigt?... 5 1.5 Danksagung... 6 2 SQL Server 2005-Architektur... 9 2.1 SQL Server 2005-Komponenten... 9 2.1.1 Das SQL Server-Datenbankmodul... 10 2.1.2 SQL Server Replication Services... 12 2.1.3 SQL Server Notification Services... 12 2.1.4 SQL Server Reporting Services... 12 2.1.5 SQL Server Analysis Services... 13 2.1.6 SQL Server Integration Services... 13 2.1.7 Verwaltungswerkzeuge... 14 2.1.8 Entwicklungswerkzeuge... 14 2.1.9 Der SQL Server Agent... 14 2.2 SQL Server-Editionen... 15 2.3 Systemdatenbanken...16 2.3.1 Die master-datenbank... 16 2.3.2 Die model-datenbank... 16 2.3.3 Die msdb-datenbank... 17 2.3.4 Die tempdb-datenbank... 17 2.3.5 Weitere Datenbanken... 17 2.4 Die Struktur einer SQL Server-Datenbank... 18 2.4.1 Datenbanken... 19 2.4.2 Datenbankobjekte... 19 2.5 Zusammenfassung...21 VII
3 SQL Server-Verwaltungswerkzeuge... 23 3.1 SQL Server-Konfigurations-Manager...24 3.2 SQL Server-Oberflächenkonfiguration...25 3.3 SQL Server Management Studio...27 3.3.1 Start und Anmeldung...27 3.3.2 Bereiche des Hauptfensters...30 3.3.3 Datenbankprojekte erstellen...47 3.4 Business Intelligence Development Studio...51 3.5 SQL Server Profiler...52 3.6 Datenbankmodul-Optimierungsratgeber...58 3.7 Sqlcmd...61 3.8 SQL Server-Onlinedokumentation...63 3.9 Zusammenfassung...64 4 Transact SQL-Grundlagen... 65 4.1 Das Relationenmodell...66 4.2 SQL mit System...67 4.3 T-SQL-Stapel (Batches)...69 4.4 SQL-Datentypen...71 4.5 T-SQL-Ausdrücke und -Operatoren...76 4.6 Datenbanken verwalten...79 4.6.1 Datenbank erzeugen...79 4.6.2 Datenbank ändern...82 4.6.3 Datenbank löschen...84 4.7 Schemas verwenden...84 4.7.1 Namensauflösung...87 4.7.2 Synonyme...89 4.8 Tabellen entwerfen...90 4.8.1 Tabellen anlegen...90 4.8.2 Tabellen ändern...93 4.8.3 Identität/Primärschlüssel...95 4.8.4 Weitere Einschränkungen...98 4.8.5 Berechnete Spalten...102 4.8.6 Ein Wiedersehen mit CREATE TABLE...103 4.8.7 Beziehungen festlegen...104 4.8.8 Zusammenfassung zu Einschränkungen...107 4.8.9 Tabellen löschen...107 4.8.10 Datenbankdiagramme...108 4.8.11 Temporäre Tabellen...109 4.9 INSERT Daten einfügen...110 4.10 SELECT Daten abfragen...111 4.10.1 Filtern: Projektion und Selektion...115 4.11 Informationen ausgeben mit PRINT...122 4.12 Ausführen von gespeicherten Prozeduren...122 4.13 UPDATE Daten ändern...123 4.14 DELETE Daten löschen...125 VIII
4.15 SQL-Funktionen... 126 4.15.1 Systemfunktionen... 127 4.15.2 Konfigurationsfunktionen... 129 4.15.3 Metadatenfunktionen... 130 4.15.4 Numerische Funktionen... 132 4.15.5 Funktionen zur Zeichenkettenbearbeitung... 136 4.15.6 Konvertierungsfunktionen... 142 4.15.7 Datums- und Zeitfunktionen... 144 4.15.8 Sonstige Funktionen und Operatoren... 149 4.16 Die Beispieldatenbank AdventureWorks... 153 4.17 Sichten... 154 4.17.1 Ändern von Sichten... 156 4.17.2 Aktualisierung von Daten... 156 4.18 Daten einfügen mit SELECT... 158 4.18.1 INSERT und SELECT... 158 4.18.2 SELECT INTO... 158 4.19 Null... 159 4.19.1 Dreiwertige Logik... 160 4.19.2 Arithmetische Operationen... 163 4.19.3 Operationen mit Zeichenketten... 164 4.19.4 Hinweise für die Verwendung von NULL... 166 4.19.5 Spezielle Funktionen für NULL-Werte... 167 4.20 Fehlerbehandlung in T-SQL... 169 4.21 Komplexe Abfragen mit SELECT... 170 4.21.1 Mengenoperationen mit SQL... 170 4.21.2 Abfragen über mehrere Tabellen... 172 4.21.3 Aggregatfunktionen und GROUP BY... 179 4.21.4 Rangfolgefunktionen... 186 4.21.5 Korrelierende Unterabfragen... 191 4.21.6 Abgeleitete Tabellen... 192 4.21.7 Allgemeine Tabellenausdrücke... 193 4.21.8 PIVOT und UNPIVOT... 198 4.21.9 OUTPUT... 202 4.21.10 APPLY... 203 4.22 Zusammenfassung... 205 5 Transaktionen und Sperren... 207 5.1 Eigenschaften von Transaktionen... 207 5.2 Start und Ende einer Transaktion... 210 5.2.1 Transaktionsmodi des SQL Servers... 211 5.3 Sperren... 213 5.3.1 Sperrbare Ressourcen... 214 5.3.2 5.3.3 Sperrtypen... 217 Deadlocks... 219 5.4 Isolationsstufen... 224 5.4.1 READ UNCOMMITTED... 224 IX
5.4.2 READ COMMITTED...225 5.4.3 REPEATABLE READ...226 5.4.4 SNAPSHOT...227 5.4.5 SERIALIZABLE...228 5.4.6 Abschließende Betrachtungen zu Isolationsstufen...228 5.5 Sperren explizit anfordern Sperrhinweise...229 5.6 Das Transaktionsprotokoll...232 5.6.1 Abschneiden des Protokolls...233 5.6.2 Verhalten im Fehlerfall...234 5.7 Hinweise zur Verwendung von Transaktionen...234 5.8 Zusammenfassung...236 6 Administration für Datenbankentwickler... 237 6.1 Datensicherung und -wiederherstellung...237 6.1.1 6.1.2 Wiederherstellungsmodelle...240 Prüfen der Konsistenz einer Datenbank...242 6.1.3 Vollständige Datenbanksicherung...242 6.1.4 Sicherung des Transaktionsprotokolls...248 6.1.5 Sichern der Systemdatenbanken...251 6.2 Wiederherstellung von Datenbanken...252 6.2.1 Automatische Wiederherstellung bei Systemstart...255 6.2.2 Wiederherstellung der Systemdatenbanken...255 6.3 Zugriffskontrolle...256 6.3.1 SQL Server-Anmeldungen...257 6.3.2 Anmeldungen hinzufügen...259 6.3.3 Anmeldungen löschen...261 6.3.4 Berechtigungen vergeben...261 6.3.5 Vordefinierte Anmeldekonten...262 6.3.6 Datenbankbenutzer...263 6.3.7 Datenbankrollen...265 6.3.8 Rechte erteilen und entziehen...266 6.4 Überwachung von SQL Server...270 6.4.1 Was kann überwacht werden?...271 6.4.2 Überwachung mit dem SQL Server Management Studio...272 6.4.3 Überwachung mit dem SQL Server Profiler...276 6.4.4 Überwachung mit dem Windows-Systemmonitor...276 6.4.5 Verwendung von T-SQL zur Überwachung...277 6.5 Zusammenfassung...286 7 T-SQL-Programmierung... 287 7.1 Variablen...287 7.1.1 Deklaration von Variablen...287 7.1.2 Wertzuweisung an Variablen...288 7.1.3 Besondere Variablentypen...290 7.2 Dynamisches SQL...292 7.3 Ablaufsteuerung...293 X
7.3.1 Anweisungsblöcke... 293 7.3.2 Bedingte Ausführung von Anweisungen... 293 7.3.3 Wiederholte Ausführung von Anweisungen... 294 7.4 Cursor... 297 7.4.1 Cursor erzeugen... 297 7.4.2 Einen Cursor durchlaufen Daten abrufen... 300 7.4.3 Daten aktualisieren... 305 7.4.4 Hinweise zur Verwendung von Cursorn... 306 7.5 Gespeicherte Prozeduren... 306 7.5.1 Warum gespeicherte Prozeduren?... 307 7.5.2 Erstellung von gespeicherten Prozeduren... 307 7.5.3 Verwenden von Parametern... 311 7.5.4 Der Rückgabewert einer gespeicherten Prozedur... 314 7.5.5 Die gespeicherte Systemprozedur sp_procoption... 314 7.5.6 EXECUTE und INSERT... 316 7.5.7 Erweitertes Beispiel: PDF-Dateien einlesen... 317 7.6 Benutzerdefinierte Funktionen... 320 7.6.1 Skalarwertfunktionen... 320 7.6.2 Tabellenwertfunktionen... 323 7.7 Trigger... 325 7.7.1 DML-Trigger... 326 7.7.2 Hinweise zur Verwendung von Triggern... 332 7.7.3 DDL-Trigger... 333 7.8 Zusammenfassung... 338 8 XML-Integration... 339 8.1 Tabellen im XML-Format darstellen: FOR XML... 339 8.1.1 FOR XML RAW... 341 8.1.2 FOR XML AUTO... 342 8.1.3 FOR XML EXPLICIT... 344 8.1.4 FOR XML PATH... 352 8.1.5 FOR XML-Optionen... 355 8.1.6 Noch einmal FOR XML PATH... 358 8.2 XML-Daten in Tabellenform abbilden: OPENXML... 367 8.3 Der XML-Datentyp... 372 8.3.1 Ungetypte XML-Daten... 375 8.3.2 Getypte XML-Daten... 376 8.3.3 query... 379 8.3.4 exist... 382 8.3.5 value... 383 8.3.6 nodes... 384 8.3.7 modify... 388 8.4 8.3.8 XML-Indizes... 391 Zusammenfassung... 395 XI
9 SQL Server Service Broker... 397 9.1 Architektur...397 9.1.1 Service Oriented Architecture (SOA)...398 9.1.2 Service Broker-Kommunikation...399 9.1.3 Service Broker-Komponenten...401 9.2 Erstellung von Anwendungen...402 9.2.1 T-SQL-Kommandos für eine Service Broker-Kommunikation...402 9.2.2 Eine Service Broker-Beispielanwendung...403 9.2.3 Service Broker-Aktivierung...417 9.3 Überwachung von Server- und Datenbankobjekten...418 9.4 Zusammenfassung...421 10 Datenbankentwicklung mit.net... 423 10.1 SQL Server und die.net CLR...423 10.2 Sicherheitsaspekte...425 10.3 Assemblys...426 10.4 Der Namensraum Microsoft.SqlServer.Server...430 10.5 Datentypen der Namensraum System.Data.SqlTypes...431 10.6 Datenbankprojekte mit Visual Studio 2005 erstellen...431 10.6.1 Erstellen eines Datenbankprojektes...432 10.6.2 Erstellen von gespeicherten Prozeduren...434 10.6.3 Erstellen von benutzerdefinierten Funktionen...442 10.6.4 Erstellen benutzerdefinierter Typen...445 10.6.5 Erstellen von benutzerdefinierten Aggregaten...457 10.6.6 Erstellen von Triggern...460 10.6.7 Debuggen von CLR-Objekten...462 10.7 Noch einmal: Sicherheit...463 10.8 T-SQL oder.net?...467 10.9 Zusammenfassung...468 11 Web Services mit dem SQL Server... 469 11.1 Was sind Web Services?...469 11.2 SOAP-Endpunkte...470 11.2.1 Syntax zur Erstellung eines HTTP-Endpunktes...471 11.3 Reservierung von HTTP-Namensräumen...473 11.3.1 Implizite Reservierung...474 11.3.2 Explizite Reservierung...475 11.3.3 Löschen einer expliziten Reservierung...475 11.4 Aufbau der URL für einen Endpunkt...476 11.5 Einen Web Service erstellen und verwenden...476 11.5.1 Den AdWrksServicePoint-Endpunkt erzeugen...477 11.5.2 Sicherheitsaspekte...478 11.5.3 Den Web Service verwenden...481 11.6 Zusammenfassung...486 XII
12 Optimierung von Abfragen... 487 12.1 Die Speicherverwaltung von SQL Server... 488 12.2 Ausführung von Abfragen durch SQL Server... 489 12.3 Erstellen einer Testdatenbank... 490 12.4 Verwenden von Indizes... 491 12.4.1 Tabellen ohne Index Heap... 491 12.4.2 Gruppierte Indizes... 492 12.4.3 Nicht gruppierter Index auf einem Heap... 494 12.4.4 Nicht gruppierter Index auf einem gruppierten Index... 495 12.4.5 Erzeugen von Indizes... 497 12.4.6 Löschen von Indizes... 501 12.5 Messen der Leistung... 501 12.5.1 Messen mit der Stoppuhr... 502 12.5.2 Statistische Werte... 503 12.5.3 Ausführungspläne... 505 12.5.4 Der SQL Server Profiler... 511 12.5.5 Windows-Systemmonitor... 517 12.5.6 Verbindung von Ablaufverfolgung und Logfile... 518 12.6 Beispiele für die Optimierung... 521 12.7 Weitere Hinweise für Indizes... 528 12.7.1 Index-Selektivität... 528 12.7.2 Index-Fragmentierung... 529 12.7.3 Fehlende Indizes... 529 12.7.4 Nicht verwendete Indizes... 531 12.8 Der Datenbankmodul Optimierungsratgeber... 532 12.9 Tipps zur Abfrageoptimierung... 535 12.10 Zusammenfassung... 538 13 Anwendungen mit den Notification Services erstellen... 539 13.1 Einführung in SQL Server Notification Services... 539 13.2 Architektur... 540 13.3 Erstellen von Notification Services-Anwendungen... 543 13.4 Eine Notification Services-Beispielanwendung... 544 13.4.1 Instance Configuration File (ICF)... 544 13.4.2 Application Definition File (ADF)... 547 13.4.3 Erzeugen und Ausführen der NS-Anwendung... 554 13.4.4 Überprüfen der erzeugten NS-Datenbanken und -Objekte... 558 13.4.5 Erzeugen von Abonnements und Ereignissen... 559 13.5 Zusammenfassung... 572 Literatur... 573 Register... 575 XIII