sql >> Database >  >> RDS >> Sqlserver

Systeemdatabases verplaatsen in het SQL Server-failovercluster

Onlangs kreeg ik een project toegewezen:onze klant kocht een nieuw SAN en ze wilden dat we het oude door een nieuw SAN zouden vervangen. Gebruikers- en systeemdatabases maakten gebruik van SAN, terwijl het besturingssysteem en SQL op de lokale schijven van de server waren geïnstalleerd. Gelukkig ons..!! Het idee was om de bestaande gebruikers- en systeemdatabases naar een nieuw SAN te verplaatsen en de downtime zo minimaal mogelijk te houden. Dus, om de downtime te minimaliseren, hebben we besloten om de volgende aanpak te gebruiken in plaats van OS en SQL opnieuw te installeren.

  1. Bevestig een nieuw SAN aan een bestaande server, maak er nieuwe schijven op en voeg die schijven toe aan een bestaande failover-clusterinstantie.
  2. Stop SQL Server, kopieer master-, model- en msdb-databases op nieuwe schijven en start de SQL-services.
  3. Verplaats gebruikersdatabases naar nieuwe stations en verwijder het oude SAN.

In mijn vorige artikel heb ik het stapsgewijze proces uitgelegd voor het toevoegen van nieuwe opslag aan een bestaand failovercluster. Bovendien demonstreerde ik het proces van het verplaatsen van gebruikersdatabases naar nieuwe schijven.

In dit artikel ga ik het proces demonstreren van het verplaatsen van de systeemdatabases naar nieuwe schijven die ik in mijn project heb gebruikt. In mijn vorige artikel hebben we de schijf toegevoegd aan een bestaand failovercluster en in dit artikel gaan we dezelfde schijf gebruiken. Het volumelabel van de schijf is "E:\ ", dus ik heb een map gemaakt met de naam "SystemDatabases ” in E:\ rijden. Zie de volgende afbeelding:

Momenteel bevinden de systeemdatabases zich op "F:\MSSQL14.MSSQLSERVER\MSSQL\DATA ” map. We willen deze databases verplaatsen naar de "E:\SystemDatabases ” map. In tegenstelling tot gebruikersdatabases is het verplaatsen van systeemdatabases geen eenvoudig proces. We moeten de juiste volgorde en stappen volgen, anders start de SQL-instantie niet.

Laten we eerst eens kijken naar de huidige locatie van systeemdatabases. Voer de volgende query uit om de huidige locatie van de systeemdatabase te krijgen.

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

Het volgende is de uitvoer:

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 zal ik het proces van het verplaatsen van databases naar een andere directory op de volgende manier uitleggen.

  1. Leg de stappen uit voor het verplaatsen van msdb en modeldatabases.
  2. Leg de stappen uit voor het verplaatsen van de tempdb-database.
  3. Leg de stappen uit voor het verplaatsen van de hoofddatabase.

Deze demo laat u zien hoe u alle systeemdatabases verplaatst naar E:\ schijf, dus om downtime te verminderen, dus ik zal de SQL-services aan het einde van het proces opnieuw starten.

Stappen om de msdb- en modeldatabases te verplaatsen

Om de msdb- en modeldatabases te verplaatsen, moeten we eerst de bestandslocaties in de systeemcatalogus bijwerken door de ALTER Database-query uit te voeren. Om dat te doen, voert u de volgende query uit in PowerShell of 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

De uitvoer is als volgt:

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.

Voer nu de volgende query uit om te controleren of de paden zijn bijgewerkt in de systeemcatalogus. Voer hiervoor de volgende query uit:

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

Hieronder volgt de uitvoer:

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

Stappen om de tempDB-database te verplaatsen

Wanneer we de SQL Server opnieuw opstarten - het zal automatisch de tempdb- en logbestanden opnieuw maken, dus we hoeven de tempdb-bestanden niet handmatig te verplaatsen - we hoeven alleen maar het pad van de databasebestanden te wijzigen. Om het pad van de tempdb-databasebestanden te wijzigen, voert u de volgende query uit in 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

De uitvoer is als volgt:

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.

Voer nu de volgende vraag uit om te controleren of de paden in de systeemcatalogus zijn bijgewerkt:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'TEMPDB' 

 GO

Hieronder volgt de uitvoer:

DatabaseName Logical Name File Path

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

tempdb tempdev E:\SystemDatabases\tempdb.mdf 

tempdb templog E:\SystemDatabases\templog.ldf

Stappen om de hoofddatabase te verplaatsen

Het verplaatsen van de hoofddatabase naar een ander station is anders dan het verplaatsen van andere systeemdatabases. Om de systeemdatabase te verplaatsen, voeren we de volgende stappen uit:

  1. Open SQL Server-configuratiemanager 2017 en vouw uit klik op SQL Server Services . Zie de volgende afbeelding:
  2. Klik met de rechtermuisknop op SQL Server (MSSQLSERVER) en klik op eigenschappen. Selecteer in het eigenschappendialoogvenster de "Opstartparameters tabblad. Zie de volgende afbeelding:
  3. Zoals u in de bovenstaande afbeelding kunt zien, bevat het tekstvak in bestaande parameters de standaardlocatie van het gegevensbestand, het logbestand en het foutenlogboek. Hier -d  geeft het standaardpad aan van het gegevensbestand van de hoofddatabase  op dezelfde manier, -l  geeft het standaardpad aan van het logbestand van de hoofddatabase. We moeten deze parameters vervangen door een nieuwe locatie. Klik dus op de datafile-parameter en vervang deze door "–  dE:\Systemdatabases\master.mdf ” waarde en klik op Bijwerken. Klik op dezelfde manier op de parameter van het logbestand en vervang deze door “-lE:\Systemdatabases\mastlog.ldf” waarde en klik op bijwerken. Zie de volgende afbeelding:

4. Klik op OK om het dialoogvenster te sluiten.

Opmerking:

Aangezien we deze taak uitvoeren op een SQL Server-failoverinstantie, moeten we alle bovenstaande wijzigingen uitvoeren op secundaire knooppunten (SQL02.Dc.Local)

Start de SQL Server-services opnieuw.

Zodra het nieuwe pad van msdb, model en tempdb is bijgewerkt in de SQL Server-catalogus, moeten we de services stoppen om de databasebestanden naar nieuwe schijven te kopiëren. Open hiervoor SQL Server configuration manager 2017>> Klik op Services>> Klik met de rechtermuisknop op SQL Server (MSSQLSERVER) en klik op "Stop". Zie de volgende afbeelding:

Kopieer nu alle systeemdatabasebestanden naar de nieuwe schijf. Zie de volgende afbeelding:

Start nu de service vanuit de SQL Server-configuratiemanager. Als de services met succes zijn gestart, zijn het pad van het systeem en de databases met succes bijgewerkt. Voer de volgende query uit om het pad van de hoofddatabase te bekijken:

SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], 

       PHYSICAL_NAME AS [FILE LOCATION] 

 FROM SYS.MASTER_FILES 

 WHERE  DB_NAME(DATABASE_ID) = 'MASTER' 

 GO

Hieronder volgt de uitvoer:

DatabaseName Logical Name File Path

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

master master E:\SystemDatabases\master.mdf 

master mastlog E:\SystemDatabases\mastlog.ldf

Samenvatting

In dit artikel heb ik het stapsgewijze proces uitgelegd voor het verplaatsen van systeemdatabases naar een nieuwe geclusterde schijf.


  1. Som met SQL server RollUP - maar alleen laatste samenvatting?

  2. Oracle:Bereken tijdsverschil in UU:MM:SS tussen 2 datums

  3. Haal de naam van de aanroepende procedure of functie op in Oracle PL/SQL

  4. Hoe u Microsoft Access-foutcontrolemarkeringen kunt stoppen of beheren