Es kann durchaus mal vorkommen, dass die Pfade bzw. der Speicherort von Exchange Datenbaken und Logfiles geändert werden müssen, dies kann zum Beispiel beim Wechsel des Speichersystems vorkommen. Auf Frage eines Lesers, wie man dies mit möglichst wenig Downtime hinbekommt, folgt nun dieser Artikel.
Für das Verschieben der Datenbank- und Logfilepfade gibt es mehrere Optionen, die Möglichkeiten sind im folgenden beschrieben.
Die Umgebung
Für diesen Artikel muss wieder meine kleine Exchange Testumgebung herhalten. Die Testumgebung eignet sich hervorragend, da hier die Datenbank und Logfile Pfade denkbar schlecht konfiguriert sind. Datenbank und Logfiles liegen hier auf dem Laufwerk C. Daher kann ich dieses Artikel auf verwenden zum die Umgebung gerade zu ziehen.
Es gibt zwei Exchange Server, beide sind Mitglied einer DAG, beide Server hosten jeweils eine aktive Datenbank und eine passive Datenbank. Hier einmal eine Übersicht:
Hier noch eine Übersicht der Datenbanken:
Die Pfade der Datenbank für EDB-Datei und Logfiles liegen also jeweils unter “C:\Program Files\Microsoft\Exchange Server\V15\Mailbox”.
Beide Exchange Server haben nun noch einen weitern Datenträger für die zukünftigen Pfade der Datenbank und Logfiles bekommen. Ziel ist es, dass Datenbank und Logfiles auf Datenträger 1 gespeichert werden:
Die Server laufen hier zwar mit Exchange Server 2019 auf Windows Server 2019, die im folgenden beschriebenen Möglichkeiten funktionieren aber auch ab Exchange Server 2010 und entsprechend früheren Betriebssystemen.
Möglichkeit 1: Neue Datenbank
Anstatt die Pfade einer Datenbank zu ändern, lässt sich auch einfach eine neue Datenbank anlegen und die Postfächer in die neue Datenbank migrieren. Diese Vorgehensweise ist zwar deutlich zeitaufwändiger als die Pfade zu verändern, aber immerhin ist keine Downtime nötig.
Die Vorgehensweise:
- Neue Datenbank und Datenbankkopien erstellen
- Postfächer in die neue Datenbank verschieben
- Alte Datenbank löschen, wenn alle Postfächer verschoben wurden
Ich denke ich brauche die Vorgehensweise hier nicht im Detail zu beschreiben. Wenn dies gewünscht wird, kann es es gerne noch nachreichen.
Hinweis: Exchange Server 2016/2019 in der Standard Edition kann maximal 4 aktive Datenbanken hosten. Wenn neue Datenbanken angelegt werden, muss man hier also das Limit im Kopf haben.
Möglichkeit 2: Pfade verschieben
Die zweite Möglichkeit ist, die Pfade der Datenbank zu ändern. Via Exchange Management Shell ist dies sehr einfach möglich. In diesem Fall wird die Datenbank allerdings offline geschaltet. Während die Datenbank verschoben wird, kann sich Outlook also nicht mit dem Postfach verbinden.
Zu bedenken ist, dass es sich hier technisch um einen Kopiervorgang handelt. Es muss also entsprechend viel Speicherplatz zur Verfügung stehen (Wichtig wenn die Datenbank auf dem gleichen Datenträger in einen anderen Ordner verschoben wird).
Das verändern der Pfade kann je nach Größe der Datenbank und Geschwindigkeit des Speichers durchaus etwas länger dauern. Daher sollte hier ausreichend Zeit und Downtime eingeplant werden.
Die Vorgehensweise:
- Vollsicherung der Datenbank durchführen
- Passive Datenbankkopien entfernen
- Datenbank verschieben
- Datenbankkopie wieder hinzufügen
Unmount der Datenbank, verschieben der Daten und mounten der Datenbank übernimmt Exchange, das Entfernen der Kopie, sowie das Hinzufügen der Datenbankkopie ist aber ein manueller Task.
Die Vollsicherung der Datenbank dient hier übrigens weniger der Sicherheit, sondern eher der Geschwindigkeitsoptimierung. Nach der Vollsicherung werden die Transaktionsprotokolle der Datenbank gelöscht, somit sind nach der Vollsicherung nur wenige Logfiles vorhanden. Beim Verschieben der Datenbank müssen also nicht mehr viele kleine Dateien verschoben werden, sondern im wesentlichen nur noch die eine große EDB Datei.
Die Vorgehensweise im Detail:
Zunächst müssen die neuen Datenträger auf beiden Exchange Servern partitioniert und formatiert werden (der Laufwerksbuchstabe oder Mountpoint muss auf allen Exchange Servern gleich sein). Ich habe für diese Umgebung den Datenträger mit NTFS formatiert (ReFS ist ebenfalls möglich) und als Laufwerk E: eingebunden:
Auf beiden Servern wurde auf dem Laufwerk E: jeweils ein Ordner mit den Namen “DB1” erstellt. Dies ist der neue Zielpfad der Datenbank.
Jetzt müssen alle passiven Kopien der Datenbank entfernt werden:
Hinweis: Passive Datenbank und Logfiles werden hier nur aus der Konfiguration entfernt. Die Dateien bleiben auf dem Filesystem liegen und müssen manuell gelöscht werden.
Die Datenbank DB1 hat nun keine Kopien mehr:
Jetzt kann die Datenbank auf das neue Volume E: verschoben werden. Während die Datenbank verschoben wird, ist die Datenbank offline. Verbindungen von Clients zur Datenbank sind also nicht möglich. Je Nach Größe der Datenbank, der Geschwindigkeit des Speichers und der Anzahl der Logfiles muss hier eine längere Downtime eingeplant werden.
Das Verschieben der Datenbank kann mit folgendem Befehl durchgeführt werden:
Move-DatabasePath DB1 -EdbFilePath E:\DB1\DB1.edb -LogFolderPath e:\DB1
Nachdem die Datenbank verschoben wurde, wird die Datenbank auch direkt wieder eingebunden. Jetzt kann die Kopie wieder hinzugefügt werden:
Die Datenbank wird nun von aktiven Server zum passiven Server übertragen, dies kann ebenfalls wieder eine gewisse Zeit in Anspruch nehmen.
Möglichkeit 3: Mountpoints
Für die letzte Methode ist zwar etwas mehr manueller Aufwand erforderlich, dafür lassen sich die Pfade einer Datenbank aber ändern, ohne diese offline schalten zu müssen. Nur für die Kosmetik kann die Datenbank einmal kurz offline geschaltet, da aber kein kopieren von Daten mehr erforderlich ist, ist die Datenbank schnell wieder online.
Für diese Methode kann man sich Mountpoints zu Nutze machen. Die grobe Vorgehensweise:
- Eine Kopie der Datenbank wird entfernt
- Der neue Datenträger wird anstatt mit einem Laufwerksbuchstaben in den alten Pfad der Datenbank gemountet
- Die Kopie wird wieder hinzugefügt
- Wiederholen für alle Datenbank Kopien
Schönheitsfehler korrigieren
Für Möglichkeit 3 wird zunächst die aktive Datenbank auf die passive Kopie geschwenkt (Schwitch-Over):
Die passive Kopie der Datenbank wird nun entfernt. In diesem Fall wird also die Kopie auf Server EX1 entfernt:
Nun wird auf Server EX1 in den Ordner der Datenbank gewechselt, hier liegen noch die Daten der Kopie die soeben entfernt wurde:
Der komplette Inhalt des Ordners muss nun gelöscht werden, sodass der Ordner komplett leer ist:
Der Pfad aus der Adresszeile kann nun kopiert werden. Jetzt wird auf dem leeren Datenträger 1 ein neues Volume angelegt:
Die Partition bekommt nun keinen Laufwerksbuchstaben, sondern wird in den leeren Ordner gemountet (wo bis eben noch die Datenbank lag, der aber geleert wurde):
Nachdem die Partition formatiert wurde, stellt es sich nun wie folgt im Explorer dar:
Wichtig ist, dass der Pfad und der Name des Ordners nicht verändert werden.
Jetzt kann für die Datenbank DB1 wieder eine Kopie hinzugefügt werden:
Die Kopie wird nun wieder auf dem Server EX1 gespeichert (Die Kopie die eingangs entfernt wurde):
Nach erfolgreicher Replikation (unbedingt die vollständige Replikation abwarten), sind beide Kopien wieder fehlerfrei:
Auch im Explorer sind Daten wieder sichtbar (nun liegen die Daten aber auf Datenträger 1):
Der Pfad “C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 1960189437” zeigt jetzt also nicht mehr auf Datenträger 0 (Laufwerk C) sondern auf Datenträger 1, welcher nur unter diesem Pfad gemountet wurde.
Damit nun beide Server den Datenträger 1 verwenden, wird die Datenbank DB1 nun wieder auf Server EX1 aktiviert (Wieder Switch-Over, bzw. Switch-Back):
Dann wird die Kopie auf Server EX2 entfernt:
Nun wird der Ordner auf EX2 geleert und der Pfad in die Zwischenablage kopiert:
Datenträger 1 wird wieder in den lokalen Ordner gemountet:
Zum Schluss wird auch hier wieder die Kopie auf Server EX2 hinzugefügt, nach Replikation der Datenbank werden beide Kopien wieder als Fehlerfrei angezeigt:
Die hier gezeigt Methode funktioniert nahezu ohne Downtime, denn es finden nur zwei Switch-Over der Datenbank statt. Hier verliert Outlook je nach Umgebung also maximal kurz die Verbindung (Online Modus), stellt diese aber wieder her.
Ganz elegant und sauber ist dieser Weg zwar nicht, aber man kann ja noch in einer ruhigen Minute und mit minimaler Downtime nacharbeiten und den Schönheitsfehler korrigieren, hier gibt es dann wieder zwei Möglichkeiten. Beide Wege benötigen nur wenige Minuten Downtime.
Möglichkeit 3.1: Mountpoint verschieben
Um den Mountpoint von Datenträger 1 (C:\Program Files\Microsoft…) in einen etwas einfacheren Pfad zu verlagern, kann beispielsweise eine neue Ordnerstruktur angelegt werden, für die DB1 habe ich hier den Pfad “C:\Mountpoints\DB1” vorgesehen und diese Ordner entsprechend auf beiden Exchange Servern angelegt:
Diese Ordnerstruktur muss auf beiden Exchange Servern angelegt werden. Sobald die Ordnerstruktur existiert, kann die Datenbank DB1 offline geschaltet werden (dies sollte natürlich innerhalb eines Wartungsfensters passieren):
Nun kann der Pfad für Datenträger 1 geändert werden:
Datenträger 1 wird jetzt in den Ordner “C:\Mountpoints\DB1\” gemountet:
Die Daten stehen nun im neuen Ordner zur Verfügung, es muss also nichts mehr verschoben werden, sondern nur noch die Konfiguration der Datenbank angepasst werden. Dies kann mit folgenden Befehl erfolgen:
Move-DatabasePath DB1 -EdbFilePath "C:\Mountpoints\DB1\Mailbox Database 1960189437.edb" -LogFolderPath "C:\Mountpoints\DB1" -ConfigurationOnly
Sobald der Konfiguration der Datenbank angepasst wurde, kann die Datenbank wieder gemountet werden:
Der Pfad der Datenbank zeigt nun auf “C:\Mountpoints\DB1\”:
Der Vorgang dauert nur wenige Minuten, da keine Daten mehr verschoben/kopiert werden.
Möglichkeit 3.2: Mountpoint in Laufwerksbuchstaben ändern
Wer Mountpoints nicht mag, kann auch auf einen normalen Laufwerksbuchstaben wechseln. Die Vorgehensweise ist recht ähnlich, zunächst wird die Datenbank offline geschaltet:
Danach wird der Mountpoint entfernt und ein Laufwerksbuchstabe zugewiesen, in diesem Fall ist es E:\:
Um es ganz ordentlich zu machen, wird jetzt unter E:\ ein neuer Ordner DB1 auf beiden Exchange Servern angelegt (dies ist nötig, da die Logs nicht im Root E:\ liegen dürfen):
Die Daten aus E:\ werden und alle in den Unterordner DB1 verschoben. Somit liegen alle Daten die vorher direkt unter E:\ lagen nun im Ordner E:\DB1. Das Verschieben ist normalerweise binnen weniger Sekunden erledigt, da sich die Daten ja bereits auf Datenträger 1 befinden:
Jetzt kann die Konfiguration der Datenbank wieder angepasst werden, diesmal auf den neuen Laufwerksbuchstaben und Ordner:
Move-DatabasePath DB1 -EdbFilePath "E:\DB1\Mailbox Database 1960189437.edb" -LogFolderPath "E:\DB1" -ConfigurationOnly
Datenbank mounten und fertig:
Wäre ich hier ganz ordentlich gewesen, hätte ich auch noch das EDB File zu DB1.edb umbenannt und erst dann den Pfad/Konfiguration geändert.
Fazit
Man muss nicht lange auf das Verschieben der Datenbank per Shell warten (Möglichkeit 2) oder erst eine neue Datenbank anlegen und die Postfächer verschieben (Möglichkeit 1). Es gibt durchaus einen kleinen Trick (Möglichkeit 3).
Noch ein kleiner Hinweis: Möglichkeit 3 lässt immer nur eine Datenbank pro Datenträger zu, wenn nun auch Datenbank DB2 umgezogen werden soll, muss hierfür ein neuer Datenträger bereit gestellt werden. Datenträger 1 lässt sich hier nicht mehr verwenden. Es sei denn, ihr wollt beide Datenbanken zeitgleich umziehen, dann wäre dies schon möglich…
Die Anleitung funktioniert auch, wenn man kein DAG hat – hier fallen (denke ich) nur die Schritte zu den passiven Datenbanken raus. Ich bin nach Möglichkeit 2 vorgegangen und konnte das Skript in der Exchange Management Shell wunderbar durchführen. Hat alles von selbst verschoben, Datenbank und Logs – liegen nun auf separaten, via iSCSI angebundenen ReFS-formatierten Targets. Dankeschön für diese Hilfestellung!
Sehr schön und ausführlich beschrieben, danke dafür :)
Vielen Dank!