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.
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 |
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.
Geben Sie nun den folgenden Befehle ein, um den Pfad auf Ihr neues Laufwerk umzulegen.
USE master; |
Die Meldung müsste dann wie folgt aussehen.
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.
Gehen Sie nun in den Ordner, der die Systemdatenbanken aufbewahrt. Kopieren Sie die Datenbanken tempdb.mdf und templog.ldf in das neuerstellte Laufwerk.
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.
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_helpfileUSE 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’); GOSELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID(‚model‘); |
Verschieben der msdb
USE msdb EXEC sp_helpfileUSE 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’); GOSELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID(‚msdb‘); |
Achtung: Achten Sie auf die genau Syntaktik .
Beim Kopieren der masterdb müssen Sie eine etwas andere Vorgehensweise anwenden.
Öffnen Sie als erstes den SQL-Configurations Manager auf dem Server.
Klicken Sie nun auf die Registerkarte “Erweitert”.
Scrollen Sie in den unteren Bereich. Dort finden Sie die Rubrik “Startparameter”
Ä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.
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”
Kopieren Sie nun die Datenbanken master.mdf und masterlog.ldf von dem alten Speicherort in den neuen Speicherort.
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.
Der SQL-Server sollte nun gestartet werden und die Ansicht sollte wie folgt aussehen.
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.
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.
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.
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.
Gehen Sie nun in den Ordner, in dem die Ressourcen Datenbanken liegen. Kopieren Sie diese in den neuen Ordner.
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.
Nun haben wir alle Systemdatenbanken verschoben.