Microsoft SQL-Server 2000 Anleitung 1 Datenbanksysteme und Einsatzzwecke: Access / SQL-Server1 Um einen Vergleich von DBMS anstellen zu können, sollen zunächst die Anforderungen an diese Systeme näher untersucht werden. Die folgenden Überlegungen können bei der Auswahl eines DBMS angestellt werden: - Anzahl und Umfang der mit dem DBMS zu verwaltenden Datensätze und das erwartete Wachstum - vorhandene oder geplante EDV-Infrastruktur (Netzwerk, Server, Betriebssysteme, bereits vorhandene DBMS) - verfügbares Personal (Administratoren) - verfügbares EDV-Budget für einmalige Investition und laufende Investitionen - Lizenzpreise - Wechsel von Datenbeständen auf andere DBMS - Investitionsschutz - Anzahl von gleichzeitigen Benutzern MS-Access 2000 hat beispielweise folgende Begrenzungen, die aufgrund der Systemarchitektur nicht erweitert werden können: Maximale Größe einer MDB-Datenbank 2 GB Anzahl gleichzeitiger Benutzer 255 Anzahl der geöffneten Tabellen 1024 Maximale Größe einer Tabelle 1 GB Anzahl der Felder in einer Tabelle 255 Anzahl der Indizes in einer Tabelle 32 Weitere Nachteile und Einschränkungen: - Nach einem Absturz von ACCESS gibt es keine Wiederherstellungsroutine. - Im Netz werden immer alle Daten übertragen ohne Berücksichtigung von WHERE Kriterien. - Das Sicherheitskonzept von ACCESS ist nicht sehr mächtig. 1.1 File Server – Client/Server Grundsätzlich muss zwischen File Server Datenbanken wie Access und Client/ServerDatenbanken unterschieden werden: File Server Datenbank (z.B. Access): Hier kann von außen immer nur auf die Datenbankdatei zugegriffen werden. Außerdem werden hier grundsätzlich alle Daten übertragen und erst der Empfänger ist in der Lage, die Daten zu selektieren. Vorteile einer solchen File Server Architektur sind dabei: - Zugriff von mehreren Anwendern auf Daten - Client-Programme lokal vorhanden Angesichts dieser Vorteile könnte man sich nun jedoch die Frage stellen, wozu man überhaupt noch eine Client Server Architektur braucht: Eine File Server Datenbank verfügt über keinen eigenen Datenbankprozess, der bestimmte Dienste ausführen kann. Es können somit keine Daten auf dem Server selektiert werden, 1 :vgl. zum 1. Kapitel: http://www.fh-deggendorf.de/doku/fh/meile/bachelor/lehre/db/index.html (Zusammenfassung, z. T. wörtliche Übernahme aus Folge 10 und 11 der Vorlesungsreihe zu Datenbanken) -1- Microsoft SQL-Server 2000 Anleitung sondern es wird die Datenbank File an sich übergeben. Das führt zu langen Zugriffszeiten insbesondere wegen des großen Datentransfers im Netz. 1.2 Client Server Datenbank: (z. B. Oracle, MS-SQL-Server) Auf dieser läuft nach dem Hochfahren ein Datenbankprozess, der Anforderungen in Empfang nehmen und den entsprechenden Dienst ausführen kann, z.B. das Ausführen eines Selects mit Where-Bedingung. Hier werden also nur die benötigten Daten übergeben. Daraus ergibt sich ein Geschwindigkeitsvorteil. Als allgemeine Kriterien, die als Anforderungen an Datenbanksysteme genannt werden, lassen sich folgende Punkte nennen: ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ Skalierbarkeit Migration Zugriff Administration Backup/Recovery Benchmarks Sicherheit Skalierbarkeit: Aus der Abschätzung über die Anzahl, den Aufbau und den Umfang der zu verwaltenden Datensätze, sowie die Anzahl der gleichzeitigen Zugriffe auf eine Datenbank kann schon eine gewisse Vorauswahl getroffen werden. Während MS Access aufgrund der Systemarchitektur eine Begrenzung in der maximalen Größe einer Datenbank bei 2 GB und bei der Anzahl gleichzeitiger Benutzer bei 255 hat, gelten diese Begrenzungen für die „großen“ DBMS, wie z.B. MS SQL Server oder Oracle nicht. „Große“ DBMS erlauben eine Datenbankgröße, die in Terabytes gemessen werden kann. Die Einschränkung besteht heute nur noch darin, wie viel Zeit für das Sichern, die Wiederherstellung und die Reorganisation der Datenbanken veranschlagt werden muss. Ein wesentliches Merkmal für ein DBMS ist also die Skalierbarkeit, d.h. die Möglichkeit der Anpassung eines DBMS an sich ändernde Benutzer- und Transaktionslasten. Skalierbarkeit beschreibt folgende Arten von Systemänderungen: - Vergrößerung von Datenbanken - wachsende Anzahl von Benutzern und Netzwerklast - zunehmende Transaktionslast - steigende Anforderungen bei Anwendungen durch neue Programmiertechniken - wachsende Anzahl von Servern Migration: Möglichkeit des Wechsels von Datenbanken auf leistungsfähigere Versionen bzw. andere DBMS. MS Access bietet mit dem Upsizing-Assistenten die Möglichkeit, eine vorhandene AccessDatenbank zu einem Access-Projekt umzuformen. Dabei werden Tabellen und Abfragen in eine SQL-Server Datenbank kopiert. Grundsätzlich ist auch eine Migration von Oracle nach MS SQL Server und umgekehrt möglich. Dies erfordert aber eine genaue Planung und Kenntnis der Unterschiede. Bei jeder Migration sind also unterschiedliche Aspekte der Systemarchitektur zu beachten. So bestehen z.B. Unterschiede in der Bezeichnung der Datentypen zwischen MS Access -2- Microsoft SQL-Server 2000 Anleitung und MS SQL-Server. Während Datentypen beim SQL-Server auf die Programmiersprache C bezogen sind, basieren die Datentypen bei Access auf Visual Basic. Sicherheit: Im Bezug auf Sicherheit basiert MS-SQL Server, MS-Access und Oracle auf dem Konzept von Benutzern und Gruppen von Benutzern mit bestimmten Rollen. MS-SQL-Server kann in zwei Sicherheits-Modi arbeiten: - mit Windows NT Authentifizierung - im sog. Mixed Mode, d.h. Windows NT Authentifizierung und SQL-Server Authentifzierung So erlaubt MS-Access z.B. die Zugriffssteuerung von Benutzern und Gruppen von Benutzern über den sog. Workgroup-Administrator. Beim SQL Server gibt es eine Log-Datei, die die Transaktionen für Änderungen von Datenbankinhalten aufnimmt. Damit kann das DBMS nach einem Absturz Daten, die noch im Puffer stehen, auf die Datenbank schreiben (Rollforward) bzw. nicht vollständig durchgeführte Transaktionen wieder zurücknehmen (Rollback). Außerdem kann man nach einem Plattencrash über das Einspielen der letzten Sicherung mit Hilfe der Logfile auch alle seitdem durchgeführten Datenbankänderungen nachvollziehen. Das Log File sollte dabei nie auf der Platte gespeichert werden wo die Datenbank liegt, denn nach einem Plattencrash könnte die Logfile ansonsten nicht mehr verwendbar sein. ⇒ Was versteht man eigentlich unter dem „Zurücknehmen von Transaktionen“? Angenommen, es erfolgte eine Warenauslieferung durch den Anwender. Dazu erfolgt in der Datenbank innerhalb einer Transaktion sowohl die Erhöhung der Liefermenge im Kundenauftrag, als auch die Reduzierung des Lagerbestands. Angenommen, die Erhöhung der Liefermenge erfolgte noch, danach kam es zum Datenbankabsturz. Die Transaktion wurde nicht vollständig durchgeführt. Man muss also die Transaktion wieder zurücknehmen, denn das manuelle reduzieren des Lagerbestandes durch den Anwender nach dem Neustart der Datenbank ist problematisch, da der Anwender nur ganze Geschäftsprozesse aufrufen darf, aber keine einzelnen Änderungen von Datenbankinhalten. Das wäre viel zu fehleranfällig. Deshalb werden die Datenbankaktualisierungen wieder zurückgenommen, die innerhalb einer nicht vollständig durchgeführten Transaktion bereits schon realisiert wurden. In unserem Fall wird somit die Liefermenge wieder reduziert, um auf den Stand zu kommen, den die Datenbank vor dem Beginn der Transaktion aufwies. Administration: Für den Administrator einer Datenbank sind andere Kriterien, als die oben genannten Unterschiede bei den Datentypen, deren Kenntnis z.B. für den Anwendungsentwickler von Bedeutung sind, wichtig. Ein wesentliches Kriterium für die Verfügbarkeit und Erweiterbarkeit eines DBMS liegt in der Administration des Systems. Der Datenbankadministrator hat folgende Aufgaben: - Installation des DBMS - Konfiguration der Server und Clients - Erstellung der Datenbanken - Umsetzung der Berechtigungen - Datentransfer (d.h. Import und Export von Daten) - Sichern und Wiederherstellen einer Datenbank - Überwachung der Systemauslastung und Reaktion auf bestimmte Alarme -3- Microsoft SQL-Server 2000 - Anleitung Behebung von Systemproblemen Für diese Tätigkeiten braucht ein Datenbankadministrator Unterstützung durch entsprechende Hilfsmittel der DBMS. Für einen Datenbankadministrator ist das zugrundeliegende Serverbetriebssystem von großer Bedeutung. Während MS-Access und MS-SQL-Server nur auf MicrosoftBetriebssystemen laufen, kann eine Oracle-Datenbank auf Windows NT Server bzw. Windows 2000 Server oder auch unter UNIX ablaufen. Die Wahl des Serverbetriebssystems wirkt sich neben der Stabilität des DBMS auch auf das Preis/Leistungsverhältnis aus. In diese Rechnung gehen Überlegungen wie z.B. Lizenzierungskosten, Zugriff auf bereits im Serverbetriebssystem angelegte Benutzer aus MS-SQL-Server heraus oder Verfügbarkeit von Datensicherungssoftware ein. Die meisten kommerziellen DBMS verfügen heute über eine graphische Benutzeroberfläche zur Administration. Während bei MS Access bestimmte Dienstprogramme in die Anwendung integriert sind, gibt es beim MS SQL-Server bzw. bei Oracle Dienstprogramme wie den Enterprise Manager bzw. den Oracle Enterprise Manager. Diese graphischen Werkzeuge erlauben es dem Datenbankadministrator Datenbanken bzw. Instanzen zu erzeugen und zu bearbeiten, sowie Benutzer anzulegen und bestimmten Rollen zuzuordnen. Dienstprogramme für das Starten und Anhalten von Datenbanken, oder für die Sicherung und Restaurierung von Datenbanken, sowie Tools zur Darstellung der Systemauslastung, sollten ebenfalls vorhanden sein. Architektur: Leider gibt es bei den verschiedenen Herstellern von DBMS eine unterschiedliche Terminologie. So besteht z.B. eine Oracle-Datenbank aus der kompletten Umgebung. Dies beinhaltet: - Oracle Datenbank-Prozesse und Pufferbereiche (Instanzen) - System-Tablespace, d.h. das Schema der Datenbank - Tablespaces die vom Datenbankadministrator definiert wurden - Redo-Log-Dateien - andere Dateien (Control Files, Init.ora) Eine MS-SQL-Server Datenbank besteht aus Daten, Anwendungen und Sicherheitsmechanismen, die mit einem Tablespace bei Oracle vergleichbar sind. Mit der Installation eines MS-SQL-Servers werden standardmäßig folgende System-Datenbanken installiert: - Master-Datenbank zur Verwaltung von Systeminformationen über den SQL-Server, wie z.B. Anmeldeinformationen oder Systemkonfiguration - Model-Datenbank als Vorlage für alle neuangelegten Datenbanken - tempdb-Datenbank zur Zwischenspeicherung bei Sortieroperationen - msdb-Datenbank zur Zeitsteuerung von Alarmen oder Jobs - Beispieldatenbanken Benchmarks: Bei den “großen” DBMS spielt die Leistungsfähigkeit oder auch Performance bei Vergleichen eine große Rolle. Eine amerikanische Institution, das Transaction Processing Performance Council (TPC)2 beschäftigt sich damit, Leistungstests (Benchmarks) zu definieren, die einen Vergleich der verschiedenen Systeme erlauben. Mitglied des TPC sind alle führenden Da- 2 Ergebnisse finden sich auf http://www.tpc.org -4- Microsoft SQL-Server 2000 Anleitung tenbankhersteller. So stellt beispielsweise der TPC-C Benchmark eine Mischung aus Leseund Update-Transaktionen dar. Es zeigt sich, dass in Bezug auf die Geschwindigkeit bei der Ausführung von Transaktionen und im Preis/Leistungsverhältnis für diesen speziellen Leistungstest der MS SQL Server 2000 vorne liegt. Obwohl beide DBMS über ähnliche Funktionen verfügen, haben Untersuchungen3 gezeigt, dass mit Oracle größere Datenbanken (im Schnitt 19 GB) als mit MS SQL-Server (im Schnitt 5 GB) verwaltet werden. Zudem laufen viele der großen Datenbanken auf UNIX-Servern unter Oracle, die nach der Erfahrung vieler Administratoren stabiler laufen. Die Wahl des „richtigen“ DBMS ist bei der heutigen Leistungsdichte der „großen“ DBMS wie z.B. MS SQL 2000 oder Oracle 8 bzw. die neuere Version 9 schon zu einer „philosophischen“ Frage geworden. Auf jeden Fall sollte bei einem Auswahlprozess die Erfahrung der Systemadministratoren mit den verschiedenen Serverbetriebssystemen NT und UNIX miteinbezogen werden. Allgemein gilt ein Windows NT System als leichter administrierbar wie ein UNIX-System. In Bezug auf die Stabilität wird dagegen UNIX meistens gegenüber Windows NT der Vorzug gegeben. Ein nicht zu unterschätzender Punkt sind die Lizenzkosten der unterschiedlichen DBMS und die Kosten für die Betriebssystemlizenzen, sowie die Mitlieferung von Tools im Standardlieferumfang. Hier schneidet der MS SQL Server besser ab. Aufgrund der großen Verbreitung von Microsoft-Systemen kann auch auf ein größeres Potential von Datenbank-Entwicklern zurückgegriffen werden. Dies bringt ein deutliche Kostenersparnis bei der Anwendungsentwicklung für MS SQL Server. Die eben angestellten Überlegungen gelten maßgeblich für Systemumgebungen mit ca. 1004 gleichzeitigen Benutzern eines DBMS. Bei größeren Benutzerzahlen und Datenbankgrößen verschiebt sich der Schwerpunkt deutlich zu Oracle. 3 IDC, International Data Corporation 4 MS SQL Server and Oracle 7 Cost-to-Use for Under 50 Concurrent Users, Microsoft Tec. Information, Dec. 2000 -5- Microsoft SQL-Server 2000 Anleitung 2 Datenbank erstellen Um unter SQL Server 2000 eine Datenbank zu erstellen, haben Sie folgende drei Möglichkeiten: • Den Datenbankerstellungs-Assistenten • Den SQL Server Enterprise Manager • Die Anweisung CREATE DATABASE Wir erstellen zunächst eine Datenbank mit Hilfe der Befehlseingabe. Dazu müssen Sie den SQL Server Query Analyzer starten (Start, Programme, Microsoft SQLServer, Query Analyzer). Im Query Analyzer erfolgt auch allgemein die Eingabe von SQLAnweisungen. Beachten Sie, dass ein SQL-Befehl nicht mit der Eingabetaste bestätigt wird, sondern mit F5 (=Ausführen) Die Syntax der create database-Anweisung lautet: CREATE DATABASE database_name [ ON [ < filespec > [ ,...n ] ] [ , < filegroup > [ ,...n ] ] ] [ LOG ON { < filespec > [ ,...n ] } ] [ COLLATE collation_name ] [ FOR LOAD | FOR ATTACH ] < filespec > ::= [ PRIMARY ] ( [ NAME = logical_file_name , ] FILENAME = 'os_file_name' [ , SIZE = size ] [ , MAXSIZE = { max_size | UNLIMITED } ] [ , FILEGROWTH = growth_increment ] ) [ ,...n ] < filegroup > ::= FILEGROUP filegroup_name < filespec > [ ,...n ] Die einzelnen Befehle bedeuten: • database_name - Der Name der gesamten Datenbank. • ON ...- Gibt an, zu welcher Dateigruppe diese Datenbank gehört. Die standardmäßige Dateigruppe ist Primary. • LOG ON Hier werden die Protokolldateien beschrieben. • • Collate – Diese Angabe bezieht sich auf die Standardsortierung. FOR LOAD | FOR ATTACH Die erste Angabe bezieht sich auf die Kompatibilität zu früheren Versionen von SQL Server, die zweite Angabe hat etwas mit dem Anhängen von Dateien an Betriebssystemdateien zu tun. • FILENAME - Dieser Parameter enthält den Pfad und den Dateinamen der Datei, in die Ihre Daten auf der Festplatte gespeichert werden sollen. • SIZE - Dieser Parameter gibt an, wie groß die Datenbank werden soll. Sie können den Wert entweder in Megabyte oder Kilobyte angeben. Vorgabewert ist die Größe -6- Microsoft SQL-Server 2000 Anleitung der model- Datenbank. Um die Größe in Megabyte oder Kilobyte anzugeben, hängen Sie entweder MB oder KB an Ihren Wert an. Wenn Sie beispielsweise hier 10 Mbyte angeben, würde eine 10 Mbyte große Datei erstellt. • MAXSIZE - Dieser Parameter gibt an, bis zu welcher maximalen Größe Ihre Daten- bank dynamisch anwachsen kann. Falls Sie hier nichts angeben und die autogrowth Option eingestellt ist, kann Ihre Datenbank bis zur Größe Ihrer Festplatte anwachsen. Dieser Parameter kann ebenfalls entweder in Megabyte oder Kilobyte angegeben werden. • FILEGROWTH - Dieser Parameter gibt an, welche Schrittweite für die dynamische Größenänderung Ihrer Datenbank verwendet wird. Dieser Wert kann entweder in Megabyte, Kilobyte oder als prozentualer Anteil der Dateigröße zum Zeitpunkt der Größenänderung angegeben werden. Falls Sie hier nichts angeben wird der Vorgabewert von 1 Mbyte verwendet. • LOG ON - Gibt an, wo sich die Transaktionsprotokolle befinden, und welche Größe sie besitzen. • FOR LOAD - Dieser Parameter markiert diese Datenbank für die ausschließliche Ver- wendung durch die Datenbankbesitzer (dbo). Dieser Parameter ist nur aus Gründen der Abwärtskompatibilität vorhanden, und sollte in SQL Server 2000 nicht verwendet werden. • FOR ATTACH - Dieser Parameter fügt einen Satz von Dateien an, die eine Datenbank darstellen. Diese Dateien müssen vorher erstellt und dann vom SQL Server getrennt worden sein. Aufgabe: Erstellen Sie eine neue Datenbank namens Testdaten mit der folgenden Befehlsfolge im SQL Server Query Analyzer: Nach der Eingabe mit F5 bestätigen! Es erfolgt die Meldung: Der CREATE DATABASE-Prozess reserviert 2.00 MB auf dem Datenträger 'Testdaten'. Der CREATE DATABASE-Prozess reserviert 1.00 MB auf dem Datenträger 'Test_log'. Die Datei Testdaten ist Bestandteil der Gruppe Primary. Dies ist die standardmäßige Dateigruppe. Die Verwendung von Dateigruppen kann Vorteile sowohl für die Administration als auch für die Leistung der Datenbank haben. Durch verschiedene Dateigruppen kann bei großen Datenbanken die Zugriffsgeschwindigkeit vergrößert werden, wenn die einzelnen Dateien auf verschiedenen Festplatten untergebracht werden. Die anfängliche Größe der Datei beträgt 2 MB, die maximale Größe ist 20 MB. Sie wird in Schritten von 1 MB vergrößert. -7- Microsoft SQL-Server 2000 Anleitung Es wird außerdem eine Transaktionsdatei mit dem Namen Testlog erzeugt (1 MB Anfangsgröße, 10 MB Maximum, Vergrößerung in Schritten von 1 MB. Um anschließend die Datenbank auszuwählen, aktivieren Sie den Listenpfeil bei DB in der Symbolleiste und klicken auf Aktualisieren. Anschließend ist die Datenbank Test in der Auflistung enthalten. 3 Tabellen erstellen Um Tabellen erstellen zu können, müssen Ihnen die Datentypen in SQL Server bekannt sein: Gruppe Datentyp Bemerkung Zeichenkette char(n), varchar Speichert Zeichenketten. Binär binary(n), varbinary in Paaren von 2 Byte Speichert binäre Daten. Ganzzahl int, smallint, tinyint Speichert ganzzahlige Werte. Ungefähr numerisch float, real (Gleitkomma) Speichert ungefähr numerische (Gleitkomma) Werte. Genau numerisch decimal, numeric Speichert genaue numerische Werte. Besonders bit, text, image Speichert ein einzelnes Bit, Zeichendaten größer als 8000 Byte oder Bilddaten. Datum und Zeit datetime, smalldatetime Speichert Datums- und Zeitwerte. Währung money, smallmoney Speichert Währungswerte. Systemgeneriert timestamp Speichert Werte von Datentypen, die automatisch vom SQL Server erstellt oder inkrementiert werden. Synonym Ordnet ANSI-Datentypen Datentypen des SQL Server zu. Benutzerdefiniert Datentypen, die Sie zur Speicherung von Daten selbst definieren können. Berechnete Spalte Speichert den Ausdruck, der zur Berechnung der Spalte verwendet wird. Beachten Sie, dass hier nicht die Ergebnisdaten, sondern lediglich die Ausdrücke gespeichert werden, die die Ergebnisdaten erzeugen. Unicode Nchar, ntext, varchar Speichert Daten im Unicode-Format (ein Doppelbyte pro gespeichertem Zeichen). Zum Erstellen von Tabellen gibt es wieder zwei Möglichkeiten: a) die Befehlseingabe über den Query Analyzer in Transact-SQL b) den Enterprise Manager zu a) die Syntax zur Erstellung einer Tabelle lautet: -8- Microsoft SQL-Server 2000 Anleitung CREATE TABLE CREATE TABLE [Datenbank.[Besitzer.]Tabellenname ( Spaltenname Datentyp [Identität|Einschränkung|NULL|NOT NULL] [...] ) Aufgabe: Erstellen Sie in der geöffneten Datenbank Test folgende Tabelle: CREATE TABLE Mitarbeiter ( mitarb_id tinyint Primary key IDENTITY NOT NULL, Vorname char(15), Name char(20) NOT NULL, Strasse varchar(30), Postfach varchar(30), Plz char(5), Anfangsdatum datetime ) An der Syntax sehen Sie, dass jeweils zuerst das Feld, dann der Datentyp und (bei den meisten Feldern) die Länge genannt wird. Z. B.die Zeile:: Ort varchar(30) legt das Feld Ort als Zeichenfeld (char = charakter = Buchstabe) mit 30 Zeichen Länge an. Nur das erste Feld muss noch genauer erklärt werden: Primary key Dieses Feld ist der Primärschlüssel der Tabellel IDENTITY Gibt an, dass es sich bei der neuen Spalte um eine Identitätsspalte handelt. Wenn eine neue Zeile zur Tabelle hinzugefügt wird, stellt SQL Server einen eindeutigen Wert für die Spalte bereit (wird jeweils inkrementiell um 1 erhöht, wie Autowert in Access) Not null Das Feld darf nicht leer bleiben Aufgabe: Löschen Sie jetzt zunächst die Befehlszeilen im Query Analyzer und geben Sie dann den Befehl ein: select * from mitarbeiter Obwohl noch keine Daten eingegeben wurden, zeigt der Query Analyzer schon die Spalten der neuen Tabelle an: 4 Daten über SQL eingeben Die erste Tabelle, die im SQL Server erstellt wurden, soll jetzt dazu verwendet werden, über SQL-Anweisungen auch Daten einzufügen. Die allgemeine Syntax dazu lautet: INSERT INTO Tabellenname (Spalte1, Spalte2...) VALUES (Wert1, Wert2...) -9- Microsoft SQL-Server 2000 Anleitung Aufgabe: Verwenden Sie den nachfolgenden Befehl, um einen Mitarbeiter in die Tabelle Test einzugeben (Voraussetzung: Die Datenbank Test ist geöffnet) INSERT INTO Mitarbeiter (Vorname, Name, Strasse, Ort, PLZ) VALUES ('Gerd', 'Faber', 'Schönhauser Strasse','Köln','50968') Aufgabe: Lassen Sie sich das Ergebnis anzeigen: Aufgabe: Nehmen Sie ebenfalls die folgenden Mitarbeiter auf: Anna Moltke Bonner Strasse Köln 50968 Peter Holzmann Rathausstrasse 49 Troisdorf 53844 Karin Grosser Poststrasse 23 Troisdorf 53844 Heinz Lindemann Rheinuferweg 45 Köln 50986 Aufgabe: Lassen Sie sich jetzt die Mitarbeiter anzeigen (select * from Mitarbeiter) Aufgabe: Erstellen Sie in derselben Datenbank eine Tabelle Abteilung. Diese Tabelle soll aus den Feldern Abt_id, Abt_Name, Abt_Leiter und Mitarb_id bestehen. Überlegen Sie selbst sinnvolle Datentypen. ) 4.1 Datenbanken mit dem Enterprise Manager erstellen Der zweite Weg zur Anlage einer Datenbank erfolgt über den Enterprise Manager. Über Start, Programme, Microsoft SQL Server , Enterprise Manager starten Sie den Enterprise Manager. - 10 - Microsoft SQL-Server 2000 Anleitung Klicken Sie auf das PlusZeichen, bis Sie Ihren Server am roten Blitz erkennen: Öffnen Sie weiter mit dem PlusZeichen, bis der Ordner Datenbanken geöffnet ist: Im Kontextmenu mit der rechten Maustaste erreichen Sie den Befehl Neue Datenbank Verwenden Sie den Namen Test2 und stellen Sie die Angaben zur Datenbank- und zur Transaktionsprotokolldatei ein. Zum Bestätigen klicken Sie auf OK. 4.2 Datenbanken mit dem Assistenten einrichten Über den Enterprise Manager erreichen Sie auch den Assistenten zum Einrichten einer neuen Datenbank. Gehen Sie folgendermaßen vor, wenn Sie den Datenbankerstellungsassistenten verwenden wollen: - 11 - Microsoft SQL-Server 2000 Anleitung Klicken Sie auf die + Zeichen, bis Sie Ihren Server und den Ordner Datenbanken erreicht haben. Wählen Sie dann den Befehl Extras Assistenten Klicken Sie Datenbank und dann Datenbankerstellungsassistent auf: Zunächst erscheint ein Willkommensbildschirm. Klicken Sie auf Weiter. Im folgenden Schritt wird der Name der Datenbank (Test3) und der Speicherort bestimmt. Klicken Sie dann auf Weiter. Im nächsten Schritt können Sie die anfängliche Datenbankgröße festlegen In diesem Schritt geht es um die Vergrößerung der Datenbank: - 12 - Microsoft SQL-Server 2000 Anleitung Hier werden die Transaktionsprotokolldateien festgelegt Auch hier geht es um die Schritte zur Vergrößerung der Dateien: Dies ist der letzte Schritt. Klicken Sie auf Fertigstellen. Der Assistent fragt, ob Sie auch einen Datenbankwartungsplan erstellen wollen. Bestätigen Sie mit Ja, um sich die einzelnen Schritte anzusehen, die hier nicht alle abgedruckt werden sollen. 4.3 Tabellen mit dem Enterprise Manager erstellen Um Tabellen mit dem Enterprise-Manager zu erstellen, rufen Sie Ihren Server im Konsolenstamm auf und öffnen die Datenbank, in der die Tabelle erstellt werden soll. Sie sehen dann im Inhaltsbereich eigene Tabellen und Systemtabellen: - 13 - Microsoft SQL-Server 2000 Anleitung Um eine neue Tabelle zu erstellen, klicken Sie in der rechten Fensterhälfte auf die rechte Maustaste und wählen den Befehl Neue Tabelle. Hier können die Felder der Tabelle definiert werden. Wenn die Eingabe beendet ist, klicken Sie auf das Symbol zum Speichern. Dabei wird nach dem Namen der Tabelle gefragt. Nennen Sie die Tabelle Dienstwagen. Aufgabe: Richten Sie mit dem Enterprise Manager eine Tabelle Dienstwagen in der Datenbank Test ein. Die Tabelle soll die folgenden Felder enthalten: Auto_Id Bestimmen Sie selber die Autonummer Felddatentypen. Marke Typ PS Baujahr Kaufdatum Kaufpreis 5 Projekte in Access Im folgenden soll das Zusammenwirken von Access und SQL Server mit Hilfe von Projekten getestet und ausprobiert werden. Der folgende Auszug aus der Access-2000-Hilfe (kursiv) erläutert, was ein Projekt ist: 5.1 Was ist ein Microsoft Access-Projekt? Ein Microsoft Access-Projekt (.adp) repräsentiert eine neue Art von Access-Datei, die einen eigenen effizienten Zugriff auf eine Microsoft SQL Server-Datenbank über die OLE DB-Komponentenarchitektur ermöglicht. Mit einem Access-Projekt können Sie eine Client/Server-Anwendung genauso einfach erstellen wie eine Dateiserver-Anwendung. Eine solche Client/Server-Anwendung kann eine herkömmliche Lösung auf der Grundlage von Formularen und Berichten sein oder eine webbasierte Lösung unter Verwendung von Datenzugriffseiten oder eine Kombination von beidem. Ein Access-Projekt wird als "Projekt" bezeichnet, da es nur code-basierte oder HTMLbasierte Datenbankobjekte enthält: Formulare, Berichte, Datenzugriffsseiten, Makros und Module. Dies sind die Datenbankobjekte, die Sie zur Erstellung einer Anwendung verwenden. Anders als eine Microsoft Access-Datenbank enthält ein Access-Projekt keine Daten oder an Datendefinitionen gebundene Objekte, also keine Tabellen, Sichten, Datenbankdiagramme oder Gespeicherte Prozeduren (die auch anwendungsbezogenen - 14 - Microsoft SQL-Server 2000 Anleitung Code enthalten können). Stattdessen werden diese Datenbankobjekte in der SQL ServerDatenbank gespeichert. Dazu soll die Datenbank Winter01 mit der IHK-Prüfungsaufgabe zunächst im SQL Server erstellt und dann in Access als Frontend bearbeitet werden. Aufgabe: Erstellen Sie die Datenbank Winter01 mit dem Enterprise Manager. Öffnen Sie dann die Datenbank und markieren Sie Tabellen Dann können Sie den Befehl Vorgang Neue Tabelle verwenden. Aufgabe: Richten Sie jetzt die erforderlichen Tabellen ein. Am Beispiel der Tabelle Dozent sehen Sie: Aufgabe: Legen Sie die anderen Tabellen nach demselben Schema an. Orientieren Sie sich an den Daten, die auf den Tabellen des beiliegenden Blattes dargestellt sind. 5.2 Access als Frontend für den SQL Server Unter „Frontend“ versteht man die Oberfläche, die – gewissermaßen an „vorderster Front“ zugrunde liegt. In diesem Fall soll die Leistungsfähigkeit der „großen“ Client-ServerDatenbank und die Benutzerfreundlichkeit der „kleinen Schwester“ Access verbunden werden. Die Datenbank an sich wird auf dem SQL-Server bereitgehalten, die Pflege der Tabellen, das Gestalten von Abfragen usw. kann mit Access erfolgen. Man spricht von einem „Projekt“, wenn Access Dienste für den SQL Server übernimmt. Deshalb zu Beginn in Access der Befehl: Datei Neu Im Dialogfeld wählen Sie Projekt (bestehende Datenbank) - 15 - Microsoft SQL-Server 2000 Anleitung dann OK Klicken Sie auf OK. Vergeben Sie den Namen Winter01 .Klicken Sie dann auf die Schaltfläche Erstellen. Im nächsten Schritt sehen Sie die Verknüpfungseigenschaften Geben Sie hier Ihren Servernamen ein Bei Punkt 2: Integrierte Sicherheit von Windows NT Bei Punkt 3 schließlich der Name der Serverdatenbank Dann mit OK bestätigen. Anschließend sehen Sie die Datenbank in ähnlicher Form, wie Sie es von Access her kennen. (in der Abbildung nur mit den beiden ersten Tabellen) - 16 - Microsoft SQL-Server 2000 Anleitung Wenn Sie über Access die Daten eingegeben haben, können Sie über den Query Analyzer vom SQL Server wieder abrufen: 6 Sichten erstellen Während der Beschäftigung mit Access haben Sie Abfragen als gespeicherte Filter kennen gelernt; häufig gestellte Fragen an den Datenbestand werden als Abfrage erstellt. In einer Abfrage sind bekanntlich nicht die Daten gespeichert, sondern nur die Frage an den Datenbestand, ähnlich wie Sie eine Frage mit dem Select-Befehl mit SQL erstellen und ein Ergebnis angezeigt bekommen. Dieses Ergebnis - die sichtbaren Daten – sind in Access auch als Dynaset bezeichnet worden. Dynaset bedeutet: Dynamisches Set von Daten. Wenn die Abfrage zu einem späteren Zeitpunkt verwendet wird, dann resultieren andere Daten aus der selben Abfrage. Beim SQL Server spricht man nicht von Abfragen, sondern von Sichten (engl. View). Wenn eine Datenbank nur von Ihnen verwendet wird, dann ist eine Sicht nichts anderes als eine Abfrage. Aber bei der Client-Server-Datenbank kommt der Aspekt der Zugriffsberechtigung durch verschiedene Benutzer dazu. Eine Sicht ermöglicht es, genau anzugeben, wie ein Benutzer die Daten sehen soll. Die folgende Aufzählung aus dem Buch von Richard Waymire, SQL Server 7.0, fasst den Sinn von Sichten zusammen: • Sie ermöglichen eine Kontrolle über das, was der Benutzer sehen darf, was sowohl aus Sicherheits- wie auch Bedienungsgründen nützlich ist. Der Benutzer braucht sich nicht mehr mit Zusatzinformationen zu befassen, die ihn nicht interessieren. • Sie vereinfachen die Bedienerführung bei oft verwendeten Abfragen. Hierdurch ist der Benutzer in der Lage, die Sicht mit einer einfachen Anweisung ablaufen - 17 - Microsoft SQL-Server 2000 Anleitung lassen zu können, anstatt jedes Mal eine Anzahl von Parametern mitgeben zu müssen. • Sie bieten Sicherheit. Die Benutzer haben die Kontrolle nur über das, was Sie sie auch sehen lassen. Dies kann eine Untermenge von Zeilen oder Spalten, statistische Informationen oder eine Untermenge von Informationen aus anderen Sichten sein. • Da eine Sicht ein Datenbankobjekt darstellt, können Sie ihr Benutzerberechtigungen zuweisen, was viel effizienter ist, als dieselben Berechtigung einzelnen Spalten in einer Tabelle zuzuweisen. Im Programm MS-SQL-Server erstellen wir jetzt zunächst Sichten mit dem Enterprise Manager. Dazu soll die Beispieldatenbank Pubs (=publishers) verwendet werden, die bei der Standard-Installation von SQL-Server zur Verfügung steht. Aufgabe: Starten Sie den Enterprise Manager. Öffnen Sie die Datenbank Pubs (= publishers, dt. Verlage). Klicken Sie mit der rechten Maustaste auf Neue Sicht Sie sehen, dass der Bildschirmaufbau den Abfragen von Access ähnelt: Klicken Sie auf , um die Liste der Tabellen anzeigen zu lassen: Gehen Sie jetzt so vor: ⇒ Wählen Sie authors, titleauthor und title - 18 - Microsoft SQL-Server 2000 ⇒ ⇒ Klicken Sie dann die Kästchen bei au_lname und title an Sie können sehen, welcher SQL-Befehl dabei erzeugt wird: SELECT FROM ⇒ Anleitung dbo.authors.au_lname, dbo.titles.title dbo.authors INNER JOIN dbo.titleauthor ON dbo.authors.au_id = dbo.titleauthor.au_id INNER JOIN dbo.titles ON dbo.titleauthor.title_id = dbo.titles.title_id Klicken Sie das rote Ausrufungszeichen zum Ausführen der Sicht: Sie sehen dann unten im Ergebnisbereich direkt die Zusammenstellung von Autoren und Titeln: Aufgabe: Speichern Sie die Sicht mit dem Namen Autoren_Titel. Schließen Sie dann die Sicht. Wenn mit einer bereits bestehenden Datenbank gearbeitet wird, dann ist es erforderlich, zunächst etwas über die Tabellen und deren Beziehungen zu wissen. Wenn wir beispielsweise im Sicht-Entwurfs-Bildschirm nur die Tabellen Autors und Title ausgewählt hätten, dann wäre - 19 - Microsoft SQL-Server 2000 Anleitung das Ergebnis ein Cross Join gewesen, also die Verbindung von jedem Autor mit jedem Buch. Deshalb ist es sinnvoll, sich zunächst das Datenbankdiagramm zu erstellen bzw. anzeigen zu lassen: Aufgabe: 1) Bei geöffneter Datenbank Pubs soll nun Diagramme markiert werden. 2) rechte Maustaste für das Kontextmenü: 3) den Assistenten abbrechen (er führt m. E. nicht zu übersichtlichen Ergebnissen), 4) Tabelle hinzufügen 6) Wählen Sie die Tabellen aus, die nicht mit sys beginnen (Systemtabellen). 7) Anschließend durch Schieben mit der Titelleiste noch etwas platzsparender anordnen Dann sehen Sie die Beziehungen zwischen allen Tabellen der Datenbank: 6.1 Kriterien in Sichten In Sichten wie auch in Abfragen werden Krierien vergeben. Das sind die Einschränkungen, das, was beim Suchen beachtet werden soll. Dem entspricht die where-Klausel in der Select-Abfrage. Als Beispiel sehen Sie in der folgenden Abbildung eine Sicht, die aus der Tabelle authors diejenigen sucht, die aus dem Staat Kalifornien (CA) kommen und einen Contract haben. - 20 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Erstellen Sie diese Sicht und speichern Sie mit dem Namen Autor_1 . Um die folgenden Aufgaben zu lösen, ist es zum Teil erforderlich, die Tabellen zu öffnen und die Feldeigenschaften und –inhalte zu sehen, zum Teil auch, das vorher erstellte komplette Datenbankdiagramm ( hier auch: Abbildung S. 20) anzusehen, um zu wissen, welche Tabellen in die Sicht aufgenommen werden müssen. Übungsaufgaben zum Erstellen von Sichten mit dem Enterprise Manager: 1) Welche Autoren (Name und Adresse) schreiben Bücher vom Typ business? 2) Erstellen Sie eine Sicht, die die Titel auflistet, die netto innerhalb 30 Tagen gezahlt werden müssen (payterms: net 30 aus der Tabelle sales) - 21 - Microsoft SQL-Server 2000 Anleitung 3) Welche Titel und welche Autoren vertreibt der Verlag New Moon Books? 4) Bei welchen Verlagen (publisher) sind die Autoren verlegt, die in Oakland wohnen? 5) Welche Angestellten (employees) haben mit dem publisher Algodata Infosystems zu tun? 6) Wie heißt der Verlag aus Frankreich? 7) Listen Sie mit einer Sicht die Titel und die Verlage auf, die nach dem 01.01.1994 verkauft wurden (Tabelle sales verwenden!) 6.2 Sichten über Access als Frontend für bestehende SQL-Server-Datenbanken Es ist ebenfalls möglich, Access zu verwenden, um mit Sichten auf den Datenbestand einer SQL-Server-Datenbank zuzugreifen. Dies geschiegt über ein Projekt. Zusätzlich zum SQL Server muss Access gestartet worden sein. Wählen Sie dazu in Access den Befehl Datei Neu, dann Projekt (Bestehende Datenbank) Access fragt nach dem Dateinamen des Projekts und fordert zum Speichern auf: - 22 - Microsoft SQL-Server 2000 Anleitung 1. Geben Sie hier Ihren Ser - vernamen an 2. Klicken Sie hier an, um das Passwort von Windows zu verwenden: 3. Erst dann kann man unter Punkt 3) die Datenbank (pubs) auswählen: Anschließend haben Sie über Access den Zugriff auf die Tabellen der SQL-ServerDatenbank: Sie haben ebenfalls Zugriff auf die vorher erstellten Sichten. - 23 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Erstellen Sie von Access aus eine Sicht auf die Datenbank pubs. Die Vorgehensweise ist nicht dieselbe wie im SQL Server: Verwenden Sie zunächst: Im leeren Sicht-Entwurfsbildschirm dann: Symbol Tabellen hinzufügen, auf das Plus-Symbol bei Tabellen klicken, Es sollen die Tabellen jobs und employees verwendet werden. Aus diesen Tabellen wählen Sie die angegebenen Felder und das Kriterium für job_desc (Job description= Beschreibung der Tätigkeit) : Managing director. Das Ergebnis wird so angezeigt: Mit dem Projekt über Access liegt eine andere Vorgehensweise vor, wie man sich über Sichten den Zugriff auf die Daten erschließen kann. Die Darstellung ist meines Erachtens aber über den Enterprise Manager übersichtlicher, weil auch die SQL-Befehlssyntax und das Ergebnis direkt auf einer Bildschirmansicht dargeboten werden. - 24 - Microsoft SQL-Server 2000 Anleitung 6.3 Sichten (Views) über SQL-Befehle erstellen Wenn Sichten über SQL erstellt werden, dann sind sie genauso nutzbar wie die Sichten, die zuvor über den Enterprise Manager erstellt worden sind: Es wird eine Betrachtungsweise der Tabelle (oder mehrerer Tabellen) erzeugt, die man auch als „virtuelle Tabelle“ beschreiben könnte. Für Nutzer der Datenbank werden Spalten der Tabelle abgefragt, mit oder ohne Einschränkung durch Kriterien (hier: Where-Klauseln). Wenn eine Sicht erzeugt wird, dann wird kein Datenbankobjekt erzeugt, d. h. die Daten, die in Tabellenform abgerufen werden und aussehen wie eine Tabelle, sind nicht tatsächlich physikalisch vorhanden, sie werden ja aus der Datenbanktabelle selbst abgerufen, Wenn sich die zugrundeliegenden Daten in der Datenbank ändern, dann liefert auch die Sicht andere Daten. Die SQL-Syntax für die Erstellung der Sicht lautet: CREATE VIEW <Sichtname> [(Spalte1, Spalte2...)] AS SELECT <Tabellenname.Spaltennamen> FROM <Tabellenname> WHERE <Bedingung> Am Beispiel erklärt: Wenn eine Select-Abfrage aus einer Tabelle Artikel die Felder ArtNr und Bezeichnung für den Lieferanten mit der Lief_Nr 3 abfragt, dann lautet zunächst der SQL-Befehl: Select ArtNr, Bezeichnung from Artikel where Lief_Nr=3 Dieser Select-Befehl müsste jedes Mal neu gegeben werden, wenn man diese Informationen haben möchte; deshalb ist es sinnvoll, eine Sicht zu erzeugen, die später immer wieder zur Verfügung steht. Wenn im vorliegenden Beispiel die Select-Abfrage als Sicht mit dem Namen Art_Sicht erzeugt werden soll, dann heißt der Befehl: create View Art_sicht as Select ArtNr, Bezeichnung from Artikel where Lief_Nr=3 Am Beispiel des Query Analyzer im Programm MS-SQL-Server sollen jetzt Beispiele für Sichten eingeübt werden. Aufgabe: Öffnen Sie den Query Analyzer. In diesem Programm soll dann die Datenbank Pubs geöffnet werden: ) dann sehen Sie (Ausschnitt): Wenn Sie alle Felder auflisten ( Das erste Beispiel soll eine Sicht mit dem Namen Vertragsautor erzeugen, die aus der Tabelle authors die Felder au_lname und au_fname abfragt, und zwar für die Autoren, die einen Vertrag (contract) haben. Aufgabe: Erstellen Sie zuerst eine Abfrage dazu (zum Testen am Besten geeignet): select au_lname, au_fname from authors where contract=1 - 25 - Microsoft SQL-Server 2000 Anleitung Wenn die Abfrage die richtigen Ergebnisse liefert, dann kann der create view-Befehl einfach dazugesetzt werden create view Vertragsautor as select au_lname, au_fname from authors where contract=1 Es geschieht scheinbar nichts, wenn Sie F5 gedrückt haben, nur in der Statuszeile wird gemeldet: Um die Ergebnisse der Sicht zu sehen, rufen Sie sie auf wie eine Tabelle: Die Sicht ist jetzt gespeichert und jederzeit nutzbar, wenn die Datenbank pubs offen ist. Auch im Enterprise Manager sieht man sie in der Auflistung der Sichten: 6.4 Sicht erstellen, die Informationen aus verschiedenen Tabellen bereitstellt Im folgenden Beispiel soll eine Sicht erzeugt werden, die auf zwei Tabellen basiert, die miteinander in Beziehung stehen. Die Tabelle jobs enthält die folgenden Felder und Inhalte: Der rechts stehende Auszug aus dem Datenbankdiagramm zeigt die 1:nBeziehung zwischen den Tabellen jobs und employee - 26 - Microsoft SQL-Server 2000 Anleitung Die Tabelle employee, die hier nur im Ausschnitt wiedergegeben wird: Die folgende Abfrage selektiert die Felder Job-Beschreibung (job_desc aus der Tabelle Jobs), außerdem Vorname und Name (fname, lname) aus der Tabelle Employee. Dabei werden Aliasnamen für die Tabellen verwendet: select j.job_desc, e.fname,e.lname from jobs as j, employee as e where j.job_id=e.job_id Ergebnisse (im Ausschnitt) Noch besser ist es, wenn man direkt die Spaltenüberschriften so umbenennt, wie man sie sehen will: select j.job_desc as Tätigkeit, e.fname as Vorname,e.lname as Name from jobs as j, employee as e where j.job_id=e.job_id Wenn man weiß, wie die select-Abfrage lautet, dann ist die Sicht einfach zu erzeugen: SQL-Befehl zum Erzeugen der Sicht mit Namen Job-Liste: create View Job_Liste as select j.job_desc as Tätigkeit, e.fname as Vorname,e.lname as Name from jobs as j, employee as e where j.job_id=e.job_id Um später auf die Sicht zuzugreifen, ist dann der Select-Befehl so möglich: select * from Job_Liste Aufgabe: Erzeugen Sie jetzt folgende Sichten zur Datenbank Pubs: 1. Eine Sicht namens CA soll alle Felder sämtlicher Autoren aus dem Staat Kalifornien (CA) zeigen. 2. Eine Sicht namens 20 soll die Felder title, prime und pubdate zeigen, die mehr als 20 DM kosten. 3. Eine Sicht namens Titel_Autoren soll Autoren und deren Buchtitel anzeigen (welcher Autor schrieb welches Buch) 4. Eine Sicht namens Sales soll die Bücher (mit Feldüberschriften auf deutsch) anzeigen, die nach dem 01.01.1994 bestellt wurden (ord_date in der Tabelle Sales) - 27 - Microsoft SQL-Server 2000 Anleitung Befehlssyntax einer Sicht anzeigen lassen: ergibt: (Vorausgesetzt, die Sicht mit dem Namen Vertragsautor existiert (s. S. 25) Auf diese Art ist es möglich, sich nachträglich die SQL-Syntax zu dem Thema anzeigen zu lassen. 6.5 Berechnungen in Sichten: Es ist bekanntlich in SQL-Abfragen möglich, Felder mit numerischen Daten zu verwenden, um damit Berechnungen durchzuführen. Bezogen auf die Datenbank Pubs: select title, (price*ytd_sales) as gesamt from titles Dies ergibt: .... Daraus kann nach normaler Methode (mit dem Befehl create view) eine Sicht erstellt werden, die dann jederzeit in aktualisierter Form aufgerufen werden kann: create view Gesamtverkauf as select title, (price*ytd_sales) as gesamt from titles Diese Sicht kann dann später benutzt werden, um damit weitere Bedingungen an die Analyse des Datenbestands zu stellen: select * from gesamtverkauf where gesamt is Null Mit dieser Sicht werden dann nur die Bücher angezeigt, bei denen das berechnete Feld keinen Wert enthält. - 28 - Microsoft SQL-Server 2000 Anleitung 7 Benutzerkonten Benutzerkonten können entweder über sp_addlogin (Query Analyzer) oder über den Enterprise Manager hinzugefügt werden. Um einen neuen Benutzer einzurichten, muss zunächst ein Benutzer in Windows 2000 existieren. Durch die Windows-NT-Authentifizierung wird ja erreicht, dass sich jemand in Windows anmeldet und dadurch auch Berechtigungen für den SQL Server erhält. Aufgabe: Wählen Sie aus der WindowsSystemsteuerung Benutzer und Kennwörter und richten Sie einen neuen Benutzer Paul ein: Geben Sie ein Kennwort und richten einen Standardbenutzer (ohne Admin-Rechte) ein. Wenn sich der Administrator jetzt in Windows abmeldet und eine Neuanmeldung als Paul durchgeführt wird, dann kann er zunächst nicht mit dem SQL Server arbeiten: Es ist zunächst erforderlich, als Administrator zu arbeiten und dort eine neue Anmeldung für Paul durchzuführen. Aufgabe: Starten Sie den Enterprise Manager (vorher als Administator anmelden) . Wählen Sie dann Sicherheit, Benutzernamen - 29 - Microsoft SQL-Server 2000 Anleitung rechte Maustaste auf Benutzernamen: Klicken Sie dort auf die kleine Schaltfläche mit den drei Pünktchen. hier erscheint Paul Martens: Dann: Hinzufügen anklicken (Domäne ist Havelring) unten im Dialogfeld: Berechtigung nur für die Datenbank pubs gewähren: Aufgabe: Wählen Sie Eigenschaften, Datenbankzugriff: Sie sehen Paul als Benutzer der Datenbank pubs. - 30 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Melden Sie sich jetzt wieder als Administrator in Windows 2000 an. Öffnen Sie (im Enterprise Manager) Datenbanken, pubs, Benutzer, dann sehen Sie rechts: Es ist also zusätzlich zum dbo (database owner) und dem eben eingerichteten Paul auch noch ein guest (=Gast)Zugang offen. Über den Zugang als Gast kann jeder auf die Datenbank zugreifen. Aufgabe: Öffnen Sie statt der Datenbank pubs jetzt die Datenbank Northwind und entfernen Sie dort den Gastzugang. Für die Datenbank Northwind gibt es jetzt nur noch den sa (=Systemadministrator) : Aufgabe: Jetzt müssen Sie sich noch einmal als Paul anmelden. Versuchen Sie jetzt, auf die Datenbank Northwind zuzugreifen. Sie erhalten die Meldung: Aufgabe: Melden Sie sich noch einmal als Administrator an. Gehen Sie in den Enterprise Manager, dort auf: Datenbanken, pubs, Benutzer, Paul: rechts im Fenster auf Paul, rechte Maustaste, Eigenschaften: Sie sehen hier die Überschrift: Mitglied in Datenbankrollen Es muss jetzt geklärt werden, was es mit den Rollen auf sich hat, und wie man eigene Rollen erstellen kann. - 31 - Microsoft SQL-Server 2000 Anleitung 8 Rollen Rollen in der Datenbank SQL Server sind mit Gruppen in Windows vergleichbar. Durch Rollen werden Benutzer zu Gruppen zusammengefasst. Jede Datenbank kann Rollen enthalten. Sie können auch eigene Rollen hinzufügen. Der folgende Teil (kursiv formatiert) ist wörtlich aus: Waymire, Richard, SQL Server 7 in 21 Tagen, S. 193 ff:). In Bezug auf die Rollen unterscheidet sich SQL Server 2000 kaum von der Vorversion 7.0. 8.1 Die öffentliche Rolle SQL Server 7.0 enthält eine eingebaute Rolle namens public (Öffentlich) in jeder Datenbank. Alle Benutzer, Gruppen und Rollen sind Mitglieder der Rolle public und können nicht entfernt werden. Stellen Sie sich die Rolle public als ähnlich der Gruppe Everyone (jeder) von Windows NT vor. Es ist eine bequeme Abkürzung, um sich auf alle Benutzer zu beziehen, ohne sie explizit nennen zu müssen. Sie sehen eine Verwendung hiervon am Tag 6, »Arbeiten mit Berechtigungen«. Wenn Sie Abbildung 5.14 noch mal betrachten, haben Sie den Gruppennamen public gesehen, der für die meisten Benutzer gezeigt wurde. 8.2 Serverweite Rollen Was wir in der heutigen Lektion immer wieder sehen, ist, daß die Anmeldung sa allmächtig ist und alles tun kann, was er oder sie momentan mit SQL Server tun möchte. Obwohl dies wahr ist, liegt es in der Tat daran, daß die Anmeldung sa ein Mitglied der serverweiten Rolle namens sysadmin ist. SQL Server hat sieben serverweite Rollen. Sie können eine Anmeldung jederzeit zu einem Mitglied von einer oder mehreren dieser serverweiten Rollen machen. Sie können aus der Liste der serverweiten Rollen jedoch nichts entfernen oder zufügen. Sie können sa aus der serverweiten Rolle sysadmin nicht entfernen. 8.2.1 Verfügbare serverweite Rollen Die folgende Liste ist der vollständige Satz verfügbarer serverweiter Rollen. Studieren Sie sie sorgfältig, so daß sie wissen, wann Sie sie verwenden sollten. • sysadmin - Mitglieder der Rolle sysadmin können alles im SQL Server tun. Sie scheinen der dbo von jeder Datenbank zu sein (selbst, wenn sie es nicht sind). Sie umgehen im wesentlichen die Berechtigungen und Sicherheitssysteme. • serveradmin - Mitglieder der Rolle serveradmin können Konfigurationsoptionen mit der gespeicherten Systemprozedur sp_configure aufstellen und können den Server herunterfahren. Serveroperator sind gute Kandidaten als Mitglieder dieser Rolle. Beachten Sie, daß Mitglieder dieser Rolle nur das Transact-SQL- Kommando SHUTDOWN geben können, um den Server herunterzufahren. Ihre Berechtigungen zur Steuerung von Diensten sind Windows-NT-Rechte - nicht SQL-Server-Rechte. • setupadmin - Mitglieder der Rolle setupadmin können verknüpfte Server installieren und konfigurieren und eine gespeicherte Prozedur markieren, so daß sie beim Hochfahren ausgeführt wird. • securityadmin - Mitglieder der Rolle securityadmin können Serveranmeldungen sowie Berechtigungen zur Erstellung von Datenbanken erstellen und kontrollieren und können das Fehlerprotokoll von SQL Server lesen. Wieder sind Operatoren Kandidaten für diese Rolle und wahrscheinlich ist Ihr Anwenderunterstützungspersonal ein Mitglied dieser Rolle. • processadmin - Mitglieder der Rolle processadmin können Prozesse steuern, die auf dem Datenbankserver laufen. Dies beinhaltet typischerweise das »Killen« durchge- - 32 - Microsoft SQL-Server 2000 Anleitung gangener Abfragen und Anwenderstützungspersonal braucht dieses Recht möglicherweise. • dbcreator - Mitglieder der Rolle dbcreator können Datenbanken auf Ihrem Server erstellen und ändern. DBAs sind gute Kandidaten für diese Rolle (wenn Sie nicht wollen, daß Ihr DBA ein Mitglied der Rolle sysadmin ist). • diskadmin - Mitglieder der Rolle diskadmin können Dateien und das Dateiwachstum auf dem Server verwalten. DBAs sind gute Kandidaten für diese Rolle (wenn Sie nicht wollen, daß Ihr DBA ein Mitglied der Rolle sysadmin ist). Zurück zum Benutzer Paul: Aufgabe: Lassen Sie den Benutzer Paul für die Rollen zu, die Sie auf der nebenstehenden Abbildung sehen. Klicken Sie jetzt (oben im Dialogfeld) auf Berechtigungen . Nun sehen Sie, dass Sie Paul für jede Tabelle separat Rechte entziehen und gewähren können. Sie können ein Feld anklicken, dann erscheint es grünes Häkchen: noch einmal anklicken, wird der Zugriff verweigert: . Aufgabe: Geben Sie dem Benutzer Paul den folgenden Zugriff auf die Daten: Tabelle authors: nur select Tabelle titles: select, insert, update Tabelle Titleauthors: select, insert, update - 33 - Wenn Sie es Microsoft SQL-Server 2000 Anleitung Aufgabe: Melden Sie sich jetzt wieder als Paul an. Öffnen Sie den Enterprise Manager, dann Datenbanken, Tabellen. Öffnen Sie jetzt die Tabelle Authors (was möglich sein muss, denn Paul hat Leseberechtigung). Versuchen Sie dann, den Namen eines Autors zu ändern: SQL Server wird jetzt eine Fehlermeldung auf den Monitor bringen, denn dies ist nicht erlaubt (keine update-Berechtigung). Öffnen Sie jetzt die Tabelle Titles und ändern Sie einen Titel: Dies muss möglich sein, denn hier sind die Berechtigungen vorhanden. Im oben verwendeten Dialogfeld Berechtigungen sehen Sie auch die Schaltfläche Spalten: Dort können Sie – je nach vorher markierter Tabelle – die Rechte separat für bestimmte Spalten der Tabelle gewähren oder entziehen. Generell gilt, dass Benutzer meistens so viele Rechte wie möglich gerne für sich beanspruchen wollen. Sinnvoll ist es aber, Ihnen nur die Rechte zu gewähren, die auch tatsächlich benötigt werden, und nicht „auf Vorrat“ zu viele Rechte! Aufgabe: Richten Sie jetzt eine Benutzerin namens Andrea ein. (zuerst in Windows!). Andrea soll Rechte für die Datenbank Northwind, aber nicht für Pubs erhalten. Gewähren Sie jetzt: Rechte Tabellen nur select: Categorie, Customers select, insert, update, delete Orders, Order Details gar keine Berechtigung Employees Aufgabe: Melden Sie sich dann als Benutzerin Andrea an und testen Sie alle Zugriffsmöglichkeiten. - 34 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Ergänzen Sie die Tabelle Mitarbeiter, Datenbank Test, um ein Feld Gehalt mit folgenden Daten: Aufgabe: Jetzt sollen die vorher eingerichteten Benutzer Paul und Andrea folgende Rechte bezüglich dieser Tabelle haben: Paul darf das Gehalt der Mitarbeiter sehen, aber nicht ändern, und Andrea darf das Gehalt der Mitarbeiter gar nicht sehen (dies ist entweder mit spaltenweiser Berechtigung oder mit einer Sicht möglich!). 9 Backup und Restore von Datenbanken Im Enterprise Manager erreichen Sie den Befehl zum Sichern einer Datenbank über die rechte Maustaste, wenn Sie die Markierung auf Datenbanken stellen: Datenbanken, Alle Tasks, Datenbank sichern... Als Datenbank erscheint zunächst die Master-Datenbank: Aufgabe: Es soll eine Sicherung der Datenbank Northwind hergestellt werden. Stellen Sie dazu oben Northwind ein und betätigen dann die Schaltfläche Nun muss der Pfad und ein Dateiname angegeben werden: Stellen Sie einen Pfad ein und vergeben Sie einen Dateinamen: Bestätigen Sie insgesamt dreimal mit OK . SQL Server meldet: - 35 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Löschen Sie jetzt (mit der rechten Maustaste) die Northwind-Datenbank. Im Meldungsfenster nehmen wir zunächst eine Option heraus: Anschließend soll die Datenbank wiederhergestellt werden. Nehmen Sie dazu den Befehl Datenbank, Alle Tasks, Datenbank wiederherstellen Stellen Sie hier ein: Dateigruppen oder Dateien und wählen Sie dann auch hier die Datenbank Northwind aus. Kreuzen Sie das Kontrollkästchen an: Wenn das Ergebnis folgendes ist und keine Tabellen usw. widerhergestellt werden, dann gehen Sie stattdessen so vor: Im Dialogfeld Datenbank wiederherstellen stellen Sie ein: und gehen dann über die Schaltfläche Dann wählen Sie im nächsten Dialogfeld Wiederherstellungsmedien wählen Klicken Sie hier auf Hinzufügen und gehen Sie dann über die Schaltfläche mit den drei Pünktchen zu der Datei, die vorhin angelegt wurde. - 36 - Microsoft SQL-Server 2000 Anleitung Bestätigen die dann wider mehrmals mit OK Wenn die folgende Meldung erscheinen sollte: Dann liegt es nur daran, dass oben im Dialogfeld noch die Master-Datenbank steht. Wichtig ist also, dass die Datenbank Northwind als wiederherzustellende Datenbank genannt ist.. Dann müssten von der Northwind-Datenbank alle Elemente wieder zu sehen sein. Aufgabe: Kopieren Sie jetzt die Datei aus dem Netzordner Public und stellen Sie daraus die Datenbank aus der IHK-Prüfung (Winter 03) wieder her. Dann müsste z. B. als Diagramm die folgende Darstellung zu sehen sein: Aufgabe: Nun soll die differentielle Sicherung ausprobiert werden. Dies ist eine Teilsicherung, die verwendet wird, um zum Beispiel nur das, was seit der letzten Sicherung in der Datenbank verändert wurde, neu zu sichern. Gehen Sie dazu so vor: 1. Erstellen Sie ein komplettes Backup der Datenbank pubs. Sehen Sie sich im Explorer die Daten dazu an: 2. Öffnen Sie jetzt die Tabelle Jobs und fügen Sie unten eine neue Zeile an: (die Nr. 15 nicht eintragen, es ist ein Autowert). - 37 - Microsoft SQL-Server 2000 Anleitung 3. Nehmen Sie jetzt wieder den Befehl Datenbanken, Alle Tasks, Datenbank sichern und nehmen dort die Einstellung Datenbank differentiell vor: 4. Löschen Sie die Datenbank Pubs im Enterprise Manager. Schauen Sie im Windows Explorer nach und vergleichen Sie die Dateiangaben zu der Datenbanksicherung vorher (bei Schritt 2) 5. Stellen Sie die Datenbank wieder her und vergewissern Sie sich durch das Öffnen der Tabelle Jobs davon, dass der hinzugefügte Datensatz wieder da ist. 10 Daten importieren Zur Vorbereitung auf die nächsten Aufgaben soll zunächst gezeigt werden, wie Importe aus anderen Datenformaten durchgeführt werden, hier exemplarisch am Beispiel einer ExcelTabelle. Aufgabe: Kopieren Sie zunächst die Excel-Datei Abteilung.xls vom Netz auf Ihre Festplatte. Gehen Sie dann im Enterprise Manager folgendermaßen vor, um die Daten zu importieren: 1. Erstellen Sie zunächst eine neue Datenbank mit dem Namen SQL 2. Markieren Sie die Datenbank und wählen den Befehl Alle Tasks, Daten importieren 3. Das erste Dialogfeld heißt Sie nur Willkommen. auf Weiter. . Klicken Sie 4. Im nächsten Dialogfeld wird die Datenbank ausgewählt. Wählen Sie oben Excel 972000 und bei Dateiname die vorher kopierte Datei Abteilung.xls - 38 - Microsoft SQL-Server 2000 Anleitung 5. Im nächsten Dialogfeld muss das Ziel gewählt werden. Hier soll es die vorher erstellte Datenbank SQL sein. 6. Im dann folgenden Dialogfeld geht es nur darum, ob Tabellen oder auch Abfragen übertragen werden sollen. Belassen Sie es bei der Vorgane und Klicken auf Weiter. 7. Im nächsten Dialogfeld können Sie auf Alle Auswählen klicken, es handelt sich ja bei der Datenquelle nicht um eine Datenbank, sondern nur um eine Excel-Datei: 8. Im nächsten Dialogfeld können Sie es bei der Vorgabe belassen und direkt auf Weiter klicken: 9. Nachdem Sie zum Schluss auf die Schaltfläche Fertigstellen klicken, wird der Import durchgeführt. 11 Select-Abfragen mit Transact-SQL-Statements In diesem Kapitel sollen die Möglichkeiten von Select-Abfragen vertieft werden. Der SQLServer bietet Ihnen eine Reihe von Erweiterungen der SQL-Befehle, die vor allem hier anhand der Aggregat-Funktionen besprochen werden sollen. Aufgabe: Starten Sie den Query Analyzer. Wählen Sie oben die Datenbank SQL. Geben Sie jetzt das SQL-Statement: select name, abteilung, gehalt from Abteilung Sie sehen: .... - 39 - Microsoft SQL-Server 2000 Anleitung Aufgabe: Geben Sie jetzt den Befehl: select abteilung,sum(gehalt) from Abteilung group by abteilung Das Ergebnis kennen Sie von früheren SQL-Übungen: Sie sehen im Vergleich der beiden SQL-Befehle, dass entweder Zusammenfassungen oder die Einzelergebnisse aus der Tabelle gezeigt werden. Mit dem Befehlszusatz compute (=berechnen) ist es möglich, Detailzeilen und Zusammenfassungen geliefert zu bekommen. Aufgabe: Testen Sie den Befehl: select name,abteilung,gehalt from Abteilung order by abteilung compute sum(gehalt) by abteilung Das Ergebnis ist: Zu einer Abteilung wird jeweils als Zusammenfassung das Ergebnis geliefert. Wichtig: compute by kann nur zusammen mit order by verwendet werden! Im folgenden Beispiel wird compute ohne den Zusatz by (und das heißt dann, für die ganze Tabelle) angewandt. Sie sehen, dass zuerst der normale select-Ausdruck erstellt wird und dann die Zusammenfassung durch compute gemacht wird. - 40 - Microsoft SQL-Server 2000 Anleitung Lassen Sie Gruppen nach verheirateten und die nicht verheirateten Mitarbeitern bilden und zeigen Sie die Summe des Gehalts: Ohne Gruppierung ist die Sortierung und dann die Zusammenfassung möglich: Im nächsten Beispiel sehen Sie, wie die Gruppierung durch den Zusatz by erreicht wird: Je nach Gruppe wird dabei etwas berechnet. - 41 - Microsoft SQL-Server 2000 Anleitung Sie können also die bekannten set-Funktionen (min, max, avg, sum) auf Gruppen anwenden und trotzdem die Einzelwerte sehen. Beachten Sie nur dabei, dass das Ergebnis nicht relational ist, es liefert keine Tabelle zurück. Deshaln kann dieser select-Zusatz auch nicht verwendet werden, wenn Sie mit select into Ergebnisse der Abfrage in eine neue Tabelle überführen wollen. Aufgabe: Ermitteln Sie name, gehalt und abschluss aus der Tabelle Abteilung. Jeweils pro Abteilung soll der Mittelwert des Gehalts ermittelt werden. Aufgabe: Ergänzen Sie die Abfrage so, dass zusätzlich zum Mittelwert auch das Minimum, das Maximum und die Summe berechnet wird. Aufgabe: Eine Abfrage soll den Namen und die Anzahl der Fehltage (Attribut krank_tage) liefern. Außerdem soll Summe und Mittelwert dieser Fehltage berechnet werden, gruppiert nach verheirateten und nicht verheirateten Mitarbeitern. Aufgabe: Die folgende Abfrage soll den Namen und die Anzahl der Urlaubstage liefern. Je nach Abteilung soll dabei der Mittelwert, Min und Max der Urlaubstage ausgegeben werden. Lösungen: 1) select name, gehalt, abschluss from abteilung order by abschluss compute avg(gehalt) by abschluss 2) select name, gehalt, abschluss from abteilung order by abschluss compute avg(gehalt),min(gehalt), max(gehalt), sum(gehalt) by abschluss 3) select name, krank_tage from abteilung order by verheiratet compute sum(krank_tage),avg(krank_tage) by verheiratet 4) select name, urlaubstage from abteilung order by abteilung compute avg(urlaubstage), min(urlaubstage), max(urlaubstage) by abteilung - 42 - Microsoft SQL-Server 2000 Anleitung 11.1 Übungen zu SQL5 Verwenden Sie für die folgenden SQL-Übungen (bitte mit dem Query Analyzer durchführen) die Datenbank pubs. 2. Sie möchten title_id, title und price für sämtliche Bücher abrufen, die eine Verleger-ID (publisher ID) 0877 oder das Wort computer im Titel haben; außerdem soll der Preis NOT NULL sein. Welches Transact-SQL müssen Sie dafür benutzen (Tip: Benutzen Sie die Tabelle titles)? 3. Schreiben Sie eine Abfrage zum Abrufen sämtlicher Bücher in der Tabelle titles, die Preise haben, die NOT NULL sind. 3. Schreiben Sie eine Abfrage zum Auflisten sämtlicher Buchtitel und Preise in der Tabelle titles in absteigender Sortierreihenfolge nach dem Preis. 4. Schreiben Sie eine Abfrage, die den Durchschnittswert der ytd_sales-Zahlen aus der Tabelle titles in der Datenbank pubs liefert. 5. Schreiben Sie unter Verwendung der Klauseln GROUP BY und HAVING eine Abfrage, die sämtliche Bücher mit mehr als einem Autor findet (Tip: Benutzen Sie die die Tabelle titleauthor). 6. Schreiben Sie unter Verwendung der COMPUTE BY-Klausel eine Abfrage, die stor_id ausgibt und eine fortlaufende Summe der bestellten Menge anzeigt. Benutzen Sie dazu die Tabelle sales. 7. Erstellen Sie unter Verwendung von Verknüpfungen (entweder eine SQL-Serveroder eine ANSI-Verknüpfung) eine Abfrage zur Anzeige des Vornamen (first name), des nachnamen (last name) und der Buchtitel (titles) des Autors (Benutzen Sie au_fname und au_lname, aus der Tabelle authors und das Feld title aus der Tabelle titles) (Tip: Sie müsse zwei Verknüpfungen einsetzen - eine von authors mit titleauthor und eine von titles mit titleauthor). 8. Erstellen Sie eine Unterabfrage zum Auffinden von Autoren (authors), die in denselben Bundesländern leben, in denen sich die Buchgeschäfte (stores) befinden. 5 Richard Waymire, SQL Server 7.0, Kap. 11 - 43 - Microsoft SQL-Server 2000 Anleitung 11.1.1 Lösungen für die Übungsaufgaben 1. SELECT title_id, title, price FROM titles WHERE (pub_id = ´0877´ OR title LIKE ´%computer%´) And price is not NULL (gibt 14 Zeilen zurück) 2. SELECT * FROM titles WHERE price IS NOT NULL (gibt 16 Zeilen zurück) 3. SELECT title, price FROM titles ORDER BY price DESC (gibt 18 Zeilen zurück) 4. SELECT AVG(ytd_sales) FROM titles 5. SELECT title_id, count(title_id) FROM titleauthor GROUP BY title_id HAVING count(title_id) > 1 6. SELECT stor_id, qty FROM sales ORDER BY stor_id COMPUTE SUM(qty) BY stor_id 7. ANSI Syntax SELECT authors.au_fname, authors.au_lname, titles.title FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN titles ON titleauthor.title_id = titles.title_id ORDER BY authors.au_lname SQL Server Syntax SELECT authors.au_fname, authors.au_lname, titles.title FROM authors, titles, titleauthor WHERE authors.au_id = titleauthor.au_id AND titleauthor.title_id = titles.title_id ORDER BY authors.au_lname 8. SELECT * FROM authors WHERE authors.state IN (SELECT state from stores) - 44 -