SQL Server – Grundlagen für IT-Support
Dienste prüfen, Backups einrichten, Verbindungsprobleme lösen und SSMS bedienen – das Wichtigste rund um SQL Server für den IT-Alltag im KMU.
Was du als IT-Allrounder über SQL Server wissen musst
Als IT-Allrounder in einem KMU wirst du früher oder später mit SQL Server konfrontiert: Das ERP läuft auf einer SQL-Datenbank, die Zeiterfassungssoftware braucht einen SQL-Dienst, oder das Ticketsystem speichert seine Daten darin. Du musst keinen T-SQL-Code schreiben können – aber du musst Dienste prüfen, Backups einrichten, Verbindungsprobleme lösen und im Notfall eine Datenbank wiederherstellen können.
Diese Seite gibt dir das Rüstzeug dafür.
SQL Server Editionen im Überblick
Bevor du anfängst: SQL Server gibt es in verschiedenen Editionen. Welche in deinem KMU läuft, erkennst du in SSMS oder über PowerShell.
| Edition | Kosten | Einsatz |
|---|---|---|
| Express | Kostenlos | Kleine Apps, max. 10 GB pro Datenbank, kein SQL Agent |
| Developer | Kostenlos | Nur für Entwicklung/Test, alle Features, kein Produktiveinsatz |
| Standard | Lizenzpflichtig | KMU-Standard, begrenzte RAM/CPU-Nutzung (max. 128 GB RAM) |
| Enterprise | Teuer | Grosse Umgebungen, alle Features, unbegrenzte Skalierung |
-- Welche Edition und Version läuft?
SELECT @@VERSION;
SELECT SERVERPROPERTY('Edition'), SERVERPROPERTY('ProductVersion');
Instanzen: Default vs. Named
SQL Server kann auf einem Server in mehreren unabhängigen “Instanzen” laufen.
| Typ | Dienstname | Verbindungsstring |
|---|---|---|
| Default-Instanz | MSSQLSERVER | SERVERNAME oder SERVERNAME\MSSQLSERVER |
| Benannte Instanz | MSSQL$INSTANZNAME | SERVERNAME\INSTANZNAME |
# Alle SQL-Server-Dienste auf dem lokalen Server anzeigen
Get-Service -Name "MSSQL*", "SQLSERVERAGENT", "SQLBrowser" | Select-Object Name, Status, StartType
Wenn du nicht weisst, wie die Instanz heisst, schau ins Windows-Dienstemenü oder frag die Applikationsbetreuung.
Wichtige Dienste kennen und prüfen
SQL Server besteht aus mehreren Diensten. Wenn eine Applikation nicht auf die Datenbank zugreifen kann, ist der erste Check: Laufen die Dienste?
# Default-Instanz
Get-Service -Name "MSSQLSERVER"
# Benannte Instanz (z.B. "SQLEXPRESS")
Get-Service -Name "MSSQL$SQLEXPRESS"
# SQL Server Agent (für automatische Jobs – nicht in Express)
Get-Service -Name "SQLSERVERAGENT"
# SQL Server Browser (nötig für benannte Instanzen über Netzwerk)
Get-Service -Name "SQLBrowser"
# Full-Text Search (nur wenn das Feature installiert ist)
Get-Service -Name "MSSQLFDLauncher"
# Dienst neu starten (Default-Instanz)
Restart-Service -Name "MSSQLSERVER" -Force
# Benannte Instanz
Restart-Service -Name "MSSQL$SQLEXPRESS" -Force
SQL Server Management Studio (SSMS)
SSMS ist das Haupt-Verwaltungstool für SQL Server. Aktuell ist SSMS 22 verfügbar.
Kostenloses Admin-Tool von Microsoft für alle SQL-Server-Aufgaben
learn.microsoft.com
Verbindung herstellen:
- SSMS öffnen
- Server-Name eingeben (z.B.
SQL-SRV01oderSQL-SRV01\SQLEXPRESS) - Authentifizierung wählen:
- Windows-Authentifizierung – empfohlen im Domänenumfeld, nutzt dein AD-Konto
- SQL Server-Authentifizierung – separates SQL-Login mit Benutzername + Passwort (z.B.
sa)
- Verbinden klicken
Die wichtigsten Bereiche in SSMS:
| Bereich | Wozu |
|---|---|
| Object Explorer | Übersicht aller Datenbanken, Tabellen, Logins |
| Aktivitätsmonitor | Laufende Prozesse, blockierende Abfragen, I/O-Last |
| SQL Server Agent | Automatische Jobs und deren Status |
| Datenbank-Eigenschaften | Recovery Model, Grösse, Datei-Pfade |
| Sicherung / Wiederherstellung | Backup & Restore per GUI |
Recovery Model – entscheidend für Backups
Das Recovery Model einer Datenbank bestimmt, welche Backup-Typen möglich sind und wie viel Datenverlust im Worst Case droht.
| Model | Transaktionslog | Log-Backup nötig? | Datenverlust bei Ausfall |
|---|---|---|---|
| SIMPLE | Wird automatisch abgeschnitten | Nein | Seit letztem Full-Backup |
| FULL | Wächst bis zum Log-Backup | Ja, zwingend | Bis zum letzten Log-Backup |
| BULK_LOGGED | Wie FULL, Massenoperationen minimal geloggt | Ja | Ähnlich wie FULL |
-- Recovery Model einer Datenbank prüfen
SELECT name, recovery_model_desc
FROM sys.databases
ORDER BY name;
-- Recovery Model ändern (Beispiel auf SIMPLE)
ALTER DATABASE [MeineDatenbank] SET RECOVERY SIMPLE;
Backups einrichten und verstehen
Backup-Typen
| Typ | Inhalt | Typische Häufigkeit |
|---|---|---|
| Full Backup | Gesamte Datenbank | Täglich oder wöchentlich |
| Differential Backup | Änderungen seit letztem Full | Täglich (zwischen Fulls) |
| Transaction Log Backup | Alle Transaktionen seit letztem Log-Backup | Stündlich oder alle 15 min |
Backup per T-SQL
-- Vollbackup mit Komprimierung
BACKUP DATABASE [MeineDatenbank]
TO DISK = N'D:\Backups\MeineDatenbank_Full_20260623.bak'
WITH COMPRESSION, STATS = 10;
-- Differential Backup
BACKUP DATABASE [MeineDatenbank]
TO DISK = N'D:\Backups\MeineDatenbank_Diff_20260623.bak'
WITH DIFFERENTIAL, COMPRESSION, STATS = 10;
-- Transaktionslog-Backup (nur bei FULL oder BULK_LOGGED Recovery)
BACKUP LOG [MeineDatenbank]
TO DISK = N'D:\Backups\MeineDatenbank_Log_20260623_1400.bak'
WITH COMPRESSION;
Backup-Job per PowerShell (für Express-Edition ohne SQL Agent)
# Backup-Skript: C:\Scripts\sql_backup.ps1
$server = "localhost\SQLEXPRESS"
$database = "MeineDatenbank"
$date = Get-Date -Format "yyyyMMdd_HHmm"
$path = "D:\Backups\${database}_Full_${date}.bak"
$query = @"
BACKUP DATABASE [$database]
TO DISK = N'$path'
WITH COMPRESSION, STATS = 10;
"@
Invoke-Sqlcmd -ServerInstance $server -Query $query
Write-Host "Backup erstellt: $path"
Dieses Skript kannst du im Windows Task Scheduler täglich einplanen. Kombiniere es mit einem Retention-Script, das alte Backups automatisch löscht – zum Beispiel alles, das älter als 14 Tage ist:
Get-ChildItem "D:\Backups\*.bak" |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-14) } |
Remove-Item -Force
Datenbank wiederherstellen
-- WICHTIG: Zuerst alle Verbindungen trennen
ALTER DATABASE [MeineDatenbank] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- Vollbackup wiederherstellen
RESTORE DATABASE [MeineDatenbank]
FROM DISK = N'D:\Backups\MeineDatenbank_Full_20260623.bak'
WITH REPLACE, STATS = 10;
-- Danach wieder Multi-User
ALTER DATABASE [MeineDatenbank] SET MULTI_USER;
Über SSMS geht das auch per GUI: Rechtsklick auf die Datenbank > Aufgaben > Wiederherstellen > Datenbank.
Datenbankgrössen und -status überwachen
Diese Abfragen helfen dir, schnell einen Überblick zu bekommen:
-- Alle Datenbanken mit Grösse (in MB)
SELECT
name,
size * 8 / 1024 AS SizeMB,
state_desc AS Status
FROM sys.master_files
WHERE type = 0 -- 0 = Datendatei (.mdf)
ORDER BY size DESC;
-- Datenbank- und Log-Dateigrössen mit Pfaden
SELECT
d.name AS Datenbank,
mf.physical_name AS Pfad,
mf.size * 8 / 1024 AS GroesseMB,
mf.type_desc AS Typ
FROM sys.databases d
JOIN sys.master_files mf ON d.database_id = mf.database_id
ORDER BY d.name, mf.type;
-- Aktive Verbindungen (alle User-Prozesse)
SELECT
session_id,
login_name,
host_name,
program_name,
status,
last_request_start_time
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
ORDER BY last_request_start_time DESC;
Verbindungsprobleme lösen
Verbindungsprobleme sind der häufigste SQL-Server-Supportfall. Die Ursachen lassen sich systematisch eingrenzen.
Checkliste: Client kann nicht verbinden
1. Dienst läuft?
Get-Service -Name "MSSQLSERVER", "MSSQL$*", "SQLBrowser" | Select-Object Name, Status
2. Netzwerk erreichbar?
# Standard-Port 1433 (Default-Instanz)
Test-NetConnection -ComputerName SQL-SRV01 -Port 1433
# Benannte Instanz nutzt dynamische Ports via SQL Browser (UDP 1434)
Test-NetConnection -ComputerName SQL-SRV01 -Port 1434
3. Firewall-Regel auf dem SQL-Server?
# Firewall-Regel für Port 1433 anlegen (auf dem SQL-Server als Admin)
New-NetFirewallRule -DisplayName "SQL Server Port 1433" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 1433 `
-Action Allow `
-Profile Domain,Private
# Für SQL Browser (UDP 1434) – nötig für benannte Instanzen
New-NetFirewallRule -DisplayName "SQL Server Browser UDP 1434" `
-Direction Inbound `
-Protocol UDP `
-LocalPort 1434 `
-Action Allow `
-Profile Domain,Private
4. TCP/IP im SQL Server Configuration Manager aktiviert?
Öffne den SQL Server Configuration Manager (SQLServerManager16.msc oder über das Startmenü):
- SQL Server Network Configuration > Protocols for MSSQLSERVER
- TCP/IP muss auf Enabled stehen
- Nach Änderung: SQL-Dienst neu starten
5. Named Pipes vs. TCP/IP
Bei Verbindungsfehlern wie “Named Pipes Provider: could not open a connection” ist TCP/IP deaktiviert oder der SQL Browser läuft nicht. Empfehlung: TCP/IP verwenden und Named Pipes deaktivieren.
Typische Supportfälle
Datenbank im “Suspect”-Modus
-- Status prüfen
SELECT name, state_desc FROM sys.databases WHERE state_desc != 'ONLINE';
Suspect bedeutet: SQL Server konnte die Datenbank beim Start nicht korrekt öffnen – oft nach einem ungeplanten Neustart, einem abgebrochenen Restore oder einer beschädigten Datei.
Vorgehen:
- SQL Server-Fehlerlog prüfen:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG - Wenn Backup vorhanden: Datenbank aus Backup wiederherstellen (sicherste Methode)
- Als Notfallmassnahme (Datenverlust möglich!):
-- Notfall-Recovery (nur wenn kein gutes Backup vorhanden)
EXEC sp_resetstatus 'MeineDatenbank';
ALTER DATABASE [MeineDatenbank] SET EMERGENCY;
DBCC CHECKDB('MeineDatenbank');
ALTER DATABASE [MeineDatenbank] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB('MeineDatenbank', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [MeineDatenbank] SET MULTI_USER;
Transaktionslog voll (Laufwerk fast voll)
Symptom: Applikation wirft Fehler “The transaction log for database X is full due to LOG_BACKUP”.
-- Log-Nutzung prüfen
DBCC SQLPERF(LOGSPACE);
-- Ursache prüfen
SELECT name, log_reuse_wait_desc FROM sys.databases;
-- LOG_BACKUP = Log-Backup fehlt
-- ACTIVE_TRANSACTION = offene Transaktion blockiert Log-Truncation
Sofortmassnahme bei FULL Recovery Model: Log-Backup ausführen (das “schneidet” das Log ab):
BACKUP LOG [MeineDatenbank]
TO DISK = N'D:\Backups\MeineDatenbank_Emergency_Log.bak';
Wenn keine Log-Backups geplant sind und Point-in-Time-Recovery nicht gebraucht wird, auf SIMPLE wechseln:
ALTER DATABASE [MeineDatenbank] SET RECOVERY SIMPLE;
DBCC SHRINKFILE (MeineDatenbank_Log, 1); -- Log-Datei verkleinern
Blockierende Abfragen (Applikation “hängt”)
-- Blockierende Sessions finden
SELECT
blocking.session_id AS BlockingSession,
blocked.session_id AS BlockedSession,
blocked.wait_type,
blocked.wait_time / 1000 AS WaitSekunden,
blocked_text.text AS BlockedQuery
FROM sys.dm_exec_sessions blocked
JOIN sys.dm_exec_sessions blocking ON blocked.blocking_session_id = blocking.session_id
CROSS APPLY sys.dm_exec_sql_text(blocked.most_recent_sql_handle) blocked_text
WHERE blocked.blocking_session_id != 0;
-- Session beenden (nur wenn eindeutig identifiziert)
KILL 123; -- 123 = session_id der blockierenden Session
SQL Server Fehlerlog lesen
Das SQL Server Fehlerlog ist die erste Anlaufstelle bei Problemen. Es liegt standardmässig unter:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG
-- Fehlerlog direkt in SSMS lesen
EXEC sp_readerrorlog 0, 1, 'error';
EXEC sp_readerrorlog 0, 1, 'failed';
-- Letzten 100 Zeilen
EXEC sp_readerrorlog;
Alternativ im SSMS Object Explorer: Management > SQL Server Logs > Current.
SQL Server Agent – Jobs überwachen
Der SQL Server Agent führt automatische Jobs aus (Backups, Wartungsaufgaben, Reports). Er ist ein eigener Windows-Dienst (SQLSERVERAGENT) und nicht in der Express-Edition enthalten.
# Agent-Dienst-Status prüfen
Get-Service -Name "SQLSERVERAGENT"
# Agent starten falls gestoppt
Start-Service -Name "SQLSERVERAGENT"
-- Job-Status und letzten Lauf anzeigen
SELECT
j.name AS JobName,
j.enabled AS Aktiv,
CASE jh.run_status
WHEN 0 THEN 'Fehler'
WHEN 1 THEN 'Erfolgreich'
WHEN 2 THEN 'Wiederholen'
WHEN 3 THEN 'Abgebrochen'
WHEN 4 THEN 'Läuft'
END AS LetzterStatus,
msdb.dbo.agent_datetime(jh.run_date, jh.run_time) AS LetzterLauf
FROM msdb.dbo.sysjobs j
LEFT JOIN msdb.dbo.sysjobhistory jh
ON j.job_id = jh.job_id AND jh.step_id = 0
ORDER BY LetzterLauf DESC;
Benutzer und Logins verwalten
SQL Server hat zwei Arten von Zugängen:
| Typ | Beschreibung |
|---|---|
| Windows Login | Nutzt AD-Konto (empfohlen in Domäne) |
| SQL Login | SQL-eigenes Konto mit eigenem Passwort |
-- Alle Logins anzeigen
SELECT name, type_desc, is_disabled FROM sys.server_principals
WHERE type IN ('S', 'U', 'G') -- S=SQL, U=Windows User, G=Windows Gruppe
ORDER BY name;
-- Neuen Windows-Login hinzufügen
CREATE LOGIN [FIRMA\m.muster] FROM WINDOWS;
-- Login einer Datenbank als User hinzufügen
USE [MeineDatenbank];
CREATE USER [m.muster] FOR LOGIN [FIRMA\m.muster];
ALTER ROLE db_datareader ADD MEMBER [m.muster]; -- Lesezugriff
ALTER ROLE db_datawriter ADD MEMBER [m.muster]; -- Schreibzugriff
-- Datenbankzugriff eines Users prüfen
EXEC sp_helprotect @username = 'm.muster';
Crosslinks
Weitere Themen, die in diesem Kontext relevant sind:
- PowerShell im IT-Alltag – Skripte für Backup-Automatisierung
- Windows Server Backup – Backup-Strategie auf Serverebene
- Windows Ereignisanzeige – Fehler parallel im Windows-Eventlog suchen
- ERP Grundlagen Support – SQL Server ist oft das Backend von ERP-Systemen
Weiterlernen
- Microsoft Learn: Back up and Restore of SQL Server Databases
- Microsoft Learn: SSMS herunterladen und installieren
- Microsoft Learn: Firewall für SQL Server konfigurieren
- Microsoft Learn: sys.dm_exec_sessions (blockierende Abfragen)
- Microsoft Learn: BACKUP (Transact-SQL) Referenz
- MS-SQL-Server für Anfänger – YouTube-Serie (deutsch)
Kommentare
Frage, Verbesserungsvorschlag oder eigene Erfahrung zu diesem Artikel? Schreib einen Kommentar. Neue Beiträge erscheinen nach kurzer Moderation.
- Lade Kommentare …