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 Avviare 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, tenere presente che:

  • 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

  1. Il comando seguente arresta l'istanza di SQL Server se è attualmente in esecuzione:

    systemctl stop mssql-server
    

Sostituire l'utente corrente con mssql

  1. SQL Server in Linux viene eseguito con l'account utente mssql, quindi occorre passare prima a questo utente. Quando si esegue questo comando, verrà chiesto di specificare la password root.

    su mssql
    

Avviare SQL Server in modalità utente singolo

  1. Quando si usa l'opzione -m con SQLCMD, è 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 database master.

  2. 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

  1. 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 usare localhost. <StringPassword> è la password per l'account sa.

Ripristinare il database master

  1. 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 database master.

  2. 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

  1. 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 Collegare un database.