Verschieben von SQL Systemdatenbanken

Ich habe bei Kunden immer wieder die Situation, dass Systemdatenbanken verschoben werden müssen. In meinem Bespiel möchte ich Ihnen nun eine Anleitung bereitstellen, wie Sie die SQL-Systemdatenbanken vershieben können. Grundlage für diesen Beitrag ist ein SQL 2005 Cluster unter Windows Server 2003 R2. Die Umgebung ist in diesem Beitrag beschrieben. Die Verschiebung der Systemdatenbanken kann zum Beispiel notwendig sein, wenn Sie Platzprobleme auf Ihrem Storage haben oder ein Storage eventuell erneuert werden soll. Folgende Systemdatenbanken müssen in einer Instanz verschoben werden:

Achtung: Da ich in meinem Lab nur eine Standardinstanz betreibe, betrifft diese Beschreibung nur auf die Standardinstanz zu. Sollten Sie weitere Instanzen in ihrer Umgebung betreiben, müssen Sie die jeweiligen beschriebenen Schritte pro Instanz durchführen.

image

Die rot gerahmten Datenbanken besitzen bei der Verschiebung auf ein anderes Laufwerk eine andere Vorgehensweise, wie die grün gerahmten Datenbanken.

Verschieben der TempDB Datenbank

Als erstes werden wir die tempdb verschieben. Melden Sie sich hierzu an Ihrem SQL Server an.  Sollte Ihr SQL Server in einem Cluster laufen, so melden Sie sich an dem aktiven Knoten an. Öffnen Sie das Microsoft SQL Server Management Studio (SSMS) und öffnen Sie eine “Abfrage”. Kontrollieren Sie als erstes, welcher Pfad die aktuellen tempdb’s besitzen. Geben Sie hierzu den folgenden Befehl ein:

USE TempDB
EXEC sp_helpfile
Danach wird Ihnen wie in der Grafik dargestellt, der aktuelle Pfad angezeigt in dem sich die Datenbanken tempdb.mdf und templog.ldf befinden.
 

Tipp: Merken Sie sich den Pfad. Notieren Sie sich diesen auf einem Stück Papier oder öffnen Sie Notepad und kopieren Sie diesen dort hinein.

SNAGHTMLad932ac

Geben Sie nun den folgenden Befehle ein, um den Pfad auf Ihr neues Laufwerk umzulegen.

USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME= tempdev, FILENAME = ‘Laufwerk\Pfad\tempdb-mdf’);
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME= templog, FILENAME = ‘Laufwerk\Pfad\templog.ldf’);
GO

Die Meldung müsste dann wie folgt aussehen.

SNAGHTMLc8065c5

Beenden Sie nun den SQL Server in dem Sie im oberen Knotenpunkt die rechte Maustaste betätigen und im Kontextmenü den Eintrag “Beenden” wählen. Warten Sie bis der Server beendet ist.

image

Gehen Sie nun in den Ordner, der die Systemdatenbanken aufbewahrt. Kopieren Sie die Datenbanken tempdb.mdf und templog.ldf in das neuerstellte Laufwerk.

image

Starten Sie danach wieder den SQL Server. Gehen Sie hierzu wieder mit der rechten Maustaste auf den obersten Kontenpunkt und wählen Sie im Kontextmenü den Eintrag “Starten” aus. Geben Sie nun den folgenden SQL-Befehl ein und kontrollieren Sie, ob der neue Pfad zur tempdb stimmt:

SELECT name, physical_name FROM sys.master_files
WHERE database_id = DB_ID(‚TempDB‘);

Danach sollte Ihnen der neue Pfad der Temdb’s angezeigt werden.

SNAGHTMLc8a5afc

Führen Sie nun die Schritte für die Datenbanken “model” und “msdb” aus. Achten Sie darauf, dass Sie die Skripte auf die jeweilige Datenbank anpassen. Anbei die Skript Beispiele:

Verschieben der model-db

USE model
EXEC sp_helpfile
USE master;
GO
ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = ‚Laufwerk:\Pfad\model.mdf‘);
GO
ALTER DATABASE
model
MODIFY FILE (NAME = modellog, FILENAME = ‚Laufwerk:\Pfad\modellog.ldf’);
GO
SELECT name, physical_name FROM sys.master_files
WHERE database_id = DB_ID(‚model‘);

Verschieben der msdb

USE msdb
EXEC sp_helpfile
USE master;
GO
ALTER DATABASE
msdb
MODIFY FILE (NAME = MSDBData, FILENAME = ‚Laufwerk:\Pfad\msdbdata.mdf’);
GO
ALTER DATABASE
msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = ‚Laufwerk:\Pfad\msdblog.ldf’);
GO
SELECT name, physical_name FROM sys.master_files
WHERE database_id = DB_ID(‚msdb‘);

Achtung: Achten Sie auf die genau Syntaktik Smiley. 

Beim Kopieren der masterdb müssen Sie eine etwas andere Vorgehensweise anwenden.

Öffnen Sie als erstes den SQL-Configurations Manager auf dem Server.

SNAGHTMLcc1d57a

Klicken Sie nun auf die Registerkarte “Erweitert”.

image

Scrollen Sie in den unteren Bereich. Dort finden Sie die Rubrik “Startparameter”

image

Ändern Sie hier die Startparameter so, dass diese auf ihren zukünftigen Speicherort der masterdb zeigen. Wenn also der alte Speicherort O:\SYSDB wäre und Sie die masterdb in das Laufwerk M:\SYSDB verschieben wollen, müssten Sie die Startparameter wie folgt ändern:

– alte Startparameter:

-dO:\SYSDB\master.mdf;-eS:\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lO:\SYSDB\mastlog.ldf

– neue Startparameter:

-dM:\SYSDB\master.mdf;-eS:\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lM:\SYSDB\mastlog.ldf

Klicken Sie anschließend auf übernehmen und dann auf “OK”. Überprüfen Sie noch einmal, ob die Änderungen übernommen wurden.

image

Beenden Sie nun die SQL Dienst. Klicken Sie hierzu mit der rechten Maustaste auf die SQL-Instanz im SQL Configuration Manager. Wähle im Kontextmenü die Option “Beenden”

SNAGHTMLcc599e1

Kopieren Sie nun die Datenbanken master.mdf und masterlog.ldf von dem alten Speicherort in den neuen Speicherort.

SNAGHTMLcc6e330

Starten Sie nun den SQL Dienst erneut indem Sie wieder mit der rechten Maustaste auf die SQL Instanz klicken und nun im Kontextmenü den Eintrag “Start” auswählen.

SNAGHTMLcc7d98f

Der SQL-Server sollte nun gestartet werden und die Ansicht sollte wie folgt aussehen.

image

Kopieren der Ressources-DB

Ebenfalls müssen wir beim Verschieben der RessourcenDB eine andere Vorgehensweise anwenden. Beenden Sie als erstes den SQL-Server wie oben beschrieben. Öffnen Sie nun auf dem SQL-Server die Eingabeaufforderung. Starten Sie den SQL Server im abgesicherten Modus mit den Parametern 3608. Geben Sie hierzu den Befehl NET START MSSQLSERVER /f /T3608  ein.

SNAGHTMLccbf01b

Achtung: Sollten es sich um eine benannte Instanz handeln, benutzen Sie bitte den Befehl NET START MSSQL$instancename /f /T3608

Melden Sie sich nun mit dem SQL-Nativ Client am SQL Server an. Geben Sie hierzu den Befehl sqlcmd –S (SQL-SERVER-NAME) ein.

SNAGHTMLccb9ff9

Geben Sie nun in der ersten Zeile den Befehl “ALTER DATABASE mssqlsystemresource” ein und klicken Sie auf ENTER. Geben Sie in der zweiten Zeile den Befehl “MODIFY FILE (name=data, FILENAME=`’Laufwerk\Pfad\mssqlsystemressource.mdf’)”ein und klicken Sie auf “ENTER”. Führen Sie nun in der dritten Zeile den Befehl “Go” ein und schließen Sie damit die Eingabe ab. Die Anzeige müsste nun wie folgt aussehen.

image

Führen Sie nun wieder in der ersten Zeile den Befehl “ALTER DATABASE mssqlsystemresource” ein und klicken Sie auf ENTER. Geben Sie in der zweiten Zeile den Befehl “MODIFY FILE (name=data, FILENAME= `’Laufwerk\Pfad\mssqlsystemressource.mdf’) ” ein und klicken Sie anschließend wieder auf die ENTER Taste. Führen Sie den Befehl aus, indem Sie “GO” eingeben und danach die ENTER Taste drücken. Ihre Eingabe müsste nun wieder wie folgt aussehen.

image

Gehen Sie nun in den Ordner, in dem die Ressourcen Datenbanken liegen. Kopieren Sie diese in den neuen Ordner.

image

Versetzen Sie nun die Datenbanken in den Read-Only modus. Geben Sie Hierzu den Befehl “ALTER DATABASE mssqlsystemresource SET READ_ONLY;” ein.

Geben Sie nun EXIT ein und klicken Sie anschließend auf “Enter”. Somit melden Sie sich am SQL-Nativ Client ab. Fahren Sie nun den SQL Server wieder herunter. Geben Sie hierzu den Befehl “NET STOP MSSQLSERVER” ein und klicken Sie anschließend die ENTER Taste. Starten Sie den SQL Server erneut. Damit haben Sie die Ressourcen Datenbanken verschoben.

Kopieren der distmdl.ldf

Die distmdl.ldf Datenbanken können Sie relativ einfach kopieren. Gehen Sie noch einmal in das alte Verzeichnis, wählen Sie die letzten Datenbanken aus und kopieren Sie diese einfach in das neue Verezeichnis. Wichtig hierbei ist nur, dass es sich um das selbe Verzeichnis handelt, indem auch die masterdb liegt.

image

Nun haben wir alle Systemdatenbanken verschoben.