SQL_Kurs

Physikalischen Namen einer SQL Server Datenbankdatei ändern

Schritt-für-Schritt-Anleitung für Umbenennung und Verschiebung von MDF-, NDF- und LDF-Dateien

📌 Warum muss man den physikalischen Dateinamen ändern?

Es gibt mehrere Gründe, den physikalischen Namen einer SQL Server-Datenbankdatei (.mdf, .ndf, .ldf) zu ändern:
  • 📀 Verschiebung auf ein anderes Laufwerk – z. B. von C:\ nach D:\Data\ für bessere Performance oder Platz.
  • 📝 Umbenennung aus Konsistenzgründen – z. B. von „Firma_alt.mdf“ zu „Firma_neu.mdf“ nach einer Umstrukturierung.
  • 💾 Wiederherstellung nach einem Desaster – wenn die Datei woanders liegt oder umbenannt werden muss.
  • 🧹 Bereinigung der Dateinamen – z. B. Entfernung von temporären Suffixen.
Der Vorgang umfasst zwei Schritte: (1) Ändern des logischen Pfads in den SQL Server-Systemtabellen, (2) Verschieben/Umbennen der Datei auf Betriebssystemebene.
💡 Wichtiger Hinweis: Der logische Name (z. B. MyDatabase_Data) ist nicht dasselbe wie der physikalische Dateiname (z. B. D:\Data\MyDatabase.mdf). Dieser Artikel behandelt die Änderung des physikalischen Pfads/Dateinamens.

🔍 Vorbereitung – Aktuelle Dateien identifizieren

Bevor Sie Änderungen vornehmen, ermitteln Sie die aktuellen Dateinamen und -pfade Ihrer Datenbank:
-- Dateiinformationen der aktuellen Datenbank anzeigen
USE [IhreDatenbank];
GO

SELECT 
  name AS LogicalName,
  physical_name AS PhysicalPath,
  type_desc AS FileType,
  size * 8 / 1024 AS SizeMB
FROM sys.database_files;
Notieren Sie:
  • Logischen Namen (für ALTER DATABASE ... MODIFY FILE)
  • Vollständigen physikalischen Pfad (inkl. Laufwerk und Dateinamen)
  • Dateityp (ROWS = Daten, LOG = Transaktionsprotokoll)
Sichern Sie außerdem die Datenbank (vollständiges Backup), bevor Sie Änderungen vornehmen.
⚠️ Achtung: Führen Sie diese Operation nur während eines Wartungsfensters durch, da die Datenbank für die Verschiebung offline genommen werden muss (außer bei bestimmten Editionen mit ALTER DATABASE ... MODIFY FILE für Dateien, die nicht die primäre sind – aber sicherheitshalber planen Sie Ausfallzeit ein).

📂 Methode 1: Datei auf ein neues Laufwerk verschieben

Hier verschieben Sie eine oder mehrere Dateien auf ein anderes Laufwerk (z. B. von C:\ nach D:\). Der Dateiname bleibt gleich, nur der Pfad ändert sich.
-- 1. Datenbank offline nehmen (erzwingt, dass alle Benutzer getrennt werden)
ALTER DATABASE [IhreDatenbank] SET OFFLINE;
GO

-- 2. Datei in SQL Server umleiten (Pfad ändern)
ALTER DATABASE [IhreDatenbank]
MODIFY FILE (
  NAME = 'IhreDatenbank_Data',
  FILENAME = 'D:\Data\IhreDatenbank.mdf'
);
GO

ALTER DATABASE [IhreDatenbank]
MODIFY FILE (
  NAME = 'IhreDatenbank_Log',
  FILENAME = 'L:\Logs\IhreDatenbank_log.ldf'
);
GO

-- 3. Manuell (im Datei-Explorer oder mit xp_cmdshell) die Dateien verschieben
-- Beispiel: Datei von C:\Program Files\... nach D:\Data\ kopieren/verschieben

-- 4. Datenbank wieder online schalten
ALTER DATABASE [IhreDatenbank] SET ONLINE;
GO
💡 Tipp: Wenn Sie xp_cmdshell aktiviert haben, können Sie Schritt 3 auch mit einem T-SQL-Befehl erledigen: EXEC xp_cmdshell 'move "C:\AlterPfad\Datei.mdf" "D:\NeuerPfad\Datei.mdf"'. Aus Sicherheitsgründen ist die manuelle Verschiebung aber oft vorzuziehen.

✏️ Methode 2: Datei umbenennen (gleicher Pfad, neuer Name)

Möchten Sie nur den Dateinamen ändern, z. B. von „AlteFirma.mdf“ zu „NeueFirma.mdf“.
-- 1. Datenbank offline nehmen
ALTER DATABASE [IhreDatenbank] SET OFFLINE;
GO

-- 2. Neuen Dateipfad (mit neuem Namen) in SQL Server eintragen
ALTER DATABASE [IhreDatenbank]
MODIFY FILE (
  NAME = 'IhreDatenbank_Data',
  FILENAME = 'C:\Data\NeueFirma.mdf'
);
GO

-- 3. Datei auf Betriebssystemebene umbenennen
-- (z. B. im Explorer von AlteFirma.mdf in NeueFirma.mdf)

-- 4. Datenbank wieder online schalten
ALTER DATABASE [IhreDatenbank] SET ONLINE;
GO
📌 Hinweis: Der Befehl MODIFY FILE ändert nur die Metadaten in sys.sysaltfiles bzw. sys.database_files. Die eigentliche Datei auf der Festplatte muss manuell verschoben oder umbenannt werden. SQL Server prüft beim Online-Schalten, ob die Datei am neuen Pfad existiert.

🔄 Methode 3: Kombination – Verschieben und Umbenennen

Sie können sowohl den Pfad als auch den Dateinamen in einem Schritt ändern.
-- 1. Datenbank offline
ALTER DATABASE [IhreDatenbank] SET OFFLINE;
GO

-- 2. Neuen vollständigen Pfad in SQL Server eintragen
ALTER DATABASE [IhreDatenbank]
MODIFY FILE (
  NAME = 'IhreDatenbank_Data',
  FILENAME = 'E:\Datenbanken\NeuerName.mdf'
);
GO

-- 3. Datei manuell verschieben und gleichzeitig umbenennen
-- (z. B. mit Windows-Explorer oder PowerShell)

-- 4. Online schalten
ALTER DATABASE [IhreDatenbank] SET ONLINE;
GO
💡 PowerShell-Skript zum Verschieben (als Administrator): Move-Item -Path "C:\old\file.mdf" -Destination "E:\NewFolder\newname.mdf"

⚙️ Sonderfall: Systemdatenbanken verschieben

Für master, model, msdb und tempdb funktioniert ALTER DATABASE ... MODIFY FILE nicht im laufenden Betrieb. Stattdessen müssen Sie die SQL Server-Instanz mit Startup-Parametern neu konfigurieren.
Beispiel für die master-Datenbank:
  • SQL Server Configuration Manager öffnen.
  • SQL Server-Dienst auswählen → Eigenschaften → Startup Parameters.
  • Parameter -d (master-Datenpfad) und -l (master-Logpfad) ändern.
  • SQL Server neu starten.
📌 Wichtig: Bei Systemdatenbanken ist äußerste Vorsicht geboten – eine fehlerhafte Konfiguration kann den SQL Server unbrauchbar machen. Erstellen Sie immer eine vollständige Sicherung und testen Sie in einer nicht‑produktiven Umgebung.

⚠️ Fehlerbehandlung – Was tun, wenn etwas schiefgeht?

Häufige Fehler und Lösungen:
  • Fehler: "File cannot be moved because it is in use" → Die Datenbank ist noch online. Stellen Sie sicher, dass Sie ALTER DATABASE SET OFFLINE ausgeführt haben.
  • Fehler: "Operating system error 2 (The system cannot find the file specified)" → SQL Server findet die Datei am neuen Pfad nicht. Kontrollieren Sie, ob Sie die Datei tatsächlich verschoben/umbenannt haben und die Berechtigungen stimmen.
  • Fehler: "Access denied" → Das SQL Server-Dienstkonto benötigt Lese-/Schreibrechte auf dem neuen Verzeichnis. Weisen Sie diese explizit zu.
  • Datenbank lässt sich nicht online schalten → Prüfen Sie mit SELECT state_desc FROM sys.databases WHERE name = 'IhreDatenbank' den Status. Lesen Sie den Fehler im SQL Server-Protokoll (Windows-Ereignisanzeige).
-- Status einer Datenbank prüfen
SELECT name, state_desc 
FROM sys.databases 
WHERE name = 'IhreDatenbank';

-- Fehler aus dem aktuellen Fehlerprotokoll anzeigen
EXEC xp_readerrorlog;
🚨 Notfallwiederherstellung: Falls Sie die Datenbank nach einem fehlgeschlagenen Versuch nicht mehr online bekommen, können Sie die Dateipfade in einer Wiederherstellungskonsole reparieren: ALTER DATABASE IhreDatenbank SET EMERGENCY;, dann die Pfade korrigieren, dann SET ONLINE.

🛡️ Sicherheitsmaßnahmen und Best Practices

  • Vorher ein volles Backup der Datenbank erstellen – inklusive Transaktionslog, falls im FULL-Modus.
  • Wartungsfenster einplanen – die Datenbank ist während der Operation offline.
  • Berechtigungen für das SQL Server-Dienstkonto prüfen – auf dem neuen Pfad benötigt das Konto Vollzugriff.
  • Datenbank nach der Verschiebung auf Konsistenz prüfenDBCC CHECKDB ausführen.
  • Dateipfade dokumentieren – aktualisieren Sie Ihre Datenbankdokumentation und Backup-Skripte.
  • Verschlüsselte Datenbanken (TDE) – hier ist kein zusätzlicher Schritt nötig, aber testen Sie die Wiederherstellung.
  • Benachrichtigen Sie Ihre Anwendungsteams – Connection Strings oder Pfade in Konfigurationsdateien müssen möglicherweise angepasst werden (falls direkt auf Dateien zugegriffen wird – selten).

🤖 Automatisierung mit PowerShell (SQL Server Modul)

Mit dem SqlServer PowerShell-Modul können Sie den Vorgang für mehrere Datenbanken automatisieren.
# Beispiel: Verschieben der Datenbank "MyDB" nach D:\Data\
Import-Module SqlServer

$server = "localhost"
$dbName = "MyDB"
$newDataPath = "D:\Data\MyDB.mdf"
$newLogPath = "D:\Data\MyDB_log.ldf"

# Datenbank offline setzen
Invoke-Sqlcmd -ServerInstance $server -Query "ALTER DATABASE [$dbName] SET OFFLINE"

# Metadaten ändern
Invoke-Sqlcmd -ServerInstance $server -Query "
ALTER DATABASE [$dbName] MODIFY FILE (NAME = N'MyDB_Data', FILENAME = N'$newDataPath');
ALTER DATABASE [$dbName] MODIFY FILE (NAME = N'MyDB_Log', FILENAME = N'$newLogPath');
"

# Dateien manuell verschieben (hier mit Copy + Remove)
Copy-Item "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDB.mdf" -Destination $newDataPath
Copy-Item "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf" -Destination $newLogPath
Remove-Item "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDB.mdf"
Remove-Item "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDB_log.ldf"

# Datenbank online schalten
Invoke-Sqlcmd -ServerInstance $server -Query "ALTER DATABASE [$dbName] SET ONLINE"
💡 Tipp: Das Skript lässt sich leicht erweitern, um alle Benutzerdatenbanken einer Instanz zu verschieben. Verwenden Sie Get-SqlDatabase, um eine Liste aller Datenbanken zu erhalten.

✅ Zusammenfassung der Schritte

  1. Backup erstellen
  2. Aktuelle Dateipfade notieren (sys.database_files)
  3. Datenbank offline setzen (ALTER DATABASE ... SET OFFLINE)
  4. Neue Pfade in SQL Server eintragen (ALTER DATABASE ... MODIFY FILE)
  5. Dateien auf Betriebssystemebene verschieben/umbenennen (Explorer, PowerShell, xp_cmdshell)
  6. Datenbank online setzen (ALTER DATABASE ... SET ONLINE)
  7. Erfolg prüfenSELECT physical_name FROM sys.database_files, DBCC CHECKDB
🚀 Letzter Tipp: Testen Sie den gesamten Prozess zuerst auf einer Testdatenbank oder einer Entwicklungsumgebung. Ein Fehler kann die Verfügbarkeit der Datenbank beeinträchtigen – mit einem aktuellen Backup sind Sie jedoch auf der sicheren Seite.
Nächster SQL Server – QUOTED_IDENTIFIER & ANSI_NULLS
Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Advertisement
If you accept, the ads on the page will be adapted to your preferences.
Google Ad
Save