Umziehen von Systemdatenbanken

Manchmal kommt es vor, dass man im SQL Server Systemdatenbanken umziehen muss, weil der Server beispielsweise eine neue Plattenkonfiguration bekommen hat. Damit wir dies erfolgreich tun können benötigen wir zunächst die logischen Namen der Datenbankdateien. Diese können wir einerseits im Dialog Eigenschaften sehen (hier im Beispiel die tempdb)

2015-07-19_10-23-14

oder wir können die Infos auch per T-SQL abfragen:

SELECT
  name
, physical_name AS Location
FROM
  sys.master_files
WHERE
  database_id = DB_ID(N'tempdb');

In meinem Beispiel liefert das die folgende Ausgabe:

2015-07-19_10-27-34

Die logischen Namen für alle Systemdatenbanken kann man mit dem folgenden SQL-Befehl ermitteln

SELECT
name
, physical_name AS Location
FROM
sys.master_files
WHERE
database_id = DB_ID(N'tempdb') OR
database_id = DB_ID(N'master') OR
database_id = DB_ID(N'model') OR 
database_id = DB_ID(N'msdb') ;

Dies führt in meinem Beispiel zu diesem Ergebnis:

2015-07-19_10-31-03

Nachdem man die logischen Namen der Systemdatenbanken ermittelt hat kann man diese nun mit dem folgenden Script verschieben. Im Beispiel verschiebe ich die Systemdatenbanken vom Laufwerk D: auf das Laufwerk F: wobei ich die Datendateien und Log-Dateien in unterschiedliche Verzeichnisse trenne:

-- FGE: TempDB verschieben
ALTER DATABASE tempdb
MODIFY FILE
(NAME = tempdev, FILENAME = 'F:\MSSQL\DATA\Tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE
(NAME = templog, FILENAME = 'F:\MSSQL\LOG\Tempdb.ldf');
GO

-- FGE: master verschieben
ALTER DATABASE master
MODIFY FILE
(NAME = master, FILENAME = 'F:\MSSQL\DATA\master.mdf');
GO
ALTER DATABASE master
MODIFY FILE
(NAME = mastlog, FILENAME = 'F:\MSSQL\LOG\masterlog.ldf');
GO

-- FGE: model verschieben
ALTER DATABASE model
MODIFY FILE
(NAME = modeldev, FILENAME = 'F:\MSSQL\DATA\model.mdf');
GO
ALTER DATABASE model
MODIFY FILE
(NAME = modellog, FILENAME = 'F:\MSSQL\LOG\modellog.ldf');
GO

-- FGE: MSDB verschieben
ALTER DATABASE msdb
MODIFY FILE
(NAME = MSDBData, FILENAME = 'F:\MSSQL\DATA\MSDBData.mdf');
GO
ALTER DATABASE msdb
MODIFY FILE
(NAME = MSDBLog, FILENAME = 'F:\MSSQL\LOG\MSDBLog.ldf');
GO

Wurden die Befehle erfolgreich ausgeführt meldet der SQL Server

2015-07-19_10-42-03

das ist schon mal ein gutes Zeichen. Als nächstes sollte man die Datenbankdateien dorthin kopieren wo die neuen Einträge hinzeigen, ansonsten kann der SQL Server nicht mehr starten. Nur bei der tempdb ist das nicht nötig, da diese ja ohnehin bei jedem Neustart des Servers neu angelegt wird. Wichtig ist auch, dass auf den Dateien die richtige Benutzerberechtigungen liegen, sprich dass das Konto unter dem der SQL Server läuft auch auf die Dateien bzw. deren Speicherort zugreifen darf.

Was nun noch gemacht werden muss ist, den SQL Server einmal neu zu starten. Beim Neustart wird der SQL Server die Datenbankdateien dann verschieben bzw. am neuen Ort neu erstellen. Ruft man den SELECT-Befehl von oben noch einmal auf um sich anzeigen zu lassen wo die neuen Datenbankdateien liegen wird (in meinem Beispiel) folgendes zurückgeliefert.

2015-07-19_10-44-05

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

%d Bloggern gefällt das: