sql >> Databasteknik >  >> RDS >> Sqlserver

Flytta systemdatabaser i SQL Server-failover-klustret

Nyligen blev jag tilldelad ett projekt – vår kund köpte ett nytt SAN, och de ville att vi skulle ersätta det gamla med ett nytt SAN. Användar- och systemdatabaser använde SAN, samtidigt installerades operativsystemet och SQL på serverns lokala diskar. Tur vi..!! Tanken var att flytta de befintliga användar- och systemdatabaserna till ett nytt SAN och hålla neretiden så lite som möjligt. Så för att minimera stilleståndstiden, istället för att installera om OS och SQL, bestämde vi oss för att använda följande tillvägagångssätt.

  1. Anslut ett nytt SAN till en befintlig server, skapa nya enheter på den och lägg till dessa enheter i en befintlig failover-klusterinstans.
  2. Stoppa SQL Server, kopiera master-, modell- och msdb-databaser på nya enheter och starta SQL-tjänsterna.
  3. Flytta användardatabaser till nya enheter och ta bort det gamla SAN.

I min tidigare artikel förklarade jag steg-för-steg-processen för att lägga till ny lagring till ett befintligt failover-kluster. Dessutom demonstrerade jag processen att flytta användardatabaser till nya enheter.

I den här artikeln kommer jag att demonstrera processen att flytta systemdatabaserna till nya enheter som jag använde i mitt projekt. I min tidigare artikel la vi till enheten till ett befintligt failover-kluster och i den här artikeln kommer vi att använda samma enhet. Volymetiketten för enheten är "E:\ ”, så jag skapade en katalog som heter “SystemDatabases ” i E:\ kör. Se följande bild:

För närvarande finns systemdatabaser på "F:\MSSQL14.MSSQLSERVER\MSSQL\DATA ” katalog. Vi vill flytta dessa databaser till "E:\SystemDatabases ” katalog. Till skillnad från användardatabaser är att flytta systemdatabaser inte en enkel process. Vi måste följa rätt sekvens och steg, annars startar inte SQL-instansen.

Låt oss först granska den nuvarande platsen för systemdatabaser. Kör följande fråga för att få den aktuella platsen för systemdatabasen.

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

Följande är utdata:

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

Nu ska jag förklara processen att flytta databaser till en annan katalog på följande sätt.

  1. Förklara stegen för att flytta msdb och modelldatabaser.
  2. Förklara stegen för att flytta tempdb-databasen.
  3. Förklara stegen för att flytta huvuddatabasen.

Den här demon visar hur du flyttar alla systemdatabaser till E:\ enhet, därför för att minska stilleståndstiden, så jag kommer att starta om SQL-tjänsterna i slutet av processen.

Steg för att flytta msdb- och modelldatabaserna

För att flytta msdb- och modelldatabaserna måste vi först uppdatera filplatserna i systemkatalogen genom att köra ALTER-databasfrågan. För att göra det, kör följande fråga i PowerShell eller SSMS.

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

Utgången är som följer:

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.

Kör nu följande fråga för att verifiera att sökvägarna är uppdaterade i systemkatalogen. För att göra det, kör följande fråga:

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

Följande är resultatet:

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

Steg för att flytta tempDB-databasen

När vi startar om SQL Server – den kommer automatiskt att återskapa tempdb- och loggfilerna och därför behöver vi inte flytta tempdb-filerna manuellt – allt vi behöver göra är att ändra sökvägen till databasfilerna. För att ändra sökvägen till tempdb-databasfilerna, kör följande fråga i PowerShell / SSMS.

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

Utgången är som följer:

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.

Kör nu följande fråga för att verifiera att sökvägarna är uppdaterade i systemkatalogen:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'TEMPDB' 

 GO

Följande är resultatet:

DatabaseName Logical Name File Path

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

tempdb tempdev E:\SystemDatabases\tempdb.mdf 

tempdb templog E:\SystemDatabases\templog.ldf

Steg för att flytta huvuddatabasen

Processen att flytta huvuddatabasen till en annan enhet skiljer sig från att flytta andra systemdatabaser. För att flytta systemdatabasen kommer vi att utföra följande steg:

  1. Öppna SQL Server Configuration Manager 2017 och expandera klicka på SQL Server Services . Se följande bild:
  2. Högerklicka på SQL Server (MSSQLSERVER) och klicka på egenskaper. I egenskapsdialogrutan väljer du "Startparametrar "-fliken. Se följande bild:
  3. Som du kan se i bilden ovan innehåller textrutan i befintliga parametrar standardplatsen för datafilen, loggfilen och felloggen. Här -d  anger standardsökvägen till datafilen för huvuddatabasen  likaså -l  anger standardsökvägen till loggfilen för huvuddatabasen. Vi måste ersätta dessa parametrar med en ny plats. Så klicka på datafilsparametern och ersätt den med "–  dE:\Systemdatabases\master.mdf ” värde och klicka på Uppdatera. På samma sätt klickar du på loggfilsparametern och ersätter den med “-lE:\Systemdatabases\mastlog.ldf” värde och klicka på uppdatera. Se följande bild:

4. Klicka på OK för att stänga dialogrutan.

Obs!

Eftersom vi utför den här uppgiften på SQL Server failover-instanser måste vi utföra alla ovanstående ändringar på sekundära noder (SQL02.Dc.Local)

Starta om SQL Server-tjänsterna.

När den nya sökvägen för msdb, modell och tempdb har uppdaterats i SQL Server-katalogen måste vi stoppa tjänsterna för att kopiera databasfilerna på nya enheter. För att göra det, öppna SQL Server Configuration Manager 2017>> Klicka på Tjänster>> Högerklicka på SQL Server (MSSQLSERVER) och klicka på "Stopp." Se följande bild:

Kopiera nu alla systemdatabasfiler på den nya enheten. Se följande bild:

Starta nu tjänsten från SQL Server-konfigurationshanteraren. Om tjänsterna startade framgångsrikt har sökvägen till systemet och databaserna uppdaterats framgångsrikt. Kör följande fråga för att granska sökvägen till huvuddatabasen:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'MASTER' 

 GO

Följande är resultatet:

DatabaseName Logical Name File Path

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

master master E:\SystemDatabases\master.mdf 

master mastlog E:\SystemDatabases\mastlog.ldf

Sammanfattning

I den här artikeln har jag förklarat processen steg för steg för att flytta systemdatabaser till en ny klustrad disk.


  1. Hur skapar jag en tillfällig tabell i SQL?

  2. SELECT COUNT(*) AS count - Hur man använder denna räkning

  3. @@DATEFIRST – Få veckans första dag i SQL Server

  4. Ge tabellnivåbehörigheter i SQL Server