Verschieben von SQL Server Logdateien
Ich weise ja immer mal wieder darauf hin, dass bei SQL Server Datenbank und Logdateien auf unterschiedliche Platten gehören. Nur wie macht man das?
Das Ganze hat 2 Teile. Ich gehe hier mal von SQL Server 2005 aus. Bevor Sie Änderungen vornehmen prüfen Sie, dasss das Zielverzeichnis vorhanden ist und dass das SQL Server Dienstkonto darauf volle Rechte hat! Dafür gibt man der Gruppe SQLServer2005MSSQLUser$ComputerName$MSSQLSERVER (bzw. bei einer benannten Instanz SQLServer2005MSSQLUser$ComputerName$Instanzname) volle Rechte auf das Verzeichnis.
Wie bei allen wichtigen Änderungen gilt: Machen Sie vorher ein Backup.
Zum einen muss man den Standardpfad für Logdateien (für neue Datenbanken) ändern. Das geht im SQL Server Management Studio unter "Server Properties"->"Database Settings"
Zum anderen muss man die Logs der vorhandenen Datenbanken verschieben. Wie das geht steht in der Dokumentation unter "Verschieben von Datenbankdateien" (bzw. englisch "Moving Database Files")
Online hier: https://msdn2.microsoft.com/de-de/library/ms189133.aspx
Da steht das fein säuberlich getrennt nach System- und Benutzerdatenbanken
Hier mal ein Beispiel für eine Benutzerdatenbank namens TestDB.
Zuerst braucht man den logischen Dateinamen des Logs. Den bekommt man im Management Studio aus den Datenbankeigenschaften unter "Files" (bzw. "Dateien") oder aus dieser SQL-Abfrage:
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'TestDB') AND type_desc='LOG';
Dann wird die Datenbank Offline gesetzt:
ALTER DATABASE TestDB SET OFFLINE
Jetzt wird die Datei verschoben. Dazu einfach die vorhandene Logdatei vom alten an den neuen Ort verschieben
Dann muss SQL Server der neue Pfad mitgeteilt werden:
ALTER DATABASE TestDB MODIFY FILE (NAME=TestDB_log, FILENAME = 'h:\SQLLogs\TestDB_log.LDF' )
Schließlich kann die Datenbank wieder online genommen werden:
ALTER DATABASE TestDB SET ONLINE
Gibt es dabei einen Fehler 5, so stimmen die Berechtigungen auf die Datei nicht. Dann einfach die Datei noch mal Offline nehmen, Berechtigungen korrigieren und dann noch mal versuchen, die Datenbank online zu nehmen.
Schließlich sollte man noch prüfen, ob alles geklappt hat
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'TestDB');
Außerdem sollte man sich mit der Datenbank verbinden und schauen, ob man lesen und schreiben kann
Gruß,
Steffen