Inhaltsverzeichnis         

2 MS SQL- Server, Administration

2.1 Historie

1989

Version 1.0 für IBM OS/2

Entstand aus Zusammenarbeit von Microsoft mit der Fa. Sybase, die Datenbankserver für Unix- Systeme entwickelte.

1992

Version 4.2 für OS/2 1.3

1993

Version 4.21 für Windows NT (SQLNT)

1995

SQL Server 6.0 für Windows NT (SQL95)

Eigenständige Weiterentwicklung der Datenbankservers ohne Sybase

1996

SQL Server 6.5 für Windows NT (Hydra)

1999

SQL Server 7.0 für Windows NT (Sphinx, Plato)

Vollständige Neuentwicklung des Servers (Codebasis von Sybase aufgegeben, eigene Codebasis entwickelt)

OLAP Tools

2000

SQL Server 2000 (Liberty)

2005

SQL Server 2005 (Yukon)

  • XML- Datentyp

  • CLR Integration

  • Filestream

2008

SQL Server 2008 (Katmai)

2010

SQL Azure (Matrix aka CloudDB)

2010

SQL Server 2008 R2 (Kilimanjaro)

2012

SQL Server 2012 (Denali)

  • Hochverfügbarkeitslösung AlwaysOn

2014

SQL Server 2014 (Hekaton)

  • Tabellen oder Datenbanken können komplett in den Arbeitsspeicher geladen werden (höhere Performance)

  • Spalten basierte Indizes



2.2 SQL- Server 2014 Produktübersicht





Installierbar auf


Produkt

Max CPU's

RAM

Max DB Size

Windows 7

Windows Server

Anmerkung

Enterprise

OS - Grenze

OS - Grenze

524 PB

n

j

Umfasst alle Funktionen von SQLServer 2000. Vornehmlich zur Implementierung großer Unternehmensdatenbanken.

Standard

4 Sockets oder 16 Kerne

128 GB

524 PB

n

j

Datenbankserver für Arbeitsgruppen. Spezielle Komponenten der Enterprise Edition wie gutes Scalieren in SMP- Systemen, Failover, Web- Schnittstelle und OLAP fehlen hier.

Web

4 Sockets oder 16 Kerne

64 GB

524 PB

n

j

Standalone Datenbankserver für Arbeitsstation. Funktionsumfang = Standard Edition - Volltextsuche und Transaktionsreplikation

Express mit advanced Services

1 Sockets oder 4 Kerne

1 GB

10 GB

j

n

Nur für Entwicklung und Test (spezielle Lizenz)

Express

1 Sockets oder 4 Kerne

1 GB

10 GB

j

n

Dient als Datenspeicher für Anwendungen. Keine Benutzeroberfläche, Verwaltungstools, Mergerreplikation etc.

2.3 SQL- Server 2008 Produktübersicht

Produkt

CPU's

RAM

Max Size Database

Anmerkung

Enterprise- Edition

8

2 TB

no limit

Umfasst alle Funktionen von SQLServer 2000. Vornehmlich zur Implementierung großer Unternehmensdatenbanken.

Standard- Edition

4

32GB

no limit

Datenbankserver für kleine und mittlere Unternehmen.

Web

4

32 GB

no limit


Express

1

1 GB

4 GB

Dient als Datenspeicher für Anwendungen.

2.4 Ältere Versionen und Abwärtskompatibilität

Datenbanken, die auf einer älteren Version von SQL-Server erstellt wurden, können in sog. Kompatibilitätsmodus auf dem neuen System betrieben werden. Dabei werden Features, die nur im neuen System verfügbar sind, abgeschaltet.

Der Kompatibilitätsmodus einer DB wird mittels folgender gespeicherter Prozedur abgefragt:

exec sp_dbcmptlevel '<db name>'

Die Prozedur gibt einen nummerischen Code zurück, der gemäß folgender Tabelle zu interpretieren ist:

Code

SQL Server Version

60

6.0

65

6.5

70

7.0

80

SQL Server 2000

90

SQL Server 2005

100

SQL Server 2008 (+R2)

110

SQL Server 2012

120

SQL Server 2014

Der Kompatibilitätsmodus einer Datenbank kann auch festgelegt werden. Dazu ist beim Aufruf von sp_dbcmptlevel der gewünschte Versionscode als 2. Parameter anzufügen:

exec sp_dbcmptlevel '<db name>' <Code>

2.5 Dokumentation

Zum SQL- Server kann im Internet unter folgender URL eine aktuelle Dokumentation abgerufen werden:

http://msdn.microsoft.com/de-de/library/bb545450.aspx

2.6 Datenbankarchitektur

2.6.1 Allgemeiner Aufbau eines Datenbankservers






2.6.2 Betriebsarten

Definition

OLTP

(engl.: Online Transaction Processing) In dieser Betriebsart wird eine Datenbank zur Verwaltung der Daten in laufenden Geschäftsprozessen (Verwaltung von Bankkonten, Buchungssysteme etc.) benutzt.



Definition

OLAP

(engl.: Online Analytical and Processing) In dieser Betriebsart werden große Datenmenge komplexen Analysen unterworfen. Grundlegende Datenstruktur dafür sind sog. Cubes (vergleichbar mit Excel- Tabellenblättern, die sich in n- Dimansionen aufspannen). Durch spezielle Abfragen untersützt SQL- Server das Cube- orientierte Auswertungsschema.

2.6.3 Übersicht SQL Server ab 2005






2.6.4 Server- Komponenten

SQL Server

Microsoft Search

SQL Server Agent

Distributet Transaction Coordinator

Dieser Dienst implementiert das relationale Datenbankmodul.

Dieser Dienst implementiert für alle Instanzen von SQL- Server auf einem Serversystem die Volltextsuche.

  • Ausführen von SQL Server- Tasks zu bestimmten Uhrzeiten

  • Prüfen, ob aktueller Zustand des Servers bestimmte Bedingungen erfüllt. Wenn ja, dann können vom Administrator eingestellt Aktionen ausgeführt werden (z.B: Benachrichtigung per email).

  • Ausführen von Replikationstasks, die der Administrator zuvor definiert hatte

Dieser Dienst ist für die Verwaltung verteilter Transaktionen verantwortlich.

2.6.5 Applikationsschnittstellen






2.6.5.1 DMO

DMO (engl.: Distributet Managment Objects) ist eine COM- basierte API, die alle administrativen Funktionen zur Manipulation beliebiger Entites auf der Datenbank bereitstellt.

2.6.5.2 DSO

DSO (engl.: Decision Support Objects) ist eine COM- basierte Schnittstelle, welche alle administrativen Funktionen zu den SQLServer 2000 Analysis- Diensten bereitstellt. Damit sind OLAP- Applikationen programmierbar.

2.6.6 Serverinstanzen und Datenbanken

Wurde das SQL- Server Softwarepaket auf einem System (= physischer Computer oder VM) installiert, dann können beliebig viele Serverinstanzen eingerichtet werden. Eine Serverinstanz ist ein Host für wiederum beliebig viele Datenbanken (System/Benutzer). Folgendes Bild veranschaulicht die Zusammenhänge:

2.6.6.1 UNC Namen für Serverinstanzen

Die einzelnen Serverinstanzen können über Datenbankclients wie das Microsoft Managment Studio angesteuert werden, indem eine Datenbankverbindung aufgebaut wird. Die Datenbankverbindungen werden über sogenannte Verbindungszeichenfolgen (engl.: ConnectionString) konfiguriert wie folgende:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KeplerDB;Data Source=Werk12\SQL2012dev

In einer solchen Verbindungszeichenfolge wird der Datenbankserver durch einen Namen, welcher der Universal Naming Convention (kurz: UNC) folgt, definiert. Im Beispiel hier:

Data Source=Werk12\SQL2012dev

Ein UNC Name für eine SQL- Serverinstanz besteht dabei aus zwei Teilen:

<Systemname>\<Instanzname>

Beim Zugriff über Domänengrenzen hinweg ist zusätzlich der Domäne- Name anzugeben:

\\<domain-name>\<Systemname>\<Instanzname>

Der Systemname entspricht dabei dem Name des Host- Systems (cmd> hostname) in der Arbeitsgruppe oder Domäne.

Soll die Verbindung über einen ausgewählten TCP- Endpunkt erfolgen, dann kann im UNC- Name auf das TCP- Protokoll mittels des Präfixes tcp: eingeschränkt werden. Die Portnummer wird mittels Komma an den Systemname angehangen:

tcp:<Systemname>,<Portnummer>\<Instanzname>

z.B. tcp:Werk12,12345\SQL2012dev

Wurde mit dem SQL- Server Installationsprogramm eine Standardinstanz eingerichtet, dann ist sie unbenannt. Sie wird mit einem UNC- Namen == Systemnamen adressiert. Für das System Werk12 z.B. einfach

Werk12

Wird mit einem Client auf die Standardinstanz zugegriffen, der auf dem gleichen System läuft wie der Server, dann kann der Systemnamen durch den Punkt ersetzt werden

.

Soll auf einem System neben der Standardinstanz weitere eingerichtet werden, dann sind sie bei der Installation zu benennen. Die vergebenen Namen dienen dann beim Adressieren in der Verbindungszeichenfolge zur Identifizierung der Serverinstanz. Wurde z.B. auf dem System Werk12 eine Instanz mit dem Name SQL2012dev eingerichtet, dann lautet der UNC:

Werk12\SQL2012dev

Wird der Client auf dem gleichen System gestartet, auf dem auch die Serverinstanz läuft, dann kann der UNC vereinfacht werden zu

.\SQL2012dev

Die Verbindungszeichenfolge zu einem Server kann man wie folgt ermitteln:

  1. neue Textdokument auf dem Desktop anlegen (Endung .txt)

  2. Endung von Textdokument umbenennen in .udl

  3. Doppleklick auf udl- Dokument. Über den sich öffnenden Assistenten den UNC- Name für den Server und die Datenbank auswählen.

  4. Assistenten schließen

  5. Endung der udl- Datei in .txt zurückbenennen

  6. txt- Datei mit Texteditor öffnen und Verbindungszeichenfolge ablesen

2.6.6.2 Systemdatenbanken

Jede SQL Server Instanz besitzt 4 Systemdatenbanken, in denen Konfigurationsdaten gespeichert werden:

Datenbankname

Inhalt

master

Daten für Serverinitialisierung, Serverkonfiguration, Liste aller Datenbanken, Anmeldekonten, Pfade der primären Dateien von Datenbanken

tempdb

temporäre Tabellen und gespeicherte Prozeduren

model

Vorlage für alle Benutzerdatenbanken. Wird eine Benutzerdatenbank erstellt, dann werden alle Tabellen aus model in neue Benutzerdatenbank kopiert.

msdb

Tabellen für SQL Server Agent

2.6.6.3 Allgemeine Struktur einer SQLServer Datenbank


Eine Datenbank ist einer Serverinstanz untergeordnet und besteht aus Datenbankobjekten wie Tabellen (Primärspeicher), Views (sekundäre Darstellung der Datenbankinhalte) etc..

2.6.7 Data- Dictionary: System- und Datenbankkatalog

2.6.7.1 Der Systemkatalog

Der Systemkatalog ist durch die Datenbank master realisiert, und besteht aus Tabellen, die alle Daten zur Verwaltung einer SQL- Serverinstanz enthalten.

Systemtabelle

Inhalt

Sysaltfiles

Zu jeder Datei ist ein Datensatz enthalten mit : Datei-ID, Datenbank-ID, Dateiname, Speicherort, Größe und Vergrößerungseigenschaften

Sysdatabases

Zu jeder Datenbank is ein Datensatz enthalten mit: DBID, SID des Besitzers, Erstellungsdatum, Speicherort der primären Datei.

Sysdevices

Zu jedem Sicherungsgerät gibt es einen Datensatz

Syslockinfo

Zu jeder aktiven Sperre wird ist ein Datensatz enthalten mit: ID des gesperrten Objektes, user- od. Prozessid, der Sperre anfordert

Sysxlogins

Datensatz zu jedem Anmeldekonto

Sysmessages

Liste aller möglichen Fehlermeldungen

2.6.7.2 Der Datenkatalog

Der Datenkatalog enthält die Definition aller Objekte einer Datenbank wie Tabellen, Indizes und Benutzer. Er wird durch einen Satz von Tabellen in jeder Datenbank realisiert. Datenkatalog und Datentabellen bilden eine Einheit, die auf eine Serverinstanz kopiert die Datenbank realisiert.

Systemtabelle

Inhalt

Syscomments

Datensatz zu jeder Sicht, Regel, Trigger, CHECK- Einschränkung, gespeicherten Prozedur usw. Textspalte enthält ursprüngliche TSQL- Anweisung zur erstellung des Objektes. Einträge dürfen weder geändert noch gelöscht werden.

Sysindexes

Datensatz zu jedem Index in der DB

Sysobjects

Datensatz zu jedem Objekt in der DB mit: Objekt ID, Benutzer ID, Erstellungsdatum

Sysusers

Datensatz zu jedem Benutzer der Datenbank

2.7 Verwaltungswerkzeuge / Datenbankclients

Im Folgenden eine Aufstellung der wichtigsten Verwaltungswerkzeuge ab Sql-Server 2005. Verwaltungswerkzeuge älterer Versionen werden hier nicht berücksichtigt.

2.7.1 SQL Server Managment Studio


GUI- Tool für

2.7.2 Kommandozeilentool SqlCmd.exe

Befehlszeilenshell zur Ausführung von Transact- SQL Anweisungen. Zur Kommunikation mit dem Server wird die OLE DB- Schnittstelle verwendet.

Verbinden mit der 1. Serverinstanz über ein Windows- Benutzerkonto

sqlcmd -E

Verbinden mit der 1. Serverinstanz über ein SQL- Konto (Benutzername, Passwort)

sqlcmd -U mko -P XXXXX

Verbinden mit der Instanz SQLEXPRESS auf dem Server Shuttle

sqlcmd -E -S Shuttle\SQLEXPRESS  

Ausführen des Scripts createDB.sql mittels osql beim Start

sqlcmd -E -i createDB.sql

Direktes Ausführen einer Abfrage auf dem lokalen SQLEXPRESS- Server

sqlcmd -E -S .\SQLEXPRESS -q "SELECT * from dbo.files where SizeInBytes < 1024*1024"

2.7.3 SQL Server Oberflächenkonfiguration




Wird aus dem SQL Server Managment Studio gestartet. Funktionen des Datenbankmoduls werden hier eingestellt.

2.7.4 SQL Server Konfiguration




Wird aus dem SQL Server Managment Studio gestartet. Funktionen des allgemeinen Serversystems werden hier eingestellt.

2.7.5 SQl Server Informationen




z.B. Bestimmen der Version der laufenden Instanz.

2.7.6 SQL Server Konfigurationsmanager




2.8 Administration des Server – und Datenbankzugriffs

2.8.1 Netzwerkzugriff über TCP- Endpunkte einschränken




Die erste Barriere, die beim Zugriff auf den SQL- Server über das Netz zu überwinden ist, ist der TCP- Endpunkt. Seine Konfiguration erfolgt über den Configuration- Manager in der Abteilung Server Netzwerkkonfiguration.

TCP- Endpunkte können aktiviert oder deaktiviert werden. Bezüglich des SQL- Servers wirken sie ähnlich wie eine Firewall. Indem die Kommunikation mit dem Server über den Endpunkt eingeschränkt, und bei Bedarf durch Deaktivierung des Endpunktes gekappt wird, kontrolliert man sie.

Ein Endpunkt hat die Zustände started, stopped und disabled. Das Verhalten des Endpunktes in den jeweiligen Zuständen definiert folgende Tabelle:

started

Wartet auf Verbindungsanforderungen, und baut Verbindungen auf.

stopped

Wartet auf Verbindungsanforderungen, lehnt aber Verbindungen mit einer Fehlermeldung ab.

disabled

Endpunkt ist abgeschaltet, Port nicht aktiv.

Im Con figuration- Manager wird der Zustand eines Endpunktes über die beiden Eigenschaften Aktiv und Aktiviert eingestellt. Folgende Kreuztabelle stellt die Zusammenhänge dar:


Started

Stopped

Disabled

Aktiv

True

False

?

Aktiviert

True

True

False

Der Standardport für einen TCP- Endpunkt ist 1433. In der Firewall des Servers muss eine Regel für den eingehenden Verkehr definiert werden, die diesen Port öffnet.

Im Configuration Manager kann der Port für alle Netzwerkschnittstellen (= IP- Adressen) eine Servers als TCP- Endpunkte geöffnet werden. Jedoch sollte die bewusste Aktivierung einzelner Schnittstellen als Endpunkte bevorzugt werden, da so die Angriffsfläche auf den Server minimiert wird.

Weiter besteht die Möglichkeit einer dynamischen Port- Vergabe. Um diese zu nutzen, ist im Configuration Manager unter der Abteilung SQL-Server Dienste der Sql- Server- B rowser zu aktikvieren.

Die Parameter Aktiv und Aktiviert (deutsche Version) beeinflussen den

2.8.2 Zugriffsbeschränkung für Benutzer


Übersicht der Zugriffsbeschränkungen eines Benutzers auf Serverressourcen.

2.8.3 Anmeldung am Server






Authentifizierungsmodi

Windows- Authentifizierung

SQL- Serverauthentifizierung

Vorteile:

  • Mit dem Login am Betriebssystem kann einem Benutzer auch automatisch Zugriff auf SQL- Server erteilt werden, ohne das weitere Logins notwendig sind

  • Übertragung der Passwörter an den Server erolgt verschlüsselt

Nachteile:

  • Nur von Windows- Arbeitsstationen aus möglich

Vorteile:

  • Anmeldung auch von Nicht- Windows- Systemen aus möglich (entsprechende ODBC- Treiber vorausgesetzt)

Einstellen des Authentifizierungsmodus über SQL Server Management Studio:

Eigenschaften vom Server\Sicherheit




2.8.3.1.1 Auflisten aller Benutzerkonten
exec sp_helplogins
2.8.3.1.2 Auslisten der Windows- Benutzerkonten
select name from sysxlogins where name like '%\%'
2.8.3.1.3 Auflisten aller angemeldeten Benutzer
exec sp_who [ @login_name='login']

2.8.3.2 SQL- Serverauthentifizierung

Für jeden Benutzer wird auf dem Server in der Tabelle sysxlogins ein Benutzername + Passwort gewspeichert.

use master
go
-- Um die folgende Abfrage auszuführen, muß man Mitglied der Rolle sysadmin sein
select * from sysxlogins
go
2.8.3.2.1 Anlegen eines SQL Benutzerkontos
  
  sp_addlogin [ @loginame = ] 'login' 
[ , [ @passwd = ] 'password' ] 
[ , [ @defdb = ] 'database' ]        -- Datenbank, mit der Benutzer nach der Anmeldung verbunden ist
                                     -- (Standard: master)
[ , [ @deflanguage = ] 'language' ]  -- Sprache 
2.8.3.2.2 Kennwort ändern
  
  sp_password [ [ @old = ] 'old_password' , ] 
{ [ @new =] 'new_password' } 
[ , [ @loginame = ] 'login' ]
2.8.3.2.3 Übersicht zu Benutzerkonten erzeugen
sp_helplogins
2.8.3.2.4 Benutzerkonto löschen
sp_droplogin <login>

2.8.3.3 Windows- Authentifizierung




Um Windows- Benutzerkonten hinzuzufügen, ist ein eigenständiger Satz von gespeicherten Systemprozeduren vorhanden:

sp_grantlogin [ @loninname = 'loginname']
sp_revokelogin [ @loninname = 'loginname']
sp_denylogin [ @loninname = 'loginname']
2.8.3.3.1 Sicherheitsrichtline für lokale Anmeldung am Server

Um am Server selbst eine Anmeldung als Benutzer durchführen zu können, ist folgende Einstellung an den lokalen Richtlinen notwendig

start/programme/verwaltung/lokale Sicherheitsrichtlinien/lokale Richtlinien/
     Zuweisen von Benutzerrechten/lokal anmelden-> Gruppe der SQL- Benutzer hinzufügen

2.9 Zugriff auf Datenbanken

Vorauasetzung für den Zugriff auf eine Datenbank ist natürlich eine gelungene Authentifizierung (= Anmeldung) am SQL- Server.

2.9.1 Anmeldungen, Datenbankbenutzer und Datenbankbesitzer

Damit ein ein angemeldeter Benutzer auf die Objekte einer Datenbank zugreifen kann, muß er auf einen Datenbankbenutzer abgebildet werden. So kann unabhängig von den spezifischen Anmeldekonten eines SqlServers auf einem Windowsserver ein Zugriffssystem für eine Datenbank entwickelt werden.


Jede Datenbank hat genau einen Besitzer. Dieser besitzt implizit alle Rechte auf eine Datenbank. Dem Besitzer gehört auch das Schema dbo per Default.

Da es nur einen Besitzer geben kann, müssen alle weiteren Datenbankbenutzer, die die gleichen Rechte wie der Besitzer erhalten sollen (nämlich alle), Mitglied der Rolle db_owner werden.

Die Zusammenfassung einer Menge von Datenbankbenutzern kann analog den Gruppen in der Windowsadministration durch sog. Rollen erfolgen. Die Berechtigungen einer Rolle übertragen sich auf die in der Rolle enthaltenen Benutzer.




2.9.2 Berechtigungen

Der Zugriff auf den Server und auf Datenbankobjekte kann mittels Berechtigungen eingeschränkt werden. Die aktuell geltentenden Berechtigungen stellen einen Sicherheitskontext dar. Dieser kann durch folgende Aktionen verändert werden:

Achtung: Verbote haben Vorrang vor einer Erlaubnis ! Z.B. wird durch ein aus Mitgliedschaft geerbtes Verbot einer Rolle eine mögliche individuelle Erlaubnis für einen Datenbankbenutzer eliminiert.




2.9.2.1 Typen von Berechtigungen

Anweisungsberchtigungen

Objektberechtigungen

Schränken die Ausführung fogender TSQL- Anweisungen für einen Datenbankbenutzer ein:

  • BACKUP DATABASE

  • BACKUP LOG

  • CREATE DATABASE

  • CREATE DEFAULT

  • CREATE FUNCTION

  • CREATE PROCEDURE

  • CREATE RULE

  • CREATE TABLE

  • CREATE VIEW

Schränken die Ausführung folgender Anweisungen pro Datenbankobjekt (z.B: Tabelle) für einen Datenbankbenutzer ein:

  • SELECT

  • INSERT

  • DELETE

  • EXEC <Stored Procedure>

Einstellbar in: Enterprisemanager/<Server>/<Datenbank>/Kontextmenü-> Eigenschaften/ Berechtigungen

Einstellbar in: Enterprisemanager/<Server>/<Datenbank>/Tabellen/Kontextmenü-> Eigenschaften/Berechtigungen

2.9.2.2 An wen können Serverberechtigungen erteilt werden

2.9.2.3 An wen können Datenbankberechtigungen erteilt werden

2.9.3 Datenbankrollen

2.9.3.1 DBO

DBO ist ein spezieller Datenbankbenutzer. Zum dbo wird man, wenn

Ist man als domaeneX/UserY angemeldet, und hat die Datenbank DMS erstellt, dann ist man in DMS auch automatisch der dbo.

Der DBO hat folgende Rechte:

2.9.3.2 db_owner, db_ddladmin

Alle Mitglieder der Rolle db_owner haben die gleichen Rechte wie dbo. Demgegenüber können die Mitglieder von db_ddladmin nur DDL- Befehle ausführen.

Objekte, die von Mitgliedern der Gruppe db_owner und db_ddladmin erstellt werden, haben per Default den Namen UserName.Objektname.

2.9.3.3 db_accessadmin

Mitglieder dieser Gruppe können Datenbankbenutzer verwalten

2.9.3.4 db_securityadmin

Mitglieder dieser Gruppe können über Berechtigungen den Zugriff auf Datenbanken steuern (Sicherheit), indem sie die Befehle Grant und Revoke ausführen dürfen.

2.9.3.5 db_backupoperator

Mitglieder dieser Gruppe können Datensicherungen auf der Datenbank durchführen

2.9.3.6 db_datareader

2.9.3.7 db_datawriter

2.9.3.8 db_denydatareader

Mitglieder dieser Gruppe dürfen kein Select auf einer Datenbank durchführen. So kann ein Datenbankadministrator durch Mitgliedschaft in db_ddladmin befähigt werden, Tabellen einzurichten, durch seine Mitgliedschaft in db_denydatareader kann ihm das Lesen vertraulicher Daten untersagt werden -> Ü

2.9.3.9 db_denydatawriter

Kein Insert, Update, Delete

2.9.4 Datenbankschemas

Ein Datenbankschema ist ein Namensraum für eine Teilmenge von Datenbankobjekten wie Tabellen, gepeicherten Prozeduren etc. Jedes Datenbankobjet gehört zu genau einem Datenbankschema.

Neu in SQLServer2005 ist die Trennung zwischen Schema und Benutzer. In SqlServer 2000 stellte sich die Beziehung zwischen Schemas und Benzutzer noch wie folgt dar:


War im Besitz einer Benutzers ein Schema, dann wurde automatisch mit dem Löschen des Benutzers das zugeordnete Datenbankschema plus den darin enthaltenen Objekten wie Tabellen, gespeicherten Prozeduren etc. gelöscht.

Diese enge Bindung von Benutzern und Schemen wurde in SqlServer 2005 aufgegeben. Schemen können jetzt völlig unabhängig von Benutzern definiert werden.


Diese Entkopplung von Schema und Benutzer hat insbesondere den Vorteil, dass die Verwaltung der Datenbankobjekte unabhängig von der der Datenbankbenutzer erfolgt.

2.10 Datenbank anlegen

2.10.1 Grundlagen: Datenbankdateien und Transaktionsprotokolle

Jede Datenbank besteht aus einer primären und mehreren sekundären Dateien. Die primäre Datei hat die Endung .mdf. Die sekundären Dateien haben die Endung .ndf.

Die Speicherorte der Dateien (Pfade) werden in der master- DB und in der primären Datei der DB selbst verzeichnet

2.10.1.1 Namensgebung

Datenbankdateien haben einen logischen und einen physischen Namen. Der logische Name wird in TSQL verwendet.

Logischer Name (z.B. FileSysDB)

Physischer Name (z.B: c:\db\filesysdb.mdf)

2.10.1.2 Aufbau

Der Speicherplatz für eine Datenbankdatei wird blockweise reserviert. Jeder Block besteht aus 8 Seiten, die jeweils 8 KB Daten aufnehmen.

Jede Seite nimmt die Daten genau eines Datenbank- oder Dateiorganisationsobjektes auf. Blöcke, in denen alle Seiten mit Daten eines einzigen Datenbankobjekt belegt sind, werden als einheitliche Blöcke bezeichnet. Werden in den Seiten eines Blockes Daten zu verschiedenen Datenbankobjekten abgespeichert, dann ist der Block ein gemischter Block.

Das Verzeichnis aller Seiten, die ein Datenbankobjekt belegt ist ie IAM (Index Allocation Map)




Der erste Block einer Datei enthält den Kopf mit organisatorischen Infos:

Seite

Name

Inhalt

Beschreibung

0

FileHeader

DateiID

 

Anfangsgrösse der Datei

 

max. Dateigrösse

 

1

PFS

Page Free Space

Die PFS verzeichnet für jede Seite den Belegungszustand. Abstufungen: leer, 1-50%, 51-80%, 81-95%, >95%

2

GAM

Global Allocation Map

Jedes Bit in der GAM kennzeichnet die Belegung eines Blocks in der Datei. Ist das Bit 0, dann ist der Block noch frei, sonst ist er belegt. Insgesamt können 64000 Blöcke (= 4 GB)verzeichnet werdn.

3

SGAM

Secondary Global Allocation Map

Jedes auf 1 gesetzte Bit in der SGAM kennzeichnet einen gemischten Block, in dem noch midestens eine Seite frei ist.



2.10.1.3 Heap

Daten eines Datenbankobjektes, die nicht indiziert sind, werden in Seiten gespeichert, die dem Datenbankobjekt über die IAM zugeordnet sind, und in denen noch Speicherplatz vorhanden ist. Sollte der Speicherplatz nicht mehr ausreichen, dann werden der IAM neue Seiten zugeteilt. Dies kann die Reservierung neuer Blöcke nach sich ziehen usw.. Diese ungeordnete Ablage der Daten nach dem Prinzip "Speichern wo Platz ist" wird Heap genannt.

Der Zugriff auf Daten, die nach dem Heap- Prinzip abgelegt wurden, ist aufwendig und kann im schlimsten Fall das Durchsuchen der gesamten Datensammlung zur Folge haben.

2.10.1.4 Indizes

Werden die Datensätze beim Einfügen in die Datensammlung bezüglich eines Ordnungskriteriums geordnet, dann kann der Zugriff durch Nutzung der Ordnung stark beschleunigt werden. Das Ordnen beim Einfügen wird Indizierung genannt.

2.10.1.4.1 Gruppierte Indizes (Clustered Index)

Gruppierte Indizes sorgen für eine physiche Ordnung der Datensätze, dh. wenn die Daten nach dem < Kriterium geordnet werden, dann sind die Kleineren Werte auf Seiten mit kleinerer Seitennummer, und größere Werte auf Seiten mit größerer Seitennummer zu finden.

Gruppierte Indizes können zur Folge haben, daß beim Hinzufügen von Daten der Speicherort vorher eingefügter Datensätze verschoben werden muß. Dies vermindert die Leistung bei Einfügeoperationen.

2.10.1.4.2 Nicht gruppierte Indizes (Nonclustured Index)

Nicht gruppierte Indizes bewirken keine physiche Ordnung der Datensätze. Der Index ist ein B- Baum, dessen Blätter auf die Speicherorte der Datensätze zeigen. Werden die Blätter des B- Baum von links nach rechts durchlaufen, dann können alle Datensätze in aufsteigender Folge gemäß dem Ordnungskriterium besucht werden.

2.10.1.5 Transaktionssystem: Protokolldateien

Alle Datenbankänderungen können in Transaktionsprotokolldateien mitprotokolliert werden. Dadurch sind bei einem Systemausfall verloren gegangene Daten wiederherstellbar, bzw. die Datenbank kann wieder in einen konsitstenten Zustand überführt werden. Gespeichert werden die Transaktionsprotokolle in Dateien mit der Endung .ldf.

2.10.1.5.1 Funktionsweise der Protokollierung






2.10.1.5.2 Prüfpunkt (Checkpoint-) Prozess

Der Prüfpunkt- Prozess sorgt periodisch für die Sicherung der geänderten Datenseiten im Puffercache auf der mdf- Datei auf Platte. Nach einem Prüfpunkt sind alle Datenänderungen auch auf der Festplatte verzeichnet. Sollte das System unmittelbar nach einem Prüfpunkt ausfallen, dann sind beim Hochfahren des Servers nur die Anweisungen aller bestätigten Transaktionen aus dem Protokoll wiederholt auszuführen, die nach dem Prüfpunkt eröffnet wurden.

2.10.1.5.2.1 Einstellen des Prüfpunktintervalles
use kraftstoff
go
-- Voraussetzungen schaffen, um Prüfpunkte einzustellen (siehe SQL- Server- Hilfe)
exec sp_configure 'show advanced options', 1
reconfigure
go
-- Prüfpunktintervall einstellen
exec sp_configure 'recovery interval', 2
reconfigure
go

Wird 0 Min eingestellt, dann entscheidet der Server selbst, wann Prüfpunkte gesetzt werden müssen.

2.10.1.5.2.2 Manueller Prüfpunkt

Ein Prüfpunkt kann manuell mit der Anweisung CHECKPOINT gesetzt werden. Jedoch muss das Script unter einem Konto mit der Rolle db_owner laufen.

2.10.1.5.3 Verwaltung der Transaktionsprotokolle

Ein Transaktionsprotokoll ist unterteilt in sog. virtuelle Protokolle.

Jede Folge von Änderungen an der Datenbank wird durch eine Folge spezieller Datensätze (Logs) in der Protokolldatei aufgezeichnet. Jeder Datensatz erhält dabei eine LSN (Log Sequenz Number). Der Beginn der ältesten, noch nicht abgeschlossenen Transaktion wird durch die MinLSN angezeigt. Die letzte Änderung, die bereits aus dem Puffercache in die Datenbank zurückgeschrieben wurde wird durch den letzten Prüfpunkt angezeigt.


Durch sichern der Transaktonsprotokolle werden die virtuellen Protokolle wieder freigegeben, die keine Daten zu aktuell aktiven Transaktionen beinhalten. Dieser Vorgang wird als Abschneiden bezeichnet. Die freigegebenen virtuellen Protokolle können dann wieder für die Aufzeichnung der Logs verwendet werden.

2.10.1.6 Wiederherstellungsmodelle für Transaktionsprotokolldateien

Die Protokollierung aller Änderungen an einer Datenbank kann sehr Speicherplatz verbrauchen. Deshalb gibt es die Möglichkeit, den Umfang der Protokollierung einzuschränken. Dies geschieht über sog. Wiederherstellungsmodelle. Natürlich geht bei eingeschränkter Protokollierung Redundanz verloren, wodurch das Risiko für irreversible Datenverluste steigt.

Vollständige

Massenprotokolliert

Einfach

  • Alle Operationen werden vollständig protokolliert

  • Wiederherstellung bis zu einem bestimmten Zeitpunkt in der Vergangenheit oder bis zur Fehlerstelle möglich

  • Indexerstelung und Massenladevorgänge wird nur eingeschränkt protokolliert- es werden nicht die Operationen, sondern die durch die Operationen veränderten Seiten aufgezeichnet

  • Alle anderen Operationen werden vollständig aufgezeichnet

  • Wiederherstellung bis zu einem best. Zeitpunkt in der Vergangenheit durch eingeschränkte Protokollierung nicht möglich

  • Transaktionsprotokolle erfodern beim Wiederherstellen die Datenbankdateien- fehlen diese, ist eine Wiederherstellung nicht möglich.

  • Alle Operationen werden vollständig protokolliert

  • Nach jedem Prüfpunkt werden alle inaktiven Teile des Protokolles abgeschnitten

  • Das Modell ermöglicht nur die Wiederherstellung des Zustandes vor dem Systemausfall bzw. bis zur letzten Datensicherung

Der Wiederherstellungsmodus kann durch folgende TSQL- Anweisung bestimmt werden:

select DATABASEPROPERTYEX('<datenbankname>', 'recovery')
go

2.10.2 Aufteilen der Daten auf Datenbankdateien

Die Informationen einer Datenbank verteilen sich auf mehrere Dateien. Die Datenbankinhalte sind in Dateien mit der Extension *.mdf und *.ndf enthalten. Die Transaktionsprotokolle werden in separaten Dateien mit der Extension *.ldf gespeichert.

Die Dateien einer Datenbank werden in primäre und sekundäre Dateien klassifiziert. Jede Datenbank hat eine primäre Datei mit den Startinfos der Datenbank + Datenbankobjekten wie Tabellen etc.. Reicht z.B. der Platz auf einer Fetplattenpartition nicht mehr für die Speicherung aller Datenbankobjekte aus, dann können mittels sekundärer Partitionen auf anderen Festplatten zusätzlich Speicherplatz bereitgestellt werden. Im Enterprisemanager kann in der Eigenschaftliste einer Datenbank die Zuordnung weiterer sekundärer Datandateien vorgenommen werden.

Mittels Dateigruppen können mehrere sekundäre Dateien zusammengefasst werden. Beim Erstellen einer Tabelle kann ihr als Speicherplatz eine Dateigruppe zugewiesen werden. Verteilen sich die Dateien einer Dateigruppe auf mehrere Festplatten, kann so ein Leistungssteigerung ähnlich wie bei einem RAID5 System erreicht werden.

Wichtig: Daten- und Transaktionsprotokolldateien von Microsoft® SQL Server™ 2000 dürfen nicht auf komprimierten Dateisystemen oder auf einem Remotenetzlaufwerk, z. B. einem freigegebenen Netzwerkverzeichnis, erstellt werden.




2.10.3 Anlegen mittels TSQL

Datenbanken werden mittels create database angelegt. Beispiel:

  use master
go

if exists(select * from master.dbo.sysdatabases where name ='mko_report')
   drop database mko_report
go

create database mko_report
ON 
-- Definition der Datendatei
PRIMARY ( NAME = report_dat,
   FILENAME = 'c:\sql_mko_report.mdf',  
   SIZE = 5 MB,
   MAXSIZE = 10 MB,
   FILEGROWTH = 100 KB )

( NAME = report_dat,
   FILENAME = 'e:\sql_mko_report2.mdf',  
   SIZE = 5 MB,
   MAXSIZE = 10 MB,
   FILEGROWTH = 100 KB )

-- Definition der Log- Datei
LOG ON
( NAME = Sales_log,
   FILENAME = 'c:\sql_mko_report_log.ldf',
   SIZE = 5 MB,
   MAXSIZE = 10 MB,
   FILEGROWTH = 100 KB )
GO

2.10.4 Existierende Datenbankdateien an den Server anbinden und abkoppeln

Um existierende Datenbankdateien an den Server anzubinden, ist folgende Variante von create Database anzuwenden.

use master
go
create database geoinfo
on     (filename = 'c:\mydb\geoinfo.mdf')
log on (filename = 'c:\mydb\geoinfo.ldf')
for attach

Alternativ kann die Datenbank im Enterprisemanager über Datenbanken\Kontextmenü\Alle Tasks\Datenbank anhängen wieder angehangen werden.

Datenbanken können vom Server wieder abgekoppelt werden, um sie z.B. an einen Anwender zu senden. Dies geschieht mittels einer Prozedur:

use master
go
exec sp_detach 'geoinfo'
go

Alternativ kann die Datenbank im Enterprisemanager über Datenbanken\<Datenbankname>\Kontextmenü\Alle Tasks\Trennen abgekoppelt werden.

2.10.5 Datenbankoptionen

Die Datenbankoptionen können eingestellt werden über

  1. Enterprisemanager/<Serverinstanz>/Datenbanken/<Kontextmenü der Datenbank>/Eigenschaften/Optionen

  2. oder mittels der gespeicherten Prozedur ALTER DATABASE SET ...

2.10.5.1 Wichtige Optionen für Wartungsaufgaben

Option

Beschreibung

SINGLE_USER

Einzelbenutzermodus Zu jedem Zeitpunkt kann nur ein Benutzer auf die Datenbank zugereifen

RESTRICTED_USER

Zugriff nur für Mitglieder von db_owner, db_creator oder sysadmin

MULTI_USER

Keine generelle Zugriffsbeschränkung

READ_ONLY | READ_WRITE

 

Datenbank ist entwerder Schreibgeschützt (READ_ONLY) und kann nicht verwendet werden, oder User können auf die Datenbank lesend und schreibend zugreifen (READ_WRITE)

2.10.6 Informationen zu Datenbanken abfragen

Eine Übersicht zu allen eingerichteten Datenbanken auf einer Serverinstanz kann mit folgender Prozedur gewonnen werden.

exec sp_helpdb
go

Speicherplatzbelegung der Datenbanken explizit abfragen

exec sp_spaceused
go

Speicherplatzbedarf einer Tabelle in einer Datenbank abfragen

use Hypercube
go
exec sp_spaceused 'dbo.FactFiles'
go

2.11 Datensicherung






2.11.1 Schritte der Datensicherung

  1. Sicherungsmedium erstellen

  2. Datenbank in den Modus SINGLE_USER umschalten

  3. Datenbankkonsitenz prüfen

  4. Datenbank sichern

2.11.2 Sicherungsmedium erstellen

Ein Sicherungsmedium wird durch einen Eintrag in der master.sysdevices- Tabelle erstellt. Dabei wird einem Bandlaufwerk oder einem physischen Dateiname ein logischer Name hinzugefügt, der später als Beschreibung im BACKUP- Befehl genutzt werden kann. Die Erstellung erfolgt mit der Systemprozedur sp_addumpdevice:

sp_addumpdevice [@devtype= ]       '<device_type>',
                [@logicalname = ]  '<logical_name>,
                [@physicalname= ]  '<physical_name>'               



Parameter

Bedeutung

device_type

Gerätetyp. Mögliche Werte:

  • disk

  • tape

  • pipe

logical_name

Logischer Gerätename, der in den Sicherungs- und Wiederherstellungsanweisungen verwendet wird

physical_name

Bezeichnet den Physikalischen Ort des Sicherungsmediums. Beispiele:

  • disk: c:\backups\b007.bak

  • tape: \\.\tape#

    # ist die Nummer des Bandlaufwerks im System. Alle Bandlaufwerke werden mit 0 beginnend durchnummeriert

Nach erfolgreicher Ausführung des Kommandos befindet sich im Enterprise- Manager unter Verwaltung/Sicherung ein neuer Eintrag für das Sicherungsmedium.

Beispiel:

use master
go
exec sp_addumpdevice 'disk',
                     'geoinfo-disk-bak',
                     'c:\backup\mko-geoinfo.bak'
go

2.11.3 Aufbau eines Bandmediums






2.11.4 Datenbankkonsitenz prüfen

Die Konststenzprüfung erfolgt mit dem Befehl dbcc checkdb:

dbcc checkdb ('<database_name>' [, NOINDEX | {REPAIR_FAST | REPAIR_REBUILD | REPAIR_ALLOW_DATA_LOSS}] )
             [with {[ALL_ERRORMSGS | NO_INFOMSGS]
                    [, TABLOCK]
                    [, ESTIMATEONLY]
                    [, PHYSICAL_ONLY]
                    [, TABRESULTS]
                   }
             ]

Bsp.:

use master
go

-- Wieviel Speicherplatz wird die Prüfung belegen
dbcc checkdb ('geoinfo')with estimateonly
go

-- Prüfung der Datenbank ohne Ausgabe von allg. Infos
dbcc checkdb ('geoinfo') with no_infomsgs
go

-- Reparatur einer Inkonsitenten Datenbank, garantiert ohne Datenverlust.
dbcc checkdb ('geoinfo'), REPAIR_FAST with no_infomsgs
go

-- Die Datenbank kraftstoff wurde zuvor mittels des Tools bomber.pl partiell beschädigt
-- Reparatur mittels dbcc

dbcc checkdb ('kraftstoff', REPAIR_ALLOW_DATA_LOSS)
go

2.11.5 Datenbank sichern

Die Sicherung erfolgt mit dem Befehl backup database:

2.11.5.1 Einfache Sicherung

use master
go

backup database geoinfo
to [geoinfo-disk-bak]
go

2.11.5.2 Sicherung mit Passwort und Angabe der Mindesthaltbarkeit der Sicherung

backup database geoinfo
to bakfile_geoinfo     
go

2.11.5.3 Differentielle Sicherung

Bei der differentiellen Sicherung werden nur die Änderungen zur vorausgegangenen Vollständigen Sicherung aufgezeichnet.

use master
go
backup database geoinfo to [geoinfo-disk-bak]
go
use geoinfo
go
insert into kennzeichen (kz, land) values ('txt', 'testland')
use master
go
backup database geoinfo to [geoinfo-disk-bak] with differential, noinit
go

2.11.5.4 Sicherung der Protokolle

Die Sicherung der Protokolle setzt voraus, das eine vollständige Datensicherung stattgefunden hat.

Zwei zusätzliche Optionen zur vorausgeangenen Datensicherung:

TRUNCATE_ONLY oder NO_LOG

Bewirkt nur ein Abschneiden im Transaktionsprotokoll- keine Sicherung

NO_TRUNCATE

Sicherungs des Protokolls, auch im Falle, das die Datendatei verloren gegangen ist.

Bsp.: Siehe S. 316

2.11.5.5 Sicherung mit Enterprise- Manager

siehe unter: <Serverinstanz>/Datenbanken/<Datenbank-Kontextmenü>/Alle Tasks/Datenbank sichern...

2.12 Wiederherstellung der Datenbank

2.12.1 Automatische Wiederhestellung bei Systemstart

Beim Hochfahren erfolgt eine Automatische Wiederherstellung über die Transaktionsprotokolle der Datenbanken. Begonnen wird mit der Masterdatenbank, da die Speicherorte der restlichen Datenbanken in der Tabelle master.sysdatabases abgelegt ist.

HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\MSSQLServer\Parameters\
  |
  +-> master.sysdatabases.files
  |       |
  |       +-> Dateipfad von geoinfo
  |       |       |
  |       |       +-> geoinfo.sysfiles
  |       |       +-> geoinfo.sysfilegroups
  |       |
  |       +-> Dateipfad von Kraftstoff
  |       |       |
  |       |       +-> Kraftstoff.sysfiles
  |       |       +-> Kraftstoff.sysfilegroups
  |       |

Der Prozess der automatischen Wiederherstellung ist auch dokumentiert im Protokoll der Serverinstanz unter:

<server>/Verwaltung/SQL Serverprotokolle

Entscheidend für die Dauer der automatischen Wiederherstellung ist die Länge des Prüfpunktintervalles.

2.12.2 Manuelle Wiederherstellung

2.12.2.1 Varianten

 

 

vollständige Wiederherstellung

Wiederherstellung aus Sicherung + Transaktionsprotokoll

Änderungen ab Zeitpunkt X zurücknehmen

Wiederherstellung des Zustandes zum Zeitpunkt X

Wiederherstellen von Transaktionen

 

Wiederherstellen von Dateigruppen

 

2.12.2.2 Voraussetzungen für die Wiederherstellung

  1. Datenbank darf nicht benutzt werden (Kein Benutzer hat Datenbank mit use geöffnet bzw. auf DB läuft keine Abfrage)

  2. Nur Bnutzer der Serverrolle sysadmin, dbcreator oder user dbo dürfen einen Datenbank wiederherstellen

  3. Transaktonsprotokolle müssen in der Reihenfolge ihrer Entstehung wiederhergestellt werden

2.12.2.3 Schritte der Wiederherstellung

  1. Den richtigen Sicherungssatz finden

  2. Prüfen, ob der Sicherungssatz verwendbar ist

  3. Wiederherstellung

2.12.2.4 Den richtigen Sicherungssatz finden

Mit folgenden drei Anweisungen können Infos über den Inhalt von Sicherungsmedien gewonnen werden.

-- Auslesen Kopfinformationen von einem Sicherungsband
restore labelonly form [geoinfo-disk-bak]

-- Auslesen der Informationen zum gesamten Sicherungssatz
restore headeronly from [geoinfo-disk-bak]

-- Auslesen der Liste der gesicherten Datenbank- und Protokolldateien
restore filelistonly from [geoinfo-disk-bak]

2.12.2.5 Prüfen, ob der Sicherungssatz verwendbar ist

Mittels folgenden Befehls kann die Lesbarkeit der Medienfamilie überprüft werden

restore verifyonly from [geoinfo-disk-bak]

2.12.2.6 Wiederherstellungsoptionen

Sollen einer Wiederherstellung weitere Wiederherstellungen (differentiell oder aus Transaktionsprotokollen) folgen, dann dürfen offene Transaktionen durch die aktuelle Wiedeherstellung nicht zurückgerollt werden (Option Norecovery), um ein nahtloses aneinandersetzen der Aufzeichnungen zu ermöglichen. Die letzte Wiederherstellung muß immer mit der Option recovery abgeschlossen werden, um eine funktionsfähige Datenbank zu erhalten.




2.12.2.7 Vollständige Wiederherstellung

Die vollständige Wiederherstellung einer Datenbank kann mit dem Befehl restore database erfolgen:

use master
go
-- Wiederherstellung simpel
restore database geoinfo from [geoinfo-disk-bak]
go
-- Bei der Wiederherstellung werden die Speicherorte der Datenbank- und Protokolldateien verändert
use master
go
restore database kraftstoff from [kraftstoff-disk-bak]
with move 'kraftstoff' to 'c:\db-neu\kraftstoff.mdf',
     move 'kraftstoff_log' to 'c:\db-neu\kraftstoff.ndf'
go

-- Überschreiben der laufenden Datenbank durch die Sicherung erzwingen

2.12.2.8 Differenzielle Wiederherstellung

Bei der Differenziellen Wiederherstellung ist wie folgt vorzugehen:

  1. Vollständige Wiederherstellung mit Option NORECOVERY (Kein Rollback offener Transaktionen)

  2. Wiederherstellung aus dem Medium mit differenziellen Sicherungssatz

Diefferenzielle Sicherung sind kumulativ- wurden nach der letzten vollständigen Sicherung drei Differenzielle angelegt, dann ist nur die letzte differentielle Sicherung wiederherzustellen.

2.12.2.9 Wiederherstellung von Transaktionsprotokollen

Bei der Wiederherstellung mittels Transaktionsprotokollen ist wie folgt vorzugehen:

  1. Wiederherstellung der Datenbank mit Option NORECOVERY

  2. Wiederherstellung der Protokolldatei mittels Restore log

use master
go

-- Vollständige Wiederherstellung mit Transportprotokollen
restore database kraftstoff from [kraftstoff-disk-bak] with norecovery
go
restore log kraftstoff from [kraftstoff-log-disk-bak]
go
2.12.2.9.1 Wiederherstellung bis zum Zeitpunkt X

Es wird eine Testdatenbank namens test-restore angelegt:

create database [test-restore]
go
use [test-restore]
go

create table data (
  uhrzeit datetime
)
go

Mittels eines folgender Insert- Anweisung, die periodisch aus dem SQL- Server Agent angestartet wird, werden fortlaufend Datensätze mit einem Zeitstempel in der Datenbank produziert.

insert into data values(getdate())
go

Als erstes erfolg eine vollständige Sicherung:

backup database [test-restore] to [test-restore-bak]

Zu einem späteren Zeitpunkt erfolgt eine Sicherung des Transaktionsprotokolles

backup log [test-restore] to [test-restore-bak]

Die Datenbank wird gelöscht, und anschließend mit folgenden Anweisungen bis zum Zeitpunkt X wiederhergestellt

use master
go

restore database [test-restore] from [test-replikation-bak] with norecovery
go

restore log [test-restore] from [test-replikation-bak] with file=2, stopat='13.11.2003 23:15:00', recovery
go

2.12.2.10 Wiederherstellung mit Enterprise- Manager

siehe unter: siehe unter: <Serverinstanz>/Datenbanken/<Datenbank-Kontextmenü>/Alle Tasks/Datenbank wiederherstellen

2.12.2.11 Protokollierung der Wiederherstellungsschritte in msdb- Tabellen

siehe S. 340

2.13 Fehlermeldungen

2.13.1 Schweregrade

Schweregrade

Beschreibung

10

Informationsmeldungen

11- 16

Durch Benutzer verursachte Fehler, die durch diesen behoben werden können

17, 18

Ressourcen und Systemfehler. Die Benutzersitzung wird nicht unterbrochen

19-25

Schwere Systemfehler



2.14 Datenbank Email

In bestimmten Situatioen muß der Server einen Administrator benachrichtigen über Email, wenn z.B. ein Auftrag des SQL- Server Agent fehlschlägt, oder der Server an seinen Leistungsgrenzen stößt. Dazu liefert SQLServer 2005 einen integrierten Email- Client, genannt Databank Email.

Wichtig: Dieses Feature muß zuerst in der Oberflächenkonfiguration freigeschaltet werden.

Konfiguriert wird der Client mittels eines Assistenten. Es entsteht dabei ein Verbindungsprofil.

Eine Email kann nach erfolgreicher Konfiguration mittels einer gespeicherten Prozedur wie folgt gesendet werden:

  
    use
     master
  
go

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'mkomailprofil',
    @recipients = 'Martin.Korneffel@t-online.de',
    @body = 'The stored procedure finished successfully.',
    @subject = 'Automated Success Message' ;

2.15 Automatisieren mit dem SQL Server Agent

Der SQL Server Agent ermöglicht die eine automatisierte Überwachung und Wartung einer Serverinstanz.

Analog dem Windows- Taskplaner können Datensicherungen und das Einspielen neuer Daten mittels DTS automatisiert werden. SQL Server Agent ermöglicht:

Achtung: Sollen Operatoren mittels net send <ip> <nachricht> benachrichtigt werden, dann muß der Nachrichtendienst von Windows gestartet sein.

Für die Implementierung des SQL Server Agent dient die Systemdatenbank msdb.

2.15.1 Jobs

Eine Übersicht zu allen Jobs kann mit folgender gespeicherter Prozedur gewonnen werden:

  exec msdb.dbo.sp_help_job

Jobs, die im SQL- Server- Agent definiert wurden, können mit folgenden gespeicherten Prozeduren aus der Datenbank msdb gestartet und gestoppt werden:

  exec msdb.dbo.sp_start_job '<jobname>' -- Startet eine Job auf dem Server
exec msdb.dbo.sp_stop_job  '<jobname>' -- Stoppt einen Job auf dem Server 

2.15.2 Warnungen

2.15.3 Operatoren

2.15.4 Aufgaben

  1. Erstellen Sie einen Auftrag, der im Minutentakt das Script DMSsimpelUpdateDB.pl startet, welches die Datenbank DMS aktualisert

  2. Erstellen Sie eine Warnung, die beim Überschreiten von X- MB in den Dateigrößen die eine Warnung via Net Send sendet



2.16 Daten importieren und exportieren

Mit Integration Services biete der SQL- Server Codegeneratoren zum erstellen von Datenimport- und Exportprozeduren an. Die Codegeneratoren können über Assistenten konfiguriert werden, die im SQL- Server Management Studio gestartet werden:


Import- Export Routinen werden als Pakete bezeichnet und realisieren im wesentlichen folgende Datenflussgrafen:


Die erstellten Pakete können im Integration Service Katalog abgelegt werden, der sich auf der Instanz befindet. Einrichtung von Kataloge siehe
https://msdn.microsoft.com/de-de/library/gg471509.aspx.

Über ihre Kontextmenü sind die Pakete konfigurierbar (z.B. Name der csv- Datei, in die Exportiert werden soll, ist einstellbar).




2.17 Verteilte Abfragen und Transaktionen

SQL- Server ermöglicht, Datenquellen, die über mehrere Instanzen verteilt sind, aus einer Query abzufragen. Dazu sind für alle Instanzen, die die Daten bereitstellen, als sog. Verbindungsserver in der Instanz einzurichten, von der aus die Abfrage ausgeführt wird (Enterprisemanager/Instanz/Sicherheit/Verbindungsserver).

In den Abfragen, die auf die verteilten Datenquellen zugreifen, sind diese wie folgt zu spezifizieren:

<SERVERNAME>[\<INSTANZNAME>].<datenbank>.<user>.<objekt>

Beispielsweise kann die Tabelle KONTEN der Datenbank BANK auf dem Server FILIALE1 wie folgt von einem entfernten Server abgefragt werden:

select * from FILIALE1.BANK.dbo.KONTEN
go

2.17.1 Verteilte Transaktionen

Implementiert werden die verteilten Transaktionen vom Distributet Tansaction Coordinator (MS DTC). Dieser ist Bestandteil von Win2000 und kann über Start/programme/Verwaltung/Komponentendienste/Computer/Arbeitsplatz administiert werden.

SET XACT_ABORT ON

Gibt an, ob Microsoft SQL Server für die aktuelle Transaktion automatisch ein Rollback ausführt, wenn eine Transact-SQL-Anweisung einen Laufzeitfehler auslöst

2.17.1.1 TSQL

Sollen eine Reihe von verteilten TSQL- Anweisungen als Transaktion ausgeführt werden, dann muß anstelle des einfachen BEGINN TRANSACTION die erweiterte Variante BEGIN DISTRIBUTED TRANSACTION verwendet werden.

Im folgenden Beispiel versucht sich der Mitarbeiter Donald mittels einer verteilten Transaktion alle Jobs, bei denen Geld gezählt wird, anzunehmen:

BEGIN DISTRIBUTED TRANSACTION

update FILIALE1.JOBBOERSE.dbo.JOBS 
set status='angenommen', bearbeiter='Donald'
where job='Geld zählen' and status='angebot'
go

update FILIALE2.JOBBOERSE.dbo.JOBS 
set status='angenommen', bearbeiter='Donald'
where job='Geld zählen' and status='angebot'
go

COMMIT TRANSACTION

2.18 Replikation

Durch Replikation werden an verschiedenen Standorten aktuelle Kopien von OLTP- Datenbanken verteilt bzw. eine einheitliche Datenbasis geschaffen.

2.18.1 Replikationsarten

2.18.1.1 Mergereplikation




Bsp: Blackboard

2.18.1.2 Snapshotreplikation/Transaktionsreplikation




Die Snapshootreplikation Erzeugt in größeren Intervallen komplette Kopieen einer von Artikeln auf dem Verleger. Hingegen werden bei der Transaktionsreplikation kontinuierlich die Änderungen vom Verleger an den Abonnenten übertragen.

Bsp: Zeitung, DMSsimpel

2.18.2 Replikationssystem






2.18.2.1 Pullabos

2.18.2.2 Pushabos

2.18.2.3 Einschränkungen

2.18.3 Implementation der Replikationsarten

2.18.3.1 Snapshotreplikation






2.18.3.2 Transaktionsreplikation



2.18.3.3 Mergereplikation






2.18.4 Implementation der Replikation

  1. Verteilungsserver installieren

  2. Publikation erstellen

  3. Abos erstellen

2.18.4.1 Voraussetzungen

  1. Jeder an der Replikation teilhabende Server muß im Enterprise- Manager registriert sein

  2. Domänen- Konto einrichten, welches alle SQL- Server Agents gemeinsam nutzen. Das Konto muß auf dem Verteilungsserver zur lokalen Gruppe der Administratoren (W2000) und der Sysadmins (SQL 2000) gehören

2.18.4.2 Verteilungsserver installieren

Die Installation des Verteilers erfolgt über einen Assistenten unter Extras/Replikation/Publizierung, Abonnenten und Verteilung Konfigurieren im Enterprisemanager.

2.18.4.3 Publikation einrichten

Enterprise Mgr/Extras/Replikationen/Publikationen erstellen und verwalten

2.18.4.4 Pullabo einrichten

Achtung: Abonnentensicherheit/Identität des SQL- Server Agent Konto auf Aboserver annehmen (Vertraute Verbindung)

Achtung: Der Zeitplan des Snapshootagenten sieht per default einen Periodenlänge von einer Woche vor. Bei Snapshootreplikation hier kürzen auf die gewünschte Periodenlänge

Achtung: Der Zeitplan für ein Push- Abo bei der Mergereplikation sieht eine Periodenlänge von einer Woche vor. Hier kürzen auf die gewünschte Periodenlänge. Der Zeitplan Fortlaufend ist nichtdeterministisch und deshalb für Experimente weniger geeignet.

2.19 Überwachung des Servers

2.19.1 Version der Serverinstanz bestimmen

select @@version

2.19.2 Auflisten aller angemeldeter Benutzer

exec sp_who
go

2.19.3 Auslastungsgrad und Laufzeit von Abfragen bestimmen

exec sp_monitor
go

select * from words order by file_id, pos

exec sp_monitor
go

2.19.4 Konfiguration von Warnungen und Leistungsprotokollen

2.19.5 Leistungsindikatoren von SQL- Server

Objekt

Indikator

Beschreibung

SQLServer:Buffer Manager

cache hit ratio

Gibt an, wie häufig Datenbankobjekte im Speicher vorgefunden werden. Wert sollte zw. 90% - und 100% liegen


Database Pages

Anzahl der Seiten, die von der Datenbank verwendet werden

Process

Processortime für sqlServer

CPU- Auslastung durch den SQL- Serverprozess

SQLServer:Database

LogFlushes/s

Anzahl der Protokolldatensätze, die pro Sekunde auf die HDD, widerspeigelt das aktuelle Arbeitsaufkommen

SQLServer:Database

Transactions/s

Anzahl der aktiven Transaktionen pro Sekunde



2.20 Quellen

  1. Technische Infos zum SQL- Server

  2. Probleme + Lösungen

  3. SQLXML- HowTo