For nylig blev jeg tildelt et projekt – vores kunde købte et nyt SAN, og de ville have os til at erstatte det gamle med et nyt SAN. Bruger- og systemdatabaser brugte SAN, i mellemtiden blev operativsystemet og SQL installeret på serverens lokale diske. Heldige os..!! Tanken var at flytte de eksisterende bruger- og systemdatabaser til et nyt SAN og holde nedetiden så minimum som muligt. Så for at minimere nedetiden besluttede vi at bruge følgende fremgangsmåde i stedet for at geninstallere OS og SQL.
- Tilslut et nyt SAN til en eksisterende server, opret nye drev på den, og tilføj disse drev til en eksisterende failover-klyngeinstans.
- Stop SQL Server, kopier master-, model- og msdb-databaser på nye drev og start SQL-tjenesterne.
- Flyt brugerdatabaser til nye drev, og fjern det gamle SAN.
I min tidligere artikel forklarede jeg trin-for-trin processen med at tilføje nyt lager til en eksisterende failover-klynge. Desuden demonstrerede jeg processen med at flytte brugerdatabaser til nye drev.
I denne artikel vil jeg demonstrere processen med at flytte systemdatabaserne til nye drev, som jeg brugte i mit projekt. I min tidligere artikel tilføjede vi drevet til en eksisterende failover-klynge, og i denne artikel skal vi bruge det samme drev. Diskens diskenhedsmærkat er "E:\ ”, så jeg oprettede en mappe med navnet “SystemDatabases ” i E:\ køre. Se følgende billede:
I øjeblikket er systemdatabaser på "F:\MSSQL14.MSSQLSERVER\MSSQL\DATA ” bibliotek. Vi ønsker at flytte disse databaser til "E:\SystemDatabases ” bibliotek. I modsætning til brugerdatabaser er flytning af systemdatabaser ikke en simpel proces. Vi skal følge den korrekte rækkefølge og trin, ellers starter SQL-instansen ikke.
Lad os først gennemgå den aktuelle placering af systemdatabaser. Udfør følgende forespørgsel for at få den aktuelle placering af 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ølgende er output:
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 vil jeg forklare processen med at flytte databaser til en anden mappe på følgende måde.
- Forklar trinene til at flytte msdb- og modeldatabaser.
- Forklar trinene til at flytte tempdb-databasen.
- Forklar trinene til at flytte masterdatabasen.
Denne demo viser dig, hvordan du flytter alle systemdatabaser til E:\ drev, derfor for at reducere nedetiden, så jeg genstarter SQL-tjenesterne i slutningen af processen.
Trin til at flytte msdb- og modeldatabaserne
For at flytte msdb- og modeldatabaserne skal vi først opdatere filplaceringerne i systemkataloget ved at udføre ALTER-databaseforespørgslen. For at gøre det skal du udføre følgende forespørgsel 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
Outputtet er som følger:
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.
Udfør nu følgende forespørgsel for at bekræfte, at stierne er opdateret i systemkataloget. For at gøre det skal du udføre følgende forespørgsel:
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ølgende er output:
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
Trin til at flytte tempDB-databasen
Når vi genstarter SQL Server - den vil automatisk genskabe tempdb- og logfilerne, og vi behøver derfor ikke flytte tempdb-filerne manuelt - alt, hvad vi skal gøre, er at ændre stien til databasefilerne. For at ændre stien til tempdb-databasefilerne skal du udføre følgende forespørgsel 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
Outputtet er som følger:
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.
Udfør nu følgende forespørgsel for at bekræfte, at stierne er opdateret i systemkataloget:
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ølgende er output:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- tempdb tempdev E:\SystemDatabases\tempdb.mdf tempdb templog E:\SystemDatabases\templog.ldf
Trin til at flytte masterdatabasen
Processen med at flytte masterdatabasen til et andet drev er forskellig fra at flytte andre systemdatabaser. For at flytte systemdatabasen udfører vi følgende trin:
- Åbn SQL Server Configuration Manager 2017 og udvid klik på SQL Server Services . Se følgende billede:
- Højreklik på SQL Server (MSSQLSERVER) og klik på egenskaber. I egenskabsdialogboksen skal du vælge "Opstartsparametre " fanen. Se følgende billede:
- Som du kan se på billedet ovenfor, indeholder tekstboksen i eksisterende parametre standardplaceringen af datafilen, logfilen og fejllogfilen. Her -d angiver standardstien til masterdatabasens datafil på samme måde -l angiver standardstien til masterdatabasens logfil. Vi skal erstatte disse parametre med en ny placering. Så klik på datafilparameteren og erstat den med "– dE:\Systemdatabases\master.mdf ” værdi og klik på Opdater. På samme måde skal du klikke på logfilparameteren og erstatte den med “-lE:\Systemdatabases\mastlog.ldf” værdi og klik på opdater. Se følgende billede:
4. Klik på OK for at lukke dialogboksen.
Bemærk:
Da vi udfører denne opgave på SQL Server failover-instans, skal vi udføre alle ovenstående ændringer på sekundære noder (SQL02.Dc.Local)
Genstart SQL Server-tjenesterne.
Når den nye sti til msdb, model og tempdb er opdateret i SQL Server-kataloget, skal vi stoppe tjenesterne for at kopiere databasefilerne på nye drev. For at gøre det skal du åbne SQL Server Configuration Manager 2017>> Klik på Tjenester>> Højreklik på SQL Server (MSSQLSERVER) og klik på "Stop." Se følgende billede:
Kopier nu alle systemdatabasefilerne på det nye drev. Se følgende billede:
Start nu tjenesten fra SQL Server Configuration Manager. Hvis tjenesterne startede med succes, er stien til systemet og databaserne blevet opdateret. Udfør følgende forespørgsel for at gennemgå stien til masterdatabasen:
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ølgende er output:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- master master E:\SystemDatabases\master.mdf master mastlog E:\SystemDatabases\mastlog.ldf
Oversigt
I denne artikel har jeg forklaret trin for trin processen med at flytte systemdatabaser til en ny klynget disk.