Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verschieben Sie Systemdatenbanken im SQL Server-Failovercluster

Kürzlich wurde ich einem Projekt zugewiesen – unser Kunde kaufte ein neues SAN und wollte, dass wir das alte durch ein neues SAN ersetzen. Benutzer- und Systemdatenbanken nutzten SAN, während das Betriebssystem und SQL auf den lokalen Festplatten des Servers installiert wurden. Wir glücklichen..!! Die Idee war, die vorhandenen Benutzer- und Systemdatenbanken in ein neues SAN zu verschieben und die Ausfallzeit so gering wie möglich zu halten. Um die Ausfallzeit zu minimieren, haben wir uns also für die folgende Vorgehensweise entschieden, anstatt das Betriebssystem und SQL neu zu installieren.

  1. Hängen Sie ein neues SAN an einen vorhandenen Server an, erstellen Sie darauf neue Laufwerke und fügen Sie diese Laufwerke einer vorhandenen Failover-Cluster-Instanz hinzu.
  2. Stoppen Sie SQL Server, kopieren Sie die Datenbanken master, model und msdb auf neue Laufwerke und starten Sie die SQL-Dienste.
  3. Benutzerdatenbanken auf neue Laufwerke verschieben und das alte SAN entfernen.

In meinem vorherigen Artikel habe ich den schrittweisen Prozess zum Hinzufügen von neuem Speicher zu einem vorhandenen Failover-Cluster erklärt. Außerdem habe ich den Vorgang zum Verschieben von Benutzerdatenbanken auf neue Laufwerke demonstriert.

In diesem Artikel werde ich den Vorgang des Verschiebens der Systemdatenbanken auf neue Laufwerke demonstrieren, die ich in meinem Projekt verwendet habe. In meinem vorherigen Artikel haben wir das Laufwerk zu einem vorhandenen Failover-Cluster hinzugefügt, und in diesem Artikel werden wir dasselbe Laufwerk verwenden. Die Datenträgerbezeichnung des Laufwerks lautet „E:\ “, also habe ich ein Verzeichnis mit dem Namen „SystemDatabases“ erstellt “ in E:\ Antrieb. Siehe folgendes Bild:

Derzeit befinden sich Systemdatenbanken auf „F:\MSSQL14.MSSQLSERVER\MSSQL\DATA " Verzeichnis. Wir möchten diese Datenbanken in das Verzeichnis „E:\SystemDatabases verschieben " Verzeichnis. Im Gegensatz zu Benutzerdatenbanken ist das Verschieben von Systemdatenbanken kein einfacher Vorgang. Wir müssen die richtige Reihenfolge und Schritte einhalten, sonst startet die SQL-Instanz nicht.

Lassen Sie uns zunächst den aktuellen Speicherort der Systemdatenbanken überprüfen. Führen Sie die folgende Abfrage aus, um den aktuellen Speicherort der Systemdatenbank abzurufen.

USE MASTER

GO

SELECT DB_NAME(DATABASE_ID) AS [DATABASE NAME], 

       NAME AS [LOGICAL NAME], 

       PHYSICAL_NAME AS [FILE PATH] 

 FROM SYS.MASTER_FILES 

 WHERE DATABASE_ID < 4

Das Folgende ist die Ausgabe:

DatabaseName Logical Name File Path

-------------- ------------------- --------------------------------------------

master master F:\MSSQL14.MSSQLSERVER\MSSQL\DAT\master.mdf

master mastlog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\mastlog.ldf

tempdb tempdev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf 

tempdb templog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf

model modeldev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\model.mdf

model modellog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\modellog.ldf

msdb msdbdata F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdbdata.mdf

msdb msdblog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdblog.ldf

Nun werde ich den Vorgang des Verschiebens von Datenbanken in ein anderes Verzeichnis auf folgende Weise erklären.

  1. Erklären Sie die Schritte zum Verschieben von msdb- und model-Datenbanken.
  2. Erläutern Sie die Schritte zum Verschieben der tempdb-Datenbank.
  3. Erläutern Sie die Schritte zum Verschieben der Master-Datenbank.

Diese Demo zeigt Ihnen, wie Sie alle Systemdatenbanken nach E:\ verschieben Laufwerk, um Ausfallzeiten zu reduzieren, daher werde ich die SQL-Dienste am Ende des Prozesses neu starten.

Schritte zum Verschieben der msdb- und model-Datenbanken

Um die msdb- und model-Datenbanken zu verschieben, müssen wir zuerst die Dateispeicherorte im Systemkatalog aktualisieren, indem wir die ALTER Database-Abfrage ausführen. Führen Sie dazu die folgende Abfrage in PowerShell oder SSMS aus.

USE MASTER; 

 GO 

 ALTER DATABASE MODEL MODIFY FILE (NAME = MODELDEV, FILENAME = 

 'E:\SYSTEMDATABASES\MODEL.MDF'); 

 GO 

 ALTER DATABASE MODEL MODIFY FILE (NAME = MODELLOG, FILENAME = 

 'E:\SYSTEMDATABASES\MODELLOG.LDF'); 

 GO 

 

ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBDATA, FILENAME = 

'E:\SYSTEMDATABASES\MSDBDATA.MDF'); 

 GO 

 

 ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBLOG, FILENAME = 

 'E:\SYSTEMDATABASES\MSDBLOG.LDF'); 

 GO

Die Ausgabe sieht wie folgt aus:

The file "MODELDEV" has been modified in the system catalog. The new path will be used the next time the database is started.

The file "MODELLOG" has been modified in the system catalog. The new path will be used the next time the database is started.

 

The file "MSDBDATA" has been modified in the system catalog. The new path will be used the next time the database is started.

The file "MSDBLOG" has been modified in the system catalog. The new path will be used the next time the database is started.

Führen Sie nun die folgende Abfrage aus, um zu überprüfen, ob die Pfade im Systemkatalog aktualisiert wurden. Führen Sie dazu die folgende Abfrage aus:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) IN ('MSDB', 'MODEL') 

 GO

Es folgt die Ausgabe:

DatabaseName Logical Name File Path

-------------- ------------------- --------------------------------------------

model modeldev E:\SystemDatabases\model.mdf

model modellog E:\SystemDatabases\modellog.ldf

msdb msdbdata E:\SystemDatabases\msdbdata.mdf

msdb msdblog E:\SystemDatabases\msdblog.ldf

Schritte zum Verschieben der tempDB-Datenbank

Wenn wir den SQL Server neu starten – er erstellt die tempdb- und Protokolldateien automatisch neu, sodass wir die tempdb-Dateien nicht manuell verschieben müssen – müssen wir lediglich den Pfad der Datenbankdateien ändern. Um den Pfad der tempdb-Datenbankdateien zu ändern, führen Sie die folgende Abfrage in PowerShell / SSMS aus.

USE MASTER; 

 GO 

ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPDEV, FILENAME = 

'E:\SYSTEMDATABASES\TEMPDB.MDF');


 GO 

ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPLOG, FILENAME = 

'E:\SYSTEMDATABASES\TEMPLOG.LDF');


 GO

Die Ausgabe sieht wie folgt aus:

The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started.

The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.

Führen Sie nun die folgende Abfrage aus, um zu überprüfen, ob die Pfade im Systemkatalog aktualisiert wurden:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'TEMPDB' 

 GO

Es folgt die Ausgabe:

DatabaseName Logical Name File Path

-------------- ------------------- --------------------------------------------

tempdb tempdev E:\SystemDatabases\tempdb.mdf 

tempdb templog E:\SystemDatabases\templog.ldf

Schritte zum Verschieben der Master-Datenbank

Das Verschieben der Master-Datenbank auf ein anderes Laufwerk unterscheidet sich vom Verschieben anderer Systemdatenbanken. Um die Systemdatenbank zu verschieben, führen wir die folgenden Schritte aus:

  1. Öffnen Sie SQL Server Configuration Manager 2017 und erweitern Sie auf SQL Server-Dienste . Siehe folgendes Bild:
  2. Klicken Sie mit der rechten Maustaste auf SQL Server (MSSQLSERVER) und klicken Sie auf Eigenschaften. Wählen Sie im Dialogfeld „Eigenschaften“ die „Startparameter“ aus ” Registerkarte. Siehe folgendes Bild:
  3. Wie Sie im obigen Bild sehen können, enthält das Textfeld in vorhandenen Parametern den Standardspeicherort der Datendatei, der Protokolldatei und des Fehlerprotokolls. Hier -d  gibt den Standardpfad der Datendatei der Masterdatenbank an  ebenso -l  gibt den Standardpfad der Protokolldatei der Master-Datenbank an. Wir müssen diese Parameter durch einen neuen Standort ersetzen. Klicken Sie also auf den Datendateiparameter und ersetzen Sie ihn durch „–  dE:\Systemdatabases\master.mdf ” Wert und klicken Sie auf Aktualisieren. Klicken Sie in ähnlicher Weise auf den Protokolldateiparameter und ersetzen Sie ihn durch "-lE:\Systemdatabases\mastlog.ldf" Wert und klicken Sie auf Aktualisieren. Siehe folgendes Bild:

4. Klicken Sie auf OK, um das Dialogfeld zu schließen.

Hinweis:

Da wir diese Aufgabe auf einer SQL Server-Failover-Instanz ausführen, müssen wir alle oben genannten Änderungen auf sekundären Knoten (SQL02.Dc.Local) vornehmen

Starten Sie die SQL Server-Dienste neu.

Nachdem der neue Pfad von msdb, model und tempdb im SQL Server-Katalog aktualisiert wurde, müssen wir die Dienste beenden, um die Datenbankdateien auf neue Laufwerke zu kopieren. Öffnen Sie dazu den SQL Server Configuration Manager 2017>> Klicken Sie auf Dienste>> Klicken Sie mit der rechten Maustaste auf SQL Server (MSSQLSERVER) und klicken Sie auf „Stop“. Siehe folgendes Bild:

Kopieren Sie nun alle Systemdatenbankdateien auf das neue Laufwerk. Siehe folgendes Bild:

Starten Sie nun den Dienst aus dem SQL Server-Konfigurationsmanager. Wenn die Dienste erfolgreich gestartet wurden, wurden der Pfad des Systems und die Datenbanken erfolgreich aktualisiert. Führen Sie die folgende Abfrage aus, um den Pfad der Master-Datenbank zu überprüfen:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'MASTER' 

 GO

Es folgt die Ausgabe:

DatabaseName Logical Name File Path

-------------- ------------------- --------------------------------------------

master master E:\SystemDatabases\master.mdf 

master mastlog E:\SystemDatabases\mastlog.ldf

Zusammenfassung

In diesem Artikel habe ich Schritt für Schritt erklärt, wie Systemdatenbanken auf eine neue Cluster-Festplatte verschoben werden.