Ripristinare il database master in Linux in modalità utente singolo
Si applica a: SQL Server - Linux
In determinate circostanze potrebbe essere necessario ripristinare il database master
in un'istanza di SQL Server in modalità utente singolo in Linux. Le situazioni in cui può verificarsi questa necessità includono la migrazione a una nuova istanza o il ripristino in seguito all'individuazione di incoerenze.
Nota
Al completamento del ripristino, SQL Server verrà arrestato automaticamente. Questo comportamento è impostato a livello di progettazione.
Per ripristinare il database master
è necessario avviare SQL Server in modalità utente singolo usando l'opzione di avvio -m
dalla riga di comando.
Per avviare un'istanza di SQL Server in modalità utente singolo in Windows, vedere SQL Server in modalità utente singolo.
Prerequisiti
L'avvio di SQL Server in modalità utente singolo consente a qualsiasi membro del gruppo Administrators locale di connettersi a SQL Server come membro del ruolo predefinito del server sysadmin. Per altre informazioni, vedere Connettersi a SQL Server se gli amministratori di sistema sono bloccati.
Quando si avvia un'istanza di SQL Server in modalità utente singolo:
- La connessione al server è consentita a un solo utente.
- Il processo
CHECKPOINT
non viene eseguito. Per impostazione predefinita, tale processo viene eseguito automaticamente all'avvio.
Arrestare il servizio SQL Server
Il comando seguente arresta l'istanza di SQL Server se è attualmente in esecuzione:
systemctl stop mssql-server
Sostituire l'utente corrente con mssql
SQL Server in Linux viene eseguito con l'account utente
mssql
, quindi occorre passare prima a questo utente. Quando si esegue questo comando, viene chiesto di specificare la passwordroot
.su mssql
Avviare SQL Server in modalità utente singolo
Quando si usa l'opzione
-m
conSQLCMD
, è possibile limitare le connessioni a un'applicazione client specifica (SQLCMD
deve essere scritto in maiuscolo come illustrato di seguito):/opt/mssql/bin/sqlservr -m"SQLCMD"
Nell'esempio riportato sopra,
-m"SQLCMD"
limita le connessioni a una singola connessione, che deve identificarsi come programma client sqlcmd. Usare questa opzione quando si avvia SQL Server in modalità utente singolo per ripristinare un databasemaster
.Quando viene avviato, SQL Server genera diverse voci di log. Per verificare che sia in esecuzione in modalità utente singolo, cercare le righe seguenti nell'output:
[...] 2022-05-24 04:26:27.24 Server Command Line Startup Parameters: -m "SQLCMD" [...] 2022-05-24 04:26:28.20 spid8s Warning ****************** 2022-05-24 04:26:28.21 spid8s SQL Server started in single-user mode. This an informational message only. No user action is required.
Connettersi all'istanza di SQL Server
Per connettersi all'istanza di SQL Server, usare sqlcmd:
/opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <StrongPassword>
Nell'esempio precedente,
<ServerName>
è il nome dell'host che esegue SQL Server se si esegue la connessione in remoto. Se ci si connette direttamente nell'host in cui è in esecuzione SQL Server, è possibile ignorare questo parametro oppure usarelocalhost
.<StringPassword>
è la password per l'account sa.
Ripristinare il database master
Eseguire i comandi seguenti all'interno di sqlcmd. Tenere presente che sqlcmd prevede la presenza di
GO
alla fine dello script per eseguirlo.use [master]; RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/data/master.bak' WITH FILE=1, MOVE N'master' to N'/var/opt/mssql/data/master.mdf', MOVE N'mastlog' to N'/var/opt/mssql/data/mastlog.ldf', NOUNLOAD, REPLACE, STATS=5; GO
Nell'esempio precedente, il percorso del file di backup del database
master
è/var/opt/mssql/data/master.bak
. Occorre sostituire questo valore con il percorso corretto del file di backup del databasemaster
.Se il ripristino riesce, l'output dovrebbe essere simile all'esempio seguente.
Processed 456 pages for database 'master', file 'master' on file 1. Processed 5 pages for database 'master', file 'mastlog' on file 1. The master database has been successfully restored. Shutting down SQL Server. SQL Server is terminating this process.
Riavviare il servizio SQL Server
Per riavviare SQL Server, eseguire il comando seguente.
systemctl start mssql-server
Osservazioni:
Quando si ripristina un backup del database master
, gli eventuali database utente aggiunti all'istanza dopo l'esecuzione del backup non saranno visibili dopo il ripristino del database master
. I file dovrebbero comunque esistere nel livello di archiviazione, quindi è necessario ricollegare manualmente tali file di database utente per portare i database online. Per altre informazioni, vedere Attach a Database.
Contenuto correlato
- Troubleshoot SQL Server on Linux (Risolvere i problemi di SQL Server in Linux)
- Utilità sqlcmd
- Avviare, arrestare e riavviare i servizi di SQL Server in Linux