SQL Server 2016 → 2022/2025
Sechs Wege zum Ziel
Parallelbetrieb · Neuinstallation · In-place Upgrade · Detach/Attach · dbatools · Copy-Database – Aufwand, Risiken und Entscheidungshilfe.
📦 Die klassischen Migrationspfade
Neuen Server mit SQL 2022/2025 aufsetzen, Datenbanken per Backup/Restore synchronisieren.
Risiko: Niedrig · ⏱️ Aufwand: HochAlte Instanz deinstallieren, SQL neu installieren, Datenbanken aus Backup einspielen.
Risiko: Mittel · ⏱️ Aufwand: MittelSetup mit Upgrade-Option auf vorhandener Instanz ausführen.
Risiko: Hoch · ⏱️ Aufwand: Niedrig➕ Erweiterte Optionen für spezielle Szenarien
Datenbanken vom alten Server abtrennen, Dateien (MDF/LDF) auf neuen Server kopieren, dort wieder anfügen.
✅ Vorteile
- Sehr schnell bei großen Datenbanken (kein Backup/Restore)
- Keine Zwischenspeicherung
❌ Nachteile
- Datenbanken während Kopie offline
- Kein einfaches Rollback (Quelle offline)
PowerShell-Modul dbatools für automatisierte Migration: Export-DbaUser, Copy-DbaDatabase, Start-DbaMigration.
✅ Vorteile
- Automatisiert Logins, Jobs, Linked Server, Agent-Konfiguration
- Weniger manuelle Fehler
- Unterstützt parallele Übertragung
❌ Nachteile
- Zusätzliche Software (PowerShell-Modul)
- Lernkurve für komplexe Setups
SSMS-Assistent (kopiert Schemas, Daten, Logins, Jobs zwischen Instanzen).
✅ Vorteile
- GUI-basiert, keine Skripte nötig
- Wählt Methode (SMO oder Detach/Attach)
❌ Nachteile
- Langsam bei großen DBs
- Weniger flexibel als dbatools
- Fehleranfällig bei komplexen Objekten
🔧 Detach/Attach – Schritt für Schritt
- Datenbanken auf altem Server detached –
USE master; ALTER DATABASE [Name] SET OFFLINE; EXEC sp_detach_db 'Name'; - MDF/LDF-Dateien auf Zielserver kopieren – robuster Dateitransfer (z.B. Robocopy).
- Datenbanken auf neuem Server anfügen –
CREATE DATABASE ... FOR ATTACH; - Logins, Jobs, Linked Server manuell nachziehen (oder mit dbatools).
-- Alte Datenbank abtrennen (auf Quelle)
USE master;
ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
EXEC sp_detach_db 'AdventureWorks';
-- Auf Ziel anfügen
CREATE DATABASE AdventureWorks ON
(FILENAME = 'D:\Data\AdventureWorks.mdf'),
(FILENAME = 'E:\Log\AdventureWorks_log.ldf')
FOR ATTACH;
🛠️ dbatools – die PowerShell-Automatisierung
dbatools ist das De-facto-Standardtool für SQL-Migrationen in der Community. Es migriert nicht nur Datenbanken, sondern auch serverseitige Objekte.
# dbatools installieren (falls noch nicht)
Install-Module dbatools -Force
# Beispiel: komplette Migration inkl. Logins, Jobs, Linked Server, Credentials
Start-DbaMigration -Source sql2016 -Destination sql2025 -BackupRestore -MigrateLogins -MigrateJobs -MigrateLinkedServers -MigrateAgentAlerts
# Nur Benutzer/Logins exportieren (z.B. für Clean-Install-Szenario)
Export-DbaUser -SqlInstance sql2016 -Path C:\Migration\Logins.sql
# Datenbank inkl. aller Objekte kopieren (online, mit minimaler Downtime)
Copy-DbaDatabase -Source sql2016 -Destination sql2025 -Database AdventureWorks -BackupRestore -ReuseSourceFolderStructure
📋 Copy-Database Wizard – der GUI-Assistent
In SSMS: Tasks → Copy Database. Bietet zwei Methoden: Detach/Attach oder SMO (SQL Management Object). Gut für kleine bis mittelgroße Datenbanken (weniger als 200 GB).
-- SMO-Methode im Hintergrund: Transfer-Objekt
-- Assistent generiert intern ein SSIS-Paket, das die Daten überträgt.
⚠️ Wichtig master-Datenbank nicht einfach restoren!
Die master-Datenbank enthält versionierungsspezifische Systemtabellen, Metadaten und interne Strukturen. Eine RESTORE DATABASE master von SQL Server 2016 auf 2022/2025 führt zu Instanz-Startproblemen, Korruptionsmeldungen und nicht unterstützten Zuständen. Microsoft erlaubt kein Downgrade oder direktes Restoren von Systemdatenbanken zwischen Hauptversionen.
✅ Richtig: Alle serverseitigen Objekte (Logins, Jobs, Linked Server, Endpoints) müssen skriptbasiert oder mit Tools (dbatools) übertragen werden. Die Systemdatenbanken werden bei der Installation/Upgrade neu erzeugt.
-- Statt master zu restoren: Logins mit Skript übertragen
-- Auf Quelle: EXEC sp_help_revlogin; (gibt CREATE LOGIN-Skripte aus)
-- Auf Ziel: Skript ausführen
-- Oder mit dbatools:
Export-DbaLogin -SqlInstance sql2016 -Path C:\Migration\Logins.sql
🔗 Herausforderung: Linked Server migrieren
Linked Server sind oft der Grund für fehlgeschlagene Migrationsprojekte, da sie externe Abhängigkeiten enthalten (Provider, Authentifizierung, feste Server-Namen).
📋 Manuelle Migration
-- Skript für Linked Server generieren (auf Quelle)
SELECT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + name + ''', @srvproduct=N''' + product + ''', @provider=N''' + provider + ''', @datasrc=N''' + data_source + ''';'
FROM sys.servers WHERE is_linked = 1;
-- Logins für Linked Server sichern
SELECT 'EXEC sp_addlinkedsrvlogin @rmtsrvname = N''' + name + ''', @useself = N''False'', @locallogin = NULL, @rmtuser = N''' + remote_name + ''', @rmtpassword = '''''' FROM sys.linked_logins;
🛠️ dbatools (empfohlen)
# Linked Server exportieren und importieren
Export-DbaLinkedServer -SqlInstance sql2016 -Path C:\Migration\LinkedServers.xml
Import-DbaLinkedServer -SqlInstance sql2025 -Path C:\Migration\LinkedServers.xml
# In einer Komplettmigration:
Start-DbaMigration -Source sql2016 -Destination sql2025 -LinkedServers
📊 Alle sechs Optionen im Vergleich
| Methode | Downtime | Automatisierung | Rollback | Beste für |
|---|---|---|---|---|
| 🔄 Parallel (Side-by-Side) | Minuten | Mittel | Einfach | Produktion, große DBs, minimale Ausfallzeit |
| 🧹 Clean Install | Stunden | Manuell | Komplex | Dev/Test, Systeme mit geringen Anforderungen |
| ⬆️ In-place Upgrade | 30-90 Min | Automatisch | Snapshot nötig | 24/7 mit VM-Snapshot, kleine bis mittlere DBs |
| 📎 Detach/Attach | Variabel (Dateikopie) | Manuell | Schwierig | Sehr große DBs (TB), wenig Änderungen |
| 🛠️ dbatools | Minuten–Stunden | Voll (PowerShell) | Möglich | Wiederholbare, automatisierte Migrationen, inkl. aller Objekte |
| 📋 Copy-Database Wizard | Lang | GUI | Mittel | Kleine DBs, seltene Migrationen ohne Skripterfahrung |
⚖️ Entscheidungsmatrix – welche Methode wählen?
🏆 Produktivkritische Systeme
Parallel (Side-by-Side) oder dbatools – minimales Risiko, voller Rollback. Bei sehr großen Datenbanken zusätzlich Detach/Attach erwägen.
⚡ Zeitdruck + Snapshot vorhanden
In-place Upgrade – schnell, aber nur mit VM-Snapshot und DMA-Prüfung.
🧪 Dev/Test / kleinere Instanzen
Clean Install + dbatools – sauber, übt den Prozess für die Produktion.
📦 Single One-Off Migration ohne Wiederholung
Copy-Database Wizard – für kleine DBs (< 50 GB) mit GUI-Bedienung geeignet.