Restaurar o banco de dados mestre no Linux no modo de usuário único

Aplica-se a:SQL Server – Linux

Em determinadas circunstâncias, talvez seja necessário restaurar o banco de dados master em uma instância do SQL Server no modo de usuário único no Linux. Os cenários incluem a migração para uma nova instância ou a recuperação de inconsistências.

Observação

O SQL Server será desligado automaticamente após a conclusão da restauração. Este comportamento ocorre por design.

A restauração do banco de dados master requer a inicialização do SQL Server no modo de usuário único, usando a opção de inicialização-m na linha de comando.

Para iniciar uma instância do SQL Server no modo de usuário único no Windows, confira Iniciar o SQL Server no modo de usuário único.

Pré-requisitos

Iniciar o SQL Server no modo de usuário único permite que qualquer membro do grupo de administradores locais se conecte ao SQL Server como um membro da função de servidor fixa sysadmin. Para obter mais informações, veja Conectar-se ao SQL Server quando os administradores do sistema estão bloqueados.

Ao iniciar uma instância do SQL Server no modo de usuário único, observe o seguinte:

  • Apenas um usuário pode se conectar ao servidor.

  • O processo CHECKPOINT não é executado. Por padrão, ele é executado automaticamente na inicialização.

Interromper o serviço do SQL Server

  1. O seguinte comando interromperá a instância do SQL Server se ela estiver em execução no momento:

    systemctl stop mssql-server
    

Alterar o usuário atual para mssql

  1. O SQL Server em Linux é executado sob o usuário mssql. Portanto, você precisará alternar para esse usuário primeiro. Você deverá inserir a senha root ao executar este comando.

    su mssql
    

Iniciar o SQL Server no modo de usuário único

  1. Ao usar a opção -m com SQLCMD, você pode limitar as conexões com um aplicativo cliente especificado (SQLCMD precisa ser capitalizado conforme mostrado):

    /opt/mssql/bin/sqlservr -m"SQLCMD"
    

    No exemplo anterior, -m"SQLCMD" limita conexões a uma única conexão, e essa conexão deve se identificar como o programa cliente sqlcmd. Use essa opção quando estiver iniciando o SQL Server no modo de usuário único para restaurar um banco de dados master.

  2. Quando SQL Server é iniciado, ele gera várias entradas de log. Você pode confirmar que ele está em execução no modo de usuário único procurando as seguintes linhas na saída:

    [...]
    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. 
    

Conectar-se à instância do SQL Server

  1. Use sqlcmd para se conectar à instância do SQL Server:

    /opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <StrongPassword> 
    

    No exemplo anterior, <ServerName> é o nome do host que executa o SQL Server se você está se conectando remotamente. Se você está se conectando diretamente no host em que o SQL Server está em execução, ignore esse parâmetro ou use localhost. <StringPassword> é a senha da conta SA.

Restaurar o banco de dados master

  1. Execute os comandos a seguir dentro do sqlcmd. Lembre-se de que sqlcmd espera GO no final do script para executá-lo.

    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
    

    No exemplo anterior, o caminho para o arquivo de backup do banco de dados master é /var/opt/mssql/data/master.bak. Você precisará substituir esse valor pelo caminho correto para o arquivo de backup do banco de dados master.

  2. Você deverá ver uma saída semelhante ao exemplo a seguir, se a restauração for bem-sucedida.

    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.
    

Reinicie o serviço do SQL Server

  1. Para reiniciar o SQL Server, execute o comando a seguir.

    systemctl start mssql-server
    

Comentários

Quando você restaurar um backup de banco de dados master, todos os bancos de dados de usuário existentes que tiverem sido adicionados à instância depois que o backup foi feito não ficarão visíveis após a restauração de master. Os arquivos ainda devem existir na camada de armazenamento, portanto, você precisará anexar manualmente esses arquivos de banco de dados de usuário para que esses bancos de dados fiquem online. Confira Anexar um banco de dados para obter mais informações.