Negli articoli precedenti della serie di database di sistema di SQL Server, abbiamo appreso lo scopo di tutti i database di sistema di SQL Server che fanno parte dell'installazione di SQL Server e abbiamo compreso le procedure consigliate da implementare per loro. Abbiamo anche compreso i database Tempdb e MSDB in modo più dettagliato. Poiché il backup e il ripristino del database di sistema sono leggermente diversi rispetto ai database utente, in questo articolo esamineremo in dettaglio come eseguire il backup dei database di sistema e ripristinare il database di sistema dai backup.
Backup del database SQL
Il termine Backup si riferisce alla copia dei dati all'interno di un database come file di backup che può essere utilizzato per ripristinare o recuperare ulteriormente i dati.
Un backup completo di un database conterrà le copie dei dati nei file di dati e nei file di registro da ripristinare come database o eseguire il ripristino point-in-time in caso di disastri o guasti catastrofici. Pertanto, i backup completi regolari sul sistema e i database degli utenti sono fondamentali.
Oltre al backup completo, SQL Server supporta diverse altre opzioni di backup come il backup differenziale, il backup del registro transazionale, il backup dei file e così via, ma non ci concentreremo su di essi poiché non rientrano nell'ambito di questo articolo.
Un backup completo del database deve essere pianificato per l'esecuzione periodica o dopo qualsiasi modifica specifica della configurazione. Anche se SQL Server può accettare il backup completo del database con estensioni di file diverse, si consiglia di salvare il backup come file *.bak per semplificare la classificazione e la manutenzione.
La sintassi del database di backup ha molte opzioni disponibili, ma ci concentreremo solo sui comandi fondamentali necessari per eseguire il backup completo di qualsiasi database. La sintassi completa è presente nell'articolo MSDN.
Sintassi BACKUP DATABASE (minima)
BACKUP DATABASE <Database_name>
TO DISK = <File_Path>
GO
Backup dei database utente
Per eseguire un backup completo di AdventureWorks database, sostituisci semplicemente il Nome database e Percorso file nel comando BACKUP DATABASE sopra ed eseguirlo:
BACKUP DATABASE [AdventureWorks]
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO
Backup dei database di sistema
Utilizzando il comando BACKUP DATABASE sopra, possiamo eseguire un backup completo dei database di sistema, come master, msdb e modello:
BACKUP DATABASE master
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO
Possiamo passare al percorso della cartella sopra e lì vediamo i backup completi del database creati con successo sia per il database dell'utente che per i database di sistema:
È possibile eseguire il backup del database tempdb?
Proviamo a eseguire un backup completo del database di sistema tempdb utilizzando la stessa sintassi BACKUP DATABASE:
BACKUP DATABASE tempdb
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO
Come abbiamo discusso in articoli precedenti, tempdb è l'unico database per il quale è presente un Backup non può essere preso . Il database tempdb verrà creato nuovamente ogni volta che vengono avviati i servizi di SQL Server. Pertanto, in caso di problemi con tempdb, il riavvio del servizio SQL Server consentirà di risolverli.
Ripristina database
Il ripristino di un database da Full Backup(*.bak) riporta il database con i dati completi o "riporta" un database a un determinato momento. Il comando RESTORE può essere utilizzato anche per ripristinare file, filegroup o log transazionali, ma non è lo scopo dell'articolo corrente.
Per ripristinare un backup completo del database , possiamo usare la sintassi seguente. Nota:simile al comando BACKUP, il comando RESTORE ha molte opzioni, ma faremo appello solo a quelle di base. Puoi trovare informazioni dettagliate su queste opzioni in un articolo MSDN dedicato.
RIPRISTINA sintassi DATABASE
RESTORE DATABASE <Database_Name>
FROM DISK = <File Path>
WITH REPLACE
GO
Ripristina database utenti
Per ripristinare AdventureWorks database dal backup completo che abbiamo preso in precedenza, possiamo utilizzare il comando RESTORE DATABASE, sostituendo il Nome database e Percorso file come mostrato di seguito:
RESTORE DATABASE [AdventureWorks]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
WITH REPLACE
GO
Ripristina database modello
Proviamo a ripristinare il database di sistema del modello utilizzando il comando RESTORE DATABASE:
RESTORE DATABASE model
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
WITH REPLACE
GO
Il backup del database del modello può essere ripristinato correttamente utilizzando il comando RESTORE DATABASE predefinito.
Ripristina database principale
Ora, proviamo a ripristinare il database principale del sistema utilizzando il comando RESTORE DATABASE:
RESTORE DATABASE master
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
WITH REPLACE
GO
Ha generato un errore in cui si afferma che l'istanza di SQL Server deve essere in esecuzione in modalità utente singolo per ripristinare il database master. Come indica il messaggio di errore, dobbiamo avviare la nostra istanza di SQL Server in modalità utente singolo e quindi provare a ripristinare il database master.
Per avviare un'istanza di SQL Server in modalità utente singolo, possiamo applicare uno dei seguenti metodi:
- Prompt dei comandi
- Parametri di avvio di SQL Server in Gestione configurazione SQL Server.
Approccio del prompt dei comandi
Per avviare l'istanza di SQL Server in modalità utente singolo tramite il prompt dei comandi, apri il prompt dei comandi con Esegui come amministratore opzione come mostrato di seguito:
Al termine, digita il comando:
NET STOP <SQL_Server_Service_Name>
Il SQL_Server_Service_Name può essere ottenuto tramite Gestione configurazione SQL Server o services.msc
Gestione configurazione SQL Server
Servizi.msc
Poiché il nostro servizio SQL Server è l'istanza predefinita, possiamo utilizzare il nome MSSQLSERVER come evidenziato sopra. Una volta inserito, chiederà conferma per interrompere tutti i servizi dipendenti. Possiamo anche interrompere il servizio SQL Server Agent digitando Y per Sì .
Quando il servizio SQL Server viene arrestato, possiamo avviarlo in modalità utente singolo. Esegui il comando seguente dove /m significa avviare il servizio SQL Server in modalità utente singolo.
NET START MSSQLSERVER /m
Quando viene eseguito, possiamo provare a ripristinare il database principale. Eseguire il comando RESTORE BACKUP come prima:
Avviando l'istanza di SQL Server in modalità utente singolo, siamo in grado di ripristinare correttamente il database di sistema master dall'ultimo backup completo del database noto senza problemi. Pertanto, abbiamo appreso che per ripristinare il database master, l'istanza di SQL Server deve essere in modalità utente singolo.
Con l'istanza di SQL Server in modalità utente singolo, solo un utente può connettersi e una volta completate le attività di ripristino, è necessario ripristinarla in modalità multiutente arrestando l'istanza di SQL Server e avviando l'istanza di SQL Server senza l'opzione /m come mostrato sotto:
NET STOP MSSQLSERVER
NET START MSSQLSERVER
Una volta avviato in modalità normale o multiutente, tutti gli utenti possono connettersi all'istanza di SQL Server ed eseguire le proprie attività. Possiamo anche verificare che il database master sia stato ripristinato al momento in cui è stato eseguito il backup completo e che eventuali modifiche alla configurazione apportate successivamente devono essere eseguite di nuovo.
Alcune cose da notare mentre l'istanza di SQL Server è in modalità utente singolo:
- Quando l'istanza di SQL Server è in modalità utente singolo, solo una sessione utente può connettersi ad essa. Pertanto, assicurati che il servizio SQL Server Agent e tutti gli altri servizi relativi a SQL Server siano in arrestato stato. In caso contrario, tali connessioni potrebbero essere stabilite prima e, in tal caso, non possiamo connetterci a SQL Server per ripristinare il database.
- Durante la connessione tramite SSMS in modalità utente singolo, disconnettere Esplora oggetti e connettersi solo tramite la finestra delle query. Se viene stabilita una connessione da Esplora oggetti, viene stabilita una singola connessione. Quindi, non puoi connetterti dalla finestra delle query. Fare riferimento allo screenshot qui sotto:mostra come connettere solo la finestra Nuova query senza connettersi tramite Esplora oggetti:
Parametro di avvio di SQL Server in Configuration Manager
Coloro che sono più a loro agio con la GUI invece del prompt dei comandi possono applicare l'approccio seguente.
1). Apri Gestione configurazione SQL Server digitando MSSQLManager13.msc nel prompt dei comandi. Qui, 13 si riferisce a SQL Server 2016, quindi usa i numeri corrispondenti corretti per altre versioni di SQL Server:
- SQL Server 2012 – SQLServerManager11.msc
- SQL Server 2014 – SQLServerManager12.msc
- SQL Server 2016 – SQLServerManager13.msc
- SQL Server 2017 – SQLServerManager14.msc
- SQL Server 2019 – SQLServerManager15.msc
2). Espandi Servizi SQL Server :
3). Fare clic con il pulsante destro del mouse sul servizio SQL Server identificato come SQL Server (MSSQLSERVER) > Proprietà .
4). Seleziona i Parametri di avvio scheda del menu.
5). Fare clic su -m in Specifica un parametro di avvio campo, quindi fai clic su Aggiungi per avviare il servizio SQL Server in modalità utente singolo.
6). Fare clic su OK e riavviare il servizio SQL Server per avviare il servizio SQL Server in modalità utente singolo.
Per modificare l'istanza di SQL Server dalla modalità Utente singolo alla modalità Multiutente o alla modalità normale dopo aver ripristinato il database master, è sufficiente fare clic sul parametro -m da Parametro esistente s , Fare clic su Rimuovi e riavvia il servizio SQL Server.
Ripristina database MSDB
Ora, proviamo a ripristinare il backup del database di sistema msdb utilizzando il comando RESTORE DATABASE predefinito:
RESTORE DATABASE msdb
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
WITH REPLACE
GO
Questo tentativo genera un errore che indica Impossibile ottenere l'accesso esclusivo perché il database è in uso . Questo messaggio di errore indica che un altro processo sta utilizzando msdb . Pertanto, è necessario applicare uno degli approcci seguenti per ripristinare correttamente il database msdb:
- Avvia l'istanza o il servizio di SQL Server in modalità utente singolo come abbiamo fatto in precedenza per evitare che chiunque si connetta e acceda a msdb banca dati.
- Oppure porta il msdb database alla modalità utente singolo senza che nessun utente si connetta ad esso.
Poiché sappiamo come trasformare l'istanza o il servizio di SQL Server in modalità utente singolo durante il ripristino del database di sistema principale, proveremo la seconda opzione modificando il database msdb in modalità utente singolo per ripristinare il backup del database msdb.
Esegui il comando seguente:
USE [master]
GO
ALTER DATABASE [msdb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
Importante :L'esecuzione del comando precedente può non riuscire nei seguenti casi:
- Il servizio SQL Server Agent è attivo e in esecuzione. Per correggere l'errore, arresta il servizio SQL Server Agent e riprova.
- Qualsiasi sessione utente è connessa al database msdb. Possiamo scoprire le connessioni attive a msdb o un altro database utilizzando la query seguente:
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')
Se questa query porta risultati, indica che alcune sessioni utente sono connesse al database msdb. In questo caso, dovremmo terminare quelle sessioni con il comando KILL e sostituendo lo spid ottenuto dall'esecuzione della query precedente:
KILL <spid>
Quando nessuna sessione è connessa a msdb database, saremo in grado di portare con successo il database msdb in modalità utente singolo. Ogni volta che un database è in modalità Utente singolo, saremo in grado di vedere la parola (Utente singolo) mostrata vicino al database come evidenziato di seguito per il database msdb:
Proviamo a ripristinare il msdb database ora utilizzando il nostro comando RESTORE DATABASE:
Con il database msdb in modalità utente singolo, siamo stati in grado di ripristinare msdb database eseguito correttamente dall'ultimo backup completo noto di msdb Banca dati. Il ripristino di un database dal backup lo porterà per impostazione predefinita in modalità multiutente e se è ancora in modalità utente singolo per qualsiasi motivo, possiamo eseguire il comando seguente per riportarlo in modalità multiutente:
USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO
Ricostruisci i database di sistema
Per qualsiasi Produzione ideale ambienti, è fondamentale disporre di un backup completo dei database di sistema in atto per ripristinare i database di sistema senza alcuna perdita di dati in caso di errori accidentali da parte degli utenti o danneggiamenti del database o ripristino di emergenza.
Negli scenari peggiori, se non è possibile avviare i servizi SQL Server, è necessario provare prima a ripristinare i database di sistema dagli ultimi backup completi noti e se non sono disponibili backup completi e non è possibile avviare i servizi SQL Server, allora siamo a sinistra con una sola opzione finale, ovvero Ricostruire i database di sistema. Nota :la ricostruzione dei database di sistema cancellerà tutte le configurazioni a livello di server archiviate in tutti i database di sistema e potremmo perdere tutte le configurazioni a livello di server/istanza come accessi, configurazioni di SQL Server Agent e altri dettagli critici archiviati nei database di sistema che abbiamo visto nei nostri articoli precedenti.
Diamo una rapida occhiata a come ricostruire i database di sistema (come accennato in precedenza, questo processo dovrebbe essere eseguito come ultima misura per ripristinare l'istanza di SQL Server in assenza di backup completi dei database di sistema).
Per ricostruire i database di sistema, avremmo bisogno del supporto di installazione di SQL Server, montato o copiato sul server in cui è installata la nostra istanza di SQL Server. Una volta terminato, dovremmo seguire i passaggi seguenti:
- Nel prompt dei comandi, passare al percorso in cui si trovano i file di installazione di SQL Server (setup.exe):
C:\Programmi\Microsoft SQL Server\130\Installazione Bootstrap\SQLServer2016
- Esegui il comando seguente, sostituendo tutti i parametri con valori validi. Valore AZIONE =REBUILDDATABASE denota che tutti i database di sistema devono essere ricostruiti dopo l'esecuzione di quel comando.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]
I parametri da modificare includono:
- NomeIstanza – il nome dell'istanza di SQL Server, nel nostro caso è RRJ
- Account – il nome dell'account sysadmin, nel nostro caso è sa
- StrongPassword – una password complessa per sa account amministratore di sistema.
- Nome di confronto – il nome di confronto del database di SQL Server se deve essere modificato.
Conclusione
Abbiamo imparato come eseguire il backup e il ripristino dei database utente e di sistema e abbiamo compreso le misure aggiuntive necessarie per ripristinare i database di sistema come i database di sistema master e msdb. In caso di backup completi dei database di sistema mancanti, abbiamo anche imparato come ricostruire i database di sistema dal supporto di installazione di SQL Server e abbiamo compreso le perdite di dati relative alla configurazione coinvolte durante la ricostruzione dei database di sistema. Per riassumere, abbiamo indirettamente compreso l'importanza di pianificare i backup completi per i database di sistema oltre ai database degli utenti.
Grazie per il tuo tempo e ci rivedremo presto con un altro articolo interessante.