Di recente, mi è stato assegnato un progetto:il nostro cliente ha acquistato una nuova SAN e volevano che sostituissimo quella vecchia con una nuova SAN. I database utente e di sistema utilizzavano SAN, mentre il sistema operativo e SQL sono stati installati sui dischi locali del server. Fortunati noi..!! L'idea era di spostare gli utenti esistenti e i database di sistema in una nuova SAN e ridurre al minimo i tempi di inattività. Quindi, per ridurre al minimo i tempi di inattività, invece di reinstallare OS e SQL, abbiamo deciso di utilizzare il seguente approccio.
- Collega una nuova SAN a un server esistente, crea nuove unità su di essa e aggiungi tali unità a un'istanza del cluster di failover esistente.
- Arresta SQL Server, copia i database master, model e msdb su nuove unità e avvia i servizi SQL.
- Sposta i database degli utenti su nuove unità e rimuovi la vecchia SAN.
Nel mio articolo precedente, ho spiegato il processo passo passo per aggiungere nuovo storage a un cluster di failover esistente. Inoltre, ho dimostrato il processo di spostamento dei database degli utenti su nuove unità.
In questo articolo, dimostrerò il processo di spostamento dei database di sistema su nuove unità che ho utilizzato nel mio progetto. Nel mio articolo precedente, abbiamo aggiunto l'unità a un cluster di failover esistente e in questo articolo utilizzeremo la stessa unità. L'etichetta del volume dell'unità è "E:\ ”, quindi ho creato una directory denominata “SystemDatabases ” in E:\ guidare. Vedi l'immagine seguente:
Attualmente, i database di sistema sono su "F:\MSSQL14.MSSQLSERVER\MSSQL\DATA ” directory. Vogliamo spostare questi database in "E:\SystemDatabases ” directory. A differenza dei database utente, lo spostamento dei database di sistema non è un processo semplice. Dobbiamo seguire la sequenza e i passaggi corretti, altrimenti l'istanza SQL non si avvia.
Innanzitutto, esaminiamo la posizione corrente dei database di sistema. Eseguire la query seguente per ottenere la posizione corrente del database di sistema.
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
Quello che segue è l'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
Ora spiegherò il processo di spostamento dei database in un'altra directory nel modo seguente.
- Spiega i passaggi per spostare msdb e modelli di database.
- Spiega i passaggi per spostare il database tempdb.
- Spiega i passaggi per spostare il database principale.
Questa demo ti mostrerà come spostare tutti i database di sistema in E:\ drive, quindi per ridurre i tempi di inattività, quindi riavvierò i servizi SQL alla fine del processo.
Passaggi per spostare i database msdb e modello
Per spostare i database msdb e model, in primo luogo, è necessario aggiornare le posizioni dei file nel catalogo di sistema eseguendo la query ALTER Database. Per farlo, esegui la seguente query in PowerShell o 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
L'output è il seguente:
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.
Ora esegui la seguente query per verificare che i percorsi siano aggiornati nel catalogo di sistema. Per farlo, esegui la seguente query:
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
Di seguito è riportato l'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
Passaggi per spostare il database tempDB
Quando riavviamo SQL Server, ricreerà automaticamente i file tempdb e di registro, quindi non è necessario spostare manualmente i file tempdb:tutto ciò che dobbiamo fare è modificare il percorso dei file di database. Per modificare il percorso dei file di database tempdb, eseguire la query seguente 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
L'output è il seguente:
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.
Ora esegui la seguente query per verificare che i percorsi siano aggiornati nel catalogo di sistema:
SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], PHYSICAL_NAME AS [FILE LOCATION] FROM SYS.MASTER_FILES WHERE DB_NAME(DATABASE_ID) = 'TEMPDB' GO
Di seguito è riportato l'output:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- tempdb tempdev E:\SystemDatabases\tempdb.mdf tempdb templog E:\SystemDatabases\templog.ldf
Passaggi per spostare il database principale
Il processo di spostamento del database master su un'altra unità è diverso dallo spostamento di altri database di sistema. Per spostare il database di sistema, eseguiremo i seguenti passaggi:
- Apri Gestione configurazione SQL Server 2017 ed espandi fai clic su Servizi SQL Server . Vedi l'immagine seguente:
- Fai clic con il pulsante destro del mouse su SQL Server (MSSQLSERVER) e clicca su proprietà. Nella finestra di dialogo delle proprietà, seleziona "Parametri di avvio scheda ". Vedi l'immagine seguente:
- Come puoi vedere nell'immagine sopra, nei parametri esistenti la casella di testo contiene la posizione predefinita del file di dati, del file di registro e del registro degli errori. Qui -d indica il percorso predefinito del file di dati del database principale allo stesso modo, -l indica il percorso predefinito del file di registro del database master. Dobbiamo sostituire questi parametri con una nuova posizione. Quindi fai clic sul parametro del file di dati e sostituiscilo con "– dE:\Systemdatabases\master.mdf ” e fare clic su Aggiorna. Allo stesso modo, fai clic sul parametro del file di registro e sostituiscilo con "-lE:\Systemdatabases\mastlog.ldf" valore e fare clic su Aggiorna. Vedi l'immagine seguente:
4. Fare clic su OK per chiudere la finestra di dialogo.
Nota:
Poiché stiamo eseguendo questa attività sull'istanza di failover di SQL Server, dobbiamo eseguire tutte le modifiche precedenti sui nodi secondari (SQL02.Dc.Local)
Riavvia i servizi di SQL Server.
Dopo aver aggiornato il nuovo percorso di msdb, model e tempdb nel catalogo di SQL Server, è necessario interrompere i servizi per copiare i file di database su nuove unità. Per fare ciò, apri SQL Server Configuration Manager 2017>> Fai clic su Servizi>> Fai clic con il pulsante destro del mouse su SQL Server (MSSQLSERVER) e fai clic su "Stop". Vedi l'immagine seguente:
Ora copia tutti i file del database di sistema sulla nuova unità. Guarda l'immagine seguente:
Ora avvia il servizio dal gestore di configurazione di SQL Server. Se i servizi sono stati avviati correttamente, il percorso del sistema e i database sono stati aggiornati correttamente. Eseguire la query seguente per rivedere il percorso del database principale:
SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], PHYSICAL_NAME AS [FILE LOCATION] FROM SYS.MASTER_FILES WHERE DB_NAME(DATABASE_ID) = 'MASTER' GO
Di seguito è riportato l'output:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- master master E:\SystemDatabases\master.mdf master mastlog E:\SystemDatabases\mastlog.ldf
Riepilogo
In questo articolo, ho spiegato il processo passo passo per spostare i database di sistema su un nuovo disco in cluster.