Microsoft SQL Server läuft seit 2017 auch unter Linux, und die kostenlose Express-Edition kann unter Linux in einer Produktionsumgebung eingesetzt werden. Wenn eine Anwendung eine MSSQL-Datenbank benötigt, ist hierfür nicht unbedingt Windows Server erforderlich: Es reicht ein Linux-basierter KVM-VPS, auf dem der SQL Server als Systemdienst oder in einem Docker-Container ausgeführt wird.
Dieser Artikel stellt beide Varianten vor und vergleicht die Linux-Version mit der unter Windows laufenden Version: Was ist identisch, was fehlt unter Linux und wann ist Windows dennoch die bessere Wahl? Allgemeine Informationen zu den Versionen und zum Betrieb von SQL Server finden Sie in unserem MSSQL-Leitfaden.
Wir haben die Schritte im November 2026 auf einer virtuellen Maschine mit x86_64-Architektur und AlmaLinux 10.2 getestet, und zwar mit der Version SQL Server 2025 RTM-CU10 (17.0.5035.5), sowohl nativ als auch unter Docker CE 29.9. Führen Sie die Befehle mit sudo oder als Root-Benutzer aus.
Bevor Sie beginnen
- Läuft ausschließlich auf x86_64-Prozessoren (Intel, AMD). Für ARM-Prozessoren (z. B. Ampere oder Apple Silicon) gibt es weder ein Paket noch ein Container-Image, und Microsoft unterstützt auch keine Emulation (Rosetta, QEMU).
-
Es sind mindestens 2 GB Arbeitsspeicher erforderlich. Mit weniger als dieser Menge lässt sich der Dienst gar nicht erst starten. Im Test mit 1 GB Arbeitsspeicher brach der Dienst sofort mit folgender Meldung ab:
sqlservr: This program requires a machine with at least 2000 megabytes of memory.Mit 2 GB startete er, doch für das System und den SQL Server wird der Arbeitsspeicher knapp. Für die Express-Edition werden mindestens 4 GB Arbeitsspeicher empfohlen.
- Unterstützte Betriebssysteme. SQL Server 2025 wird offiziell unter Red Hat Enterprise Linux 9 und 10 sowie unter Ubuntu 22.04 und 24.04 auf den Dateisystemen XFS oder ext4 unterstützt. SUSE wird von der Version 2025 nicht mehr unterstützt. AlmaLinux und Rocky Linux sind binärkompatibel mit RHEL; RHEL-Pakete lassen sich problemlos darauf installieren und ausführen, werden jedoch von Microsoft nicht offiziell aufgeführt. Wenn Ihnen offizieller Support wichtig ist, wählen Sie Ubuntu 24.04 oder führen Sie SQL Server in Docker aus, das auf jedem x86_64-basierten Linux-System unterstützt wird.
- Welche Version für welches System? Auf AlmaLinux 10 kann nur SQL Server 2025 installiert werden (für die Version 2022 gibt es kein RHEL-10-Repository), auf AlmaLinux 9 hingegen sowohl die Version 2022 als auch die Version 2025.
Nativ oder Docker?
| Native Installation | Docker-Container | |
|---|---|---|
| Installation | Microsoft-Repository, dnf install |
Ein docker run-Befehl |
| Aktualisierung | dnf update mssql-server |
Neues Image herunterladen, Container neu erstellen |
| Starten, Beenden | systemd-Dienst (mssql-server) |
Docker mit Neustart-Regel |
| SELinux | Eigenes Richtlinienpaket (mssql-server-selinux) |
Übernimmt Docker |
| Firewall | Die firewalld-Regeln sind gültig | Der veröffentlichte Port umgeht die Firewalld (siehe unten) |
| Speicherbedarf | Ca. 2,5 GB (/opt/mssql) |
Das Bild belegt 2,4 GB Speicherplatz auf der Festplatte |
| Wozu dient das? | Ein Datenbankserver für den langfristigen Einsatz | Mehrere Versionen parallel, Entwicklung, schneller Austausch |
Wenn auf dem Server ausschließlich SQL Server ausgeführt wird, ist die native Installation die einfachere Variante: Sie wird als Systemdienst gestartet, wird von dnf aktualisiert und die Firewall funktioniert wie erwartet. Docker ist dann die bessere Wahl, wenn auf dem Rechner bereits Anwendungen in Containern laufen oder wenn Sie mehrere SQL Server-Versionen nebeneinander betreiben möchten.
A) Native Installation auf AlmaLinux 10
1. Das Repository und das Paket
curl -fsSL https://packages.microsoft.com/config/rhel/10/mssql-server-2025.repo | sudo tee /etc/yum.repos.d/mssql-server-2025.repo
sudo dnf install -y mssql-server
Bei AlmaLinux 9 muss in der Adresse anstelle von rhel/10 rhel/9 stehen. Für SQL Server 2022 benötigen Sie die Datei mssql-server-2022.repo; diese finden Sie ausschließlich unter dem Pfad rhel/9.
dnf fragt bei der Erstinstallation nach dem Microsoft-Paket-Signaturschlüssel; bitte akzeptieren Sie diesen. Das Paket wird im Verzeichnis /opt/mssql installiert, die Datenbanken werden unter /var/opt/mssql abgelegt.
2. Edition und sa-Passwort
sudo /opt/mssql/bin/mssql-conf setup
Das Programm fragt zunächst nach der Edition:
Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Enterprise Developer (free, no production use rights)
3) Standard Developer (free, no production use rights)
4) Express (free)
5) Standard (PAID)
...
Enter your edition(1-10):
Geben Sie für Express die Zahl 4 ein, akzeptieren Sie die Lizenzbedingungen und geben Sie anschließend zweimal das Passwort des Systemadministrators (sa) ein. Das Passwort muss mindestens 8 Zeichen lang sein und mindestens drei der folgenden Zeichenarten enthalten: Kleinbuchstaben, Großbuchstaben, Ziffern und Sonderzeichen. Wenn diese Anforderungen nicht erfüllt sind, bricht die Einrichtung mit einer Fehlermeldung ab.
Per Skript lässt sich die Einrichtung auch ohne Rückfragen erledigen:
sudo MSSQL_PID=Express ACCEPT_EULA=Y MSSQL_SA_PASSWORD='Hosszu-Egyedi-Jelszo-1' /opt/mssql/bin/mssql-conf -n setup
Das Passwort wird dabei in den Befehlsverlauf übernommen; bitte löschen Sie es nach der Einrichtung dort wieder oder nutzen Sie die interaktive Version.
Nach Abschluss der Einrichtung wird der Dienst gestartet und läuft auch beim Systemstart automatisch:
systemctl status mssql-server --no-pager
3. Die Befehlszeilentools
sqlcmd und bcp werden in einem separaten Paket aus dem allgemeinen Repository von Microsoft bereitgestellt:
curl -fsSL https://packages.microsoft.com/config/rhel/10/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
sudo ACCEPT_EULA=Y dnf install -y mssql-tools18 unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
Testen Sie die Verbindung:
sqlcmd -S localhost -U sa -C -Q "SELECT @@VERSION"
Der Schalter -C ist obligatorisch: mssql-tools18 erfordert eine verschlüsselte Verbindung, und der SQL Server verwendet nach der Installation ein selbstsigniertes Zertifikat. Ohne diesen Schalter tritt folgender Fehler auf:
SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate]
Die Antwort im Test:
Microsoft SQL Server 2025 (RTM-CU10) (KB5125471) - 17.0.5035.5 (X64)
Express Edition (64-bit) on Linux (AlmaLinux 10.2 (Lavender Lion)) <X64>
Das Passwort wird von sqlcmd abgefragt (Password:) oder aus der Umgebungsvariablen SQLCMDPASSWORD übernommen. Der Schalter -P jelszo funktioniert ebenfalls, allerdings wird das Passwort auf diese Weise auch in der Prozessliste angezeigt.
4. SELinux
Auf AlmaLinux läuft SQL Server standardmäßig als Prozess ohne Einschränkungen (unconfined_service_t). Microsoft fügt eine eigene SELinux-Richtlinie hinzu, die den Prozess in eine eigene, enger gefasste Domäne (mssql_server_t) einordnet:
sudo dnf install -y mssql-server-selinux
sudo systemctl restart mssql-server
ps -eZ | grep sqlservr
Im Test lief auch mit der Richtlinie alles fehlerfrei, darunter auch die unten dargestellte Sicherung. Außerhalb des Verzeichnisses /var/opt/mssql lässt die Richtlinie jedoch keine Schreibvorgänge zu: Eine Sicherung, die in einem Verzeichnis /srv/mssql-backup erstellt werden sollte, brach mit der Fehlermeldung „Operating system error 5 (Access is denied.)“ ab, obwohl der Eigentümer des Verzeichnisses der Benutzer mssql war. Weisen Sie einem solchen Verzeichnis das SELinux-Label des SQL Servers zu:
sudo semanage fcontext -a -t mssql_var_t "/srv/mssql-backup(/.*)?"
sudo restorecon -Rv /srv/mssql-backup
5. Speicherbegrenzung
Unter Linux beansprucht SQL Server standardmäßig 80 % des physischen Arbeitsspeichers für sich. Falls auf dem Server noch andere Anwendungen laufen (beispielsweise eine Webanwendung), legen Sie bitte eine niedrigere Obergrenze fest:
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3072
sudo systemctl restart mssql-server
Die Express-Edition nutzt für den Cache (Buffer Pool) ohnehin höchstens 1410 MB, doch der Prozess beansprucht insgesamt mehr Speicherplatz; setzen Sie die Obergrenze daher nicht unter 2 GB. Wenn der Speicher knapp wird, beendet der Kernel den Prozess mit dem höchsten Speicherbedarf, bei dem es sich in den meisten Fällen gerade um den SQL Server handelt (siehe: Speicher knapp: OOM-Killer und Auslagerungsdatei).
Die Einstellungen für mssql-conf werden in die Datei /var/opt/mssql/mssql.conf geschrieben und treten nach einem Neustart in Kraft.
6. Volltextsuche
Die Express-Edition enthält ab der Version 2025 auch die Funktionen der früheren Edition „Express with Advanced Services“, darunter die Volltextsuche (Full-Text Search). Unter Linux handelt es sich dabei um ein separates Paket:
sudo dnf install -y mssql-server-fts
sudo systemctl restart mssql-server
Im Test funktionierte die CONTAINS-Suche auch in der Express-Edition.
B) SQL Server Express in einem Docker-Container
Dazu ist Docker auf dem Server erforderlich. Unter AlmaLinux wird Docker CE aus dem eigenen Repository von Docker installiert (https://download.docker.com/linux/rhel/docker-ce.repo, Pakete: docker-ce, docker-ce-cli, containerd.io).
Start
docker volume create mssql-data
docker run -d --name sql1 --hostname sql1 \
-e ACCEPT_EULA=Y \
-e MSSQL_PID=Express \
-e MSSQL_SA_PASSWORD='Hosszu-Egyedi-Jelszo-1' \
-p 127.0.0.1:1433:1433 \
-v mssql-data:/var/opt/mssql \
--restart unless-stopped \
mcr.microsoft.com/mssql/server:2025-latest
MSSQL_PID=Express: Ohne diesen Parameter wird der Container mit der Developer-Edition gestartet, die nicht für den produktiven Einsatz lizenziert ist.-v mssql-data:/var/opt/mssql: Die Datenbanken befinden sich in einem Docker-Volume, sodass sie auch nach dem Löschen und erneuten Erstellen des Containers erhalten bleiben. Ohne Volume gehen die Daten zusammen mit dem Container verloren.-p 127.0.0.1:1433:1433: Der Port ist nur von innerhalb des Servers erreichbar. Der Grund hierfür wird im folgenden Abschnitt erläutert.--restart unless-stopped: Der Container wird auch nach einem Neustart des Servers gestartet.
Der Container wurde im Test innerhalb von 10 Sekunden gestartet. Die Edition lässt sich im Protokoll prüfen:
docker logs sql1 2>&1 | grep -A1 "Microsoft SQL Server 2025"
Microsoft SQL Server 2025 (RTM-CU10) (KB5125471) - 17.0.5035.5 (X64)
Express Edition (64-bit) on Linux (Ubuntu 24.04.5 LTS) <X64>
Das Image basiert auf Ubuntu und enthält auch das Programm sqlcmd:
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -C
Docker umgeht die Firewall
Docker öffnet die veröffentlichten Ports der Container anhand eigener Regeln, und diese haben Vorrang vor den Regeln von firewalld. Im Test war der mit dem Schalter -p 1433:1433 gestartete Container auch von außen erreichbar, obwohl in firewalld keine Regel für Port 1433 vorhanden war. Binden Sie den Port daher stets an die lokale Adresse (-p 127.0.0.1:1433:1433) und realisieren Sie den Fernzugriff über einen SSH-Tunnel (siehe unten). Sollte ein anderer Server direkten Zugriff auf die Datenbank benötigen, wählen Sie lieber die native Installation, bei der die firewalld-Regel gilt.
Ein Ordner statt eines Volumes
Wenn Sie anstelle des Docker-Volumes einen Ordner einbinden (-v /srv/mssql:/var/opt/mssql), muss der Ordner dem Benutzer 10001 gehören, da der SQL Server im Container unter dieser Kennung (mssql) und nicht als root läuft. Bei einem Ordner, der root gehört, wird der Container sofort beendet:
/opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. ... Permission denied
Die Lösung:
sudo mkdir -p /srv/mssql
sudo chown 10001:10001 /srv/mssql
Speicherbegrenzung im Container
Sie können den Arbeitsspeicher des Containers mit dem Docker-Schalter --memory oder der SQL Server-Variablen MSSQL_MEMORY_LIMIT_MB begrenzen. Im Test erkannte der SQL Server bei --memory 2g 1639 MB (80 % von 2 GB) und bei -e MSSQL_MEMORY_LIMIT_MB=2048 genau 2048 MB.
Beenden: Der Befehl „docker stop“ beendet den Prozess nicht ordnungsgemäß
Im Container handelt es sich bei Prozess Nr. 1 um ein Startskript (launch_sqlservr.sh), das das Beendigungssignal nicht an den SQL Server weiterleitet. Der Befehl docker stop wartet daher die Wartezeit ab (standardmäßig 10 Sekunden) und beendet den Prozess anschließend (Exit-Code: 137). Im Test führte dies zu keinen Datenverlusten: Beim Neustart stellte der SQL Server die Datenbanken anhand des Transaktionsprotokolls wieder her, und alle abgeschlossenen Transaktionen blieben erhalten. Ein ordnungsgemäßer Herunterfahrvorgang ermöglicht jedoch einen schnelleren Neustart, und eine Wiederherstellung ist nicht erforderlich.
Wenn Sie ein ordnungsgemäßes Herunterfahren wünschen, starten Sie den Container direkt mit dem SQL Server und dem Schalter --entrypoint /opt/mssql/bin/sqlservr (im obigen docker run-Befehl vor dem Namen des Images). Im Test hat docker stop den Server auf diese Weise sofort ordnungsgemäß heruntergefahren. Das Startskript des Images wird in diesem Fall nicht ausgeführt, ebenso wenig wie die Überprüfung der Ordnerberechtigungen: Bei einem Ordner mit falschem Eigentümer erhalten Sie lediglich die eigene Fehlermeldung des SQL-Servers.
Aktualisierung
Bei einem Container erfolgt die Aktualisierung durch das Austauschen des Images: Laden Sie das neue Image herunter, löschen Sie den Container und starten Sie ihn mit demselben Volume neu.
docker pull mcr.microsoft.com/mssql/server:2025-latest
docker stop sql1
docker rm sql1
# majd a fenti docker run parancs, ugyanazzal a kötettel
Im Test wurde das Volume eines SQL Server 2022-Containers problemlos auf die Version 2025 übertragen, wobei die Datenbanken weiterhin verfügbar blieben. In umgekehrter Richtung funktioniert dies nicht: Eine mit der Version 2025 geöffnete Datenbank lässt sich mit der Version 2022 nicht mehr öffnen. Erstellen Sie vor jedem Update stets eine Sicherungskopie.
Fernzugriff
Die native Installation lauscht an jeder Netzwerkadresse auf Port 1433. Öffnen Sie den Datenbankport niemals für das gesamte Internet: Der SQL-Server ist ständig Passwort-Brute-Force-Angriffen ausgesetzt.
SSH-Tunnel (empfohlen): Richten Sie auf Ihrem eigenen Rechner einen Tunnel zum Server ein und stellen Sie mit SQL Server Management Studio (SSMS) oder einem anderen Client eine Verbindung zur Adresse localhost,1433 her:
ssh -L 1433:127.0.0.1:1433 felhasznalo@szerver-ip
Hierfür muss auf dem Server außer SSH kein weiterer Port geöffnet werden. Weitere Informationen zu SSH finden Sie in unserem Artikel Linux Secure Shell (SSH).
Zulassung einer IP-Adresse: Wenn ein anderer Server auf die Datenbank zugreift (bei einer nativen Installation), lassen Sie in firewalld nur dessen Adresse zu:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="1433" protocol="tcp" accept'
sudo firewall-cmd --reload
Allgemeine Informationen zur Konfiguration der Firewall finden Sie im Artikel Konfiguration der Firewall auf einem VPS. Wenn die Verbindung nicht über ein lokales Netzwerk hergestellt wird, aktivieren Sie bitte die Verschlüsselung auf dem Client und ersetzen Sie das selbstsignierte Zertifikat durch ein gültiges oder nutzen Sie den SSH-Tunnel.
Sicherung und Wiederherstellung
Geplante Datensicherung mit dem systemd-Timer
Laut Microsoft ist in der Express-Edition kein SQL Server Agent enthalten, sodass die geplanten Sicherungen vom Linux-Scheduler durchgeführt werden. Im Test wurde der Agent auch unter Linux in der Express-Edition gestartet (mssql-conf set sqlagent.enabled true), und es wurde eine Sicherungsaufgabe damit ausgeführt; da die Express-Edition jedoch laut dem Versionsvergleich von Microsoft den Agent nicht enthält, sollten Sie sich in einer Produktionsumgebung nicht darauf verlassen.
Das folgende Skript erstellt eine vollständige Sicherung aller Benutzerdatenbanken und löscht diejenigen, die älter als 7 Tage sind. Es ist für die native Installation vorgesehen; bei einer Docker-Umgebung muss der Befehl sqlcmd im Container ausgeführt werden (docker exec sql1 /opt/mssql-tools18/bin/sqlcmd ...), wobei die Sicherungen auf dem Volume gespeichert werden.
Das Passwort wird in einer Datei gespeichert, auf die nur der Root-Benutzer Zugriff hat:
echo 'SQLCMDPASSWORD=Hosszu-Egyedi-Jelszo-1' | sudo tee /etc/mssql-backup.env
sudo chmod 600 /etc/mssql-backup.env
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
Das Skript: /usr/local/bin/mssql-backup
#!/bin/bash
# Minden felhasználói adatbázis teljes mentése
set -euo pipefail
SQLCMD="/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -C -b -h -1 -W"
NAP=$(date +%F)
for DB in $($SQLCMD -Q "SET NOCOUNT ON; SELECT name FROM sys.databases WHERE database_id > 4 AND state_desc = 'ONLINE'"); do
$SQLCMD -Q "BACKUP DATABASE [$DB] TO DISK = N'/var/opt/mssql/backup/${DB}_${NAP}.bak' WITH INIT, CHECKSUM"
done
find /var/opt/mssql/backup -name "*.bak" -mtime +7 -delete
Das Skript funktioniert nicht mit einem Datenbanknamen, der ein Leerzeichen enthält. Machen Sie die Datei ausführbar: sudo chmod 755 /usr/local/bin/mssql-backup.
Der Dienst: /etc/systemd/system/mssql-backup.service
[Unit]
Description=SQL Server adatbázisok mentése
After=mssql-server.service
[Service]
Type=oneshot
EnvironmentFile=/etc/mssql-backup.env
ExecStart=/usr/local/bin/mssql-backup
Der Timer: /etc/systemd/system/mssql-backup.timer
[Unit]
Description=SQL Server mentés minden éjjel 2-kor
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Aktivierung und eine Test-Sicherung:
sudo systemctl daemon-reload
sudo systemctl enable --now mssql-backup.timer
sudo systemctl start mssql-backup.service
journalctl -u mssql-backup.service -n 5
Aufgrund der Einstellung Persistent=true wird die versäumte Sicherung (beispielsweise weil der Server gerade nicht lief) beim nächsten Systemstart ausgeführt. Wenn Sie lieber cron verwenden möchten, kann das Skript auch von dort aus gestartet werden (siehe: Crontab-Syntax und geplante Aufgaben unter Linux).
Kopieren Sie die Sicherungen regelmäßig auf einen anderen Rechner, beispielsweise mit rsync (siehe: Dateien zwischen Servern kopieren): Eine Sicherung, die zusammen mit dem Server verloren geht, bietet keinerlei Schutz.
Die Express-Edition kann keine komprimierten Backups erstellen. Bei Verwendung des Schalters WITH COMPRESSION erhalten Sie folgende Fehlermeldung:
Msg 1844, Level 16, State 1
BACKUP DATABASE WITH COMPRESSION is not supported on Express Edition (64-bit).
Komprimieren Sie die fertigen .bak-Dateien anschließend, beispielsweise mit zstd oder gzip.
Wiederherstellung eines Windows-Backups unter Linux
Das Format der Sicherungsdateien ist unter Windows und Linux identisch, sodass eine unter Windows erstellte SQL Server-.bak-Datei auch unter Linux wiederhergestellt werden kann, sofern die Linux-Version identisch oder neuer ist. Da die Sicherung jedoch Windows-Pfade enthält (C:\Program Files\...), müssen die Dateien mit dem Schalter WITH MOVE verschoben werden. Listen Sie zunächst die logischen Namen der in der Sicherung enthaltenen Dateien auf:
RESTORE FILELISTONLY FROM DISK = N'/var/opt/mssql/backup/AdventureWorksLT2022.bak';
Stellen Sie die Datenbank anschließend mit den logischen Namen wieder her:
RESTORE DATABASE AdventureWorksLT
FROM DISK = N'/var/opt/mssql/backup/AdventureWorksLT2022.bak'
WITH MOVE 'AdventureWorksLT2022_Data' TO '/var/opt/mssql/data/AdventureWorksLT.mdf',
MOVE 'AdventureWorksLT2022_Log' TO '/var/opt/mssql/data/AdventureWorksLT_log.ldf';
Im Test wurde die unter Microsoft Windows erstellte Beispieldatenbank „AdventureWorksLT2022“ auf diese Weise fehlerfrei wiederhergestellt. Ohne WITH MOVE tritt folgender Fehler auf:
Directory lookup for the file "C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorksLT2022.mdf" failed with the operating system error 2(The system cannot find the file specified.).
Die Sicherungsdatei muss vom Benutzer mssql lesbar sein. Bei einer nativen Installation kopieren Sie die Datei in das Verzeichnis /var/opt/mssql/backup und weisen Sie sie dem Benutzer mssql zu (sudo chown mssql:mssql fajl.bak). Bei Docker kopiert der Befehl docker cp die Datei mit Root-Rechten in den Container; in diesem Fall bricht die Wiederherstellung mit dem Fehler „Operating system error 5 (Access is denied.)“ ab. Übertragen Sie die Datei nach dem Kopieren wie folgt:
docker cp AdventureWorksLT2022.bak sql1:/var/opt/mssql/backup/
docker exec -u 0 sql1 chown mssql:mssql /var/opt/mssql/backup/AdventureWorksLT2022.bak
Das Gleiche gilt auch umgekehrt: Ein unter Linux erstelltes Backup kann auch unter Windows wiederhergestellt werden, und zwar auf dieselbe oder eine neuere Version.
Grenzen der Express-Edition unter Linux und Windows
Die Einschränkungen der Express-Edition sind systemunabhängig und unter Linux dieselben wie unter Windows (SQL Server 2025):
| Beschränkung | Express |
|---|---|
| Prozessor | 1 Steckplatz oder 4 Kerne – je nachdem, was weniger ist |
| Datenpuffer (Buffer Pool) | 1410 MB |
| Columnstore und speicheroptimierte Daten | 352 MB pro Datenbank |
| Datenbankgröße | 50 GB pro Datenbank (10 GB bei den Versionen von 2022 und früher) |
| SQL Server Agent | Keine |
| Komprimierte Sicherung | Keine |
| Datenbank-Mail | Keine |
Die 50 GB beziehen sich auf die Datendateien; das Transaktionsprotokoll wird nicht mitgerechnet. Beim Test brach die Erstellung einer 51.201 MB großen Datenbank mit folgendem Fehler ab:
Msg 1827, Level 16, State 4
CREATE DATABASE or ALTER DATABASE failed because the resulting cumulative database size would exceed your licensed limit of 51200 MB per database.
In der Praxis stellt meist der Arbeitsspeicher den Engpass dar: Wenn die häufig genutzten Daten nicht in den 1410 MB großen Cache passen, liest Express von der Festplatte und wird langsamer – unabhängig von der Größe des Servers. Daher lohnt es sich nicht, für Express einen Server mit mehr als 8 GB Arbeitsspeicher zu mieten, wenn darauf lediglich die Datenbank läuft.
Was unter Linux nicht verfügbar ist
Die SQL Server-Engine unter Linux ist identisch mit der unter Windows: T-SQL, gespeicherte Prozeduren, Trigger, Ansichten, die Volltextsuche und das Sicherungsformat stimmen überein. Die meisten .NET-, PHP-, Python- oder Node.js-Anwendungen bemerken gar nicht, dass die Datenbank unter Linux läuft. Einige, vor allem an Windows gebundene Funktionen fehlen jedoch (basierend auf der Liste von Microsoft, SQL Server 2025):
- FILESTREAM und FileTable: Speicherung von Dateien neben der Datenbank im Windows-Dateisystem.
- CLR-Assemblies mit den Berechtigungen
EXTERNAL_ACCESSoderUNSAFE:SAFE-Assemblies werden ausgeführt, .NET-Code, der auf das Dateisystem oder das Netzwerk zugreift, hingegen nicht. - Systemweite erweiterte gespeicherte Prozeduren, wie beispielsweise
xp_cmdshell. - Verknüpfte Server (Linked Server) zu Datenquellen außer SQL Server, etwa Access, Excel oder andere ODBC-Quellen. Zu SQL Server funktionieren sie.
- Merge-Replikation.
- Analysis Services und Reporting Services: Diese laufen nicht unter Linux (anstelle von Reporting Services empfiehlt Microsoft den Power BI Report Server, der ausschließlich unter Windows läuft).
- Windows-Authentifizierung mit lokalen Windows-Konten: Unter Linux ist standardmäßig nur die Anmeldung mit SQL-Server-Benutzern möglich. Eine Active-Directory-Authentifizierung kann eingerichtet werden (der Server muss in die Domäne aufgenommen werden, mit einem Kerberos-Schlüssel), dies ist jedoch mit zusätzlichem Aufwand verbunden.
- LocalDB: Die Entwicklerversion von Express ist nur für Windows verfügbar.
- SQL Server Management Studio (SSMS) auf dem Server: SSMS läuft ausschließlich unter Windows. Von einem Windows-Rechner aus können Sie damit ebenso eine Verbindung zu einem Linux-Server herstellen wie zu einem Windows-Server; unter Linux und macOS können Sie das MSSQL-Plugin für Visual Studio Code oder
sqlcmdverwenden.
Falls Ihre Anwendung keine dieser Funktionen verwendet, funktioniert SQL Server unter Linux genauso.
Vor- und Nachteile im Vergleich zu Windows Express
Argumente für Linux:
- Es gibt keine Windows Server-Lizenz. Die Express-Version ist auf beiden Systemen kostenlos, unter Windows fallen jedoch Kosten für die Betriebssystemlizenz an. Ein 4-GB-KVM-VPS (AMD VPS 4) kostet monatlich 13,06 €, der kleinste Windows-VPS (Win VPS Start, 8 GB) kostet monatlich 22,85 €.
- Geringerer Ressourcenverbrauch. Linux benötigt ohne grafische Benutzeroberfläche deutlich weniger Arbeitsspeicher und Speicherplatz als Windows Server, sodass mehr Serverressourcen für die Datenbank zur Verfügung stehen.
- Einfache Aktualisierung und Automatisierung. Die Aktualisierung des SQL Servers erfolgt über ein
dnf updateoder einen Image-Wechsel; die Einstellungen lassen sich per Skript automatisieren, und der Container kann innerhalb weniger Minuten auf einen anderen Server verschoben werden. - Gemeinsamer Server mit den Linux-Anwendungen. Wenn die Webanwendung (PHP, Python, Node.js, .NET) ebenfalls unter Linux läuft, kann sich die Datenbank auf demselben Rechner befinden und muss nicht von außen abgerufen werden.
Vorteile von Windows:
- Windows-Anwendungen und -Funktionen. Wenn das Programm Windows-Authentifizierung, FILESTREAM,
xp_cmdshell, einen verknüpften Server, der auf eine Access- oder Excel-Quelle verweist, Reporting Services oder eine eigene Komponente nutzt, die als Windows-Dienst ausgeführt wird, sollten Sie bei Windows bleiben. - Grafische Verwaltung auf dem Server. SSMS und Windows-Tools laufen direkt auf dem Server über Remote Desktop; unter Linux erfolgt die Verwaltung über die Befehlszeile oder von einem anderen Rechner aus.
- Eine vertraute Umgebung. Wenn Ihr Team Erfahrung mit der Windows-Administration hat, ist die Einführung von Linux mit einem Lernaufwand verbunden.
- Herstellersupport. SQL Server wird unter jeder Edition von Windows Server offiziell unterstützt, unter Linux nur auf den genannten Distributionen (nicht auf AlmaLinux und Rocky Linux).
Fehlerbehebung
Der Dienst lässt sich nicht starten, es erscheint die Meldung „Start request repeated too quickly“. Der Dienst mssql-server darf innerhalb von 2 Minuten höchstens dreimal gestartet werden. Wenn Sie ihn während des Ausprobierens der Einstellungen mehrmals neu gestartet haben, sperrt systemd den Startvorgang. Heben Sie die Sperre auf und starten Sie den Dienst anschließend erneut:
sudo systemctl reset-failed mssql-server
sudo systemctl start mssql-server
Warum startet der Dienst nicht? Das Dienstprotokoll finden Sie unter journalctl -u mssql-server, das eigene Protokoll des SQL-Servers unter /var/opt/mssql/log/errorlog (dieses kann nur von „root“ und dem Benutzer mssql gelesen werden). In Docker werden beide in der Ausgabe des Befehls docker logs sql1 angezeigt.
Express lässt keine dedizierte Administratorverbindung (DAC) zu. In der Express-Edition ist diese Funktion standardmäßig deaktiviert; laut Protokoll kann sie mit dem Trace-Flag 7806 aktiviert werden.
Welches Paket sollten Sie wählen?
SQL Server Express läuft unter Linux problemlos auf einem KVM-VPS mit mindestens 4 GB Arbeitsspeicher (AMD VPS 4: 2 vCPU, 4 GB). Wenn Sie alle 4 Prozessorkerne von Express nutzen möchten oder neben der Datenbank auch eine Webanwendung auf dem Server läuft, ist der AMD VPS 8 (4 vCPU, 8 GB) die bessere Wahl. Für Windows-abhängige Anwendungen eignen sich unsere Windows-VPS-Pakete, die mit einem lizenzierten Windows Server ausgeliefert werden. Wenn Sie sich nicht sicher sind, welches Paket zu Ihrer Anwendung passt, schreiben Sie uns – wir helfen Ihnen gerne bei der Entscheidung.