In diesem Artikel gehe ich kurz darauf ein, wie wir auf unserem Microsoft SQL Server die Log-Dateien von bestehenden Datenbanken in ein anderes Verzeichnis verschieben können.
Wichtig: Für jede Datenbank, die wir verschieben möchten, brauchen wir ein kleines Wartungsfenster, in dem wir die Datenbank offline nehmen können.
Durchführung
Im ersten Schritt müssen wir einmal überprüfen, welche Log-Dateien wir konkret haben, und in welchen Pfaden die sich aktuell befinden. Dafür können wir den folgenden SQL-Query verwenden:
SELECT name, physical_name
FROM sys.master_files
WHERE database_id = DB_ID('DATABASE_NAME') AND type_desc = 'LOG';Wir erhalten eine Tabelle mit dem logischen Namen und dem Pfad der LOG-Datei. Wenn es mehrere sind, müssen wir alle rüberkopieren, damit eine entsprechende Migration abgeschlossen werden kann.
Im nächsten Schritt ändern wir schon einmal mit dem folgenden Query die vorhandenen Pfade zu den neuen Pfaden. Dafür verwenden wir den folgenden Query, den wir noch etwas anpassen müssen. Mit dem folgenden Befehl sagen wir unserem Datenbank-Server, wo er die Log-Dateien nach einem Neustart der Datenbank findet.
ALTER DATABASE [DATABASE_NAME]
MODIFY FILE (
NAME = LOGICAL_NAME,
FILENAME = 'PATH_TO_FILE'
);Info: Diesen Query müssen wir für jede Log-Datei durchführen, die für unsere Datenbank existiert.
Im nächsten Schritt müssen wir die Datenbank einmal Offline schalten damit keine weiteren Änderungen an der Datenbank vorgenommen werden können. Sonst würden sich die Log-Dateien während des Kopiervorgangs ändern und eine Inkonsistenz verursachen.
ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [DATABASE_NAME]
SET OFFLINE;Jetzt können wir anfangen, die Dateien im Dateisystem von unserem Server an den neuen Ort zu kopieren. Ob wir hier die GUI oder ein Tool wie Robocopy verwenden, bleibt uns überlassen.
Sobald der Kopiervorgang abgeschlossen ist, fahren wir die Datenbank wieder mit dem folgenden SQL-Query wieder hoch.
ALTER DATABASE [DATABASE_NAME] SET ONLINE;
ALTER DATABASE [DATABASE_NAME] SET MULTI_USER;Wenn wir alles richtig gemacht haben, sollte die Datenbank wieder online und funktionsfähig sein. Sonst einmal bitte die Pfade überprüfen und ggf. anpassen.