Migrar um banco de dados do SQL Server do Windows para o Linux usando o recurso de backup e restauração

Aplica-se a: SQL Server – Linux

O recurso de backup e restauração do SQL Server é a maneira recomendada de migrar um banco de dados do SQL Server em Windows para o SQL Server em Linux. Neste tutorial, você percorrerá as etapas necessárias para mover um banco de dados para o Linux com as técnicas de backup e restauração.

  • Criar um arquivo de backup em Windows com SSMS
  • Instalar um shell Bash no Windows
  • Mover o arquivo de backup para o Linux a partir do shell Bash
  • Restaurar o arquivo de backup no Linux com o Transact-SQL
  • Executar uma consulta para verificar a migração

Você também pode criar um grupo de disponibilidade Always On do SQL Server para migrar um banco de dados do SQL Server do Windows para o Linux. Confira sql-server-linux-availability-group-cross-platform.

Prerequisites

Os pré-requisitos a seguir são necessários para concluir esse tutorial:

Criar um backup em Windows

Há várias maneiras de criar um arquivo de backup de um banco de dados em Windows. As etapas a seguir usam o SSMS (SQL Server Management Studio).

  1. Inicie o SQL Server Management Studio em seu computador Windows.

  2. Na caixa de diálogo de conexão, insira localhost.

  3. No Pesquisador de Objetos, expanda Bancos de Dados.

  4. Clique com o botão direito do mouse no banco de dados desejado, selecione Tarefas e, em seguida, selecione Fazer backup....

    Captura de tela do uso do SSMS para criar um arquivo de backup.

  5. Na caixa de diálogo Fazer backup do banco de dados, verifique se o Tipo de backup está definido como Completo e se Fazer backup em está definido como Disk. Observe o nome e a localização do arquivo. Por exemplo, um banco de dados chamado YourDB no SQL Server 2019 (15.x) terá o caminho de backup padrão C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Selecione OK para fazer backup do banco de dados.

Outra opção é executar uma consulta Transact-SQL para criar o arquivo de backup. O comando Transact-SQL a seguir executa as mesmas ações que as etapas anteriores para um banco de dados chamado YourDB:

BACKUP DATABASE [YourDB] TO DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10;
GO

Instalar um shell Bash no Windows

Para restaurar o banco de dados, primeiro você precisa transferir o arquivo de backup do computador Windows para o computador Linux de destino. Neste tutorial, movemos o arquivo para o Linux por meio de um shell Bash (janela de terminal) em execução no Windows.

  1. Instale em seu computador Windows um shell Bash compatível com os comandos scp (cópia segura) e ssh (logon remoto). Dois exemplos são:

  2. Abra uma sessão do Bash no Windows.

Copie o arquivo de backup para o Linux

  1. Na sessão do Bash, navegue até o diretório que contém o arquivo de backup. Por exemplo:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. Use o comando scp para transferir o arquivo para o computador Linux de destino. O exemplo a seguir transfere YourDB.bak para o diretório base do user1 no servidor Linux com o endereço IP 192.0.2.9:

    scp YourDB.bak user1@192.0.2.9:./
    

    Captura de tela do comando scp.

Dica

Há alternativas ao uso do comando scp para transferência de arquivos. Deve-se usar o Samba para configurar um compartilhamento de rede de SMB entre o Windows e o Linux. Para obter um passo a passo no Ubuntu, consulte Samba como um servidor de arquivos. Depois de estabelecido, você pode acessá-lo como um compartilhamento de arquivo de rede do Windows, como \\machinenameorip\share.

Mova o arquivo de backup antes de restaurar

Neste ponto, o arquivo de backup está no servidor Linux, no diretório base do seu usuário. Antes de restaurar o banco de dados no SQL Server, você deve colocar o backup em um subdiretório de /var/opt/mssql, pois esse é possuído pelo usuário mssql e grupo mssql. Se você estiver procurando alterar o local de backup padrão, consulte o artigo Configurar com mssql-conf.

  1. Na mesma sessão Bash do Windows, conecte-se remotamente ao seu computador Linux de destino com o comando ssh. O exemplo a seguir conecta-se ao computador Linux 192.0.2.9 como usuário user1.

    ssh user1@192.0.2.9
    

    Agora você está executando comandos no servidor Linux remoto.

  2. Entre no modo de superusuário.

    sudo su
    
  3. Crie um novo diretório de backup. O parâmetro -p não fará nada se o diretório já existir.

    mkdir -p /var/opt/mssql/backup
    
  4. Mova o arquivo de backup para esse diretório. No exemplo a seguir, o arquivo de backup reside no diretório base do user1. Altere o comando para corresponder à localização e ao nome do seu arquivo de backup.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Saia do modo de superusuário.

    exit
    

Restaurar seu banco de dados no Linux

Para restaurar o backup do banco de dados, você pode usar o comando RESTORE DATABASE do Transact-SQL (TQL).

As etapas a seguir usam a ferramenta sqlcmd. Caso ainda não tenha instalado as ferramentas do SQL Server, confira Instalar as ferramentas de linha de comando sqlcmd e bcp do SQL Server no Linux.

  1. No mesmo terminal, inicie o sqlcmd. O exemplo a seguir conecta-se à instância local do SQL Server com o usuário SA. Insira a senha quando solicitado ou especifique a senha adicionando o parâmetro -P.

    sqlcmd -S localhost -U SA
    
  2. No prompt >1, insira o comando RESTORE DATABASE a seguir, pressionando ENTER após cada linha (você não pode copiar e colar todo o comando de várias linhas de uma só vez). Substitua todas as ocorrências de YourDB pelo nome do seu banco de dados.

    RESTORE DATABASE YourDB
    FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
    WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
    MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
    GO
    

    Deve ser exibida uma mensagem informando que o banco de dados foi restaurado com sucesso.

    RESTORE DATABASE pode retornar um erro como no exemplo a seguir:

    File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file.
    Msg 5133, Level 16, State 1, Server servername, Line 1
    Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).
    

    Nesse caso, o banco de dados contém arquivos secundários. Se esses arquivos não forem especificados na cláusula MOVE de RESTORE DATABASE, o procedimento de restauração tentará criá-los no mesmo caminho que o servidor original.

    Você pode listar todos os arquivos incluídos no backup:

    RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak';
    GO
    

    Deve ser exibida uma lista como no exemplo a seguir (listando apenas as duas primeiras colunas):

    LogicalName         PhysicalName                                                                 ..............
    ------------------- ---------------------------------------------------------------------------- ---------------
    YourDB              Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf          ..............
    YourDB_Product      Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf  ..............
    YourDB_Customer     Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
    YourDB_log          Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf      ..............
    

    Você pode usar essa lista para criar cláusulas MOVE para os arquivos adicionais. Neste exemplo, RESTORE DATABASE é:

    RESTORE DATABASE YourDB
    FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
    WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
    MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf',
    MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf',
    MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
    GO
    
  3. Verifique a restauração listando todos os bancos de dados do servidor. O banco de dados restaurado deve constar na lista.

    SELECT Name FROM sys.Databases
    GO
    
  4. Execute outras consultas no banco de dados migrado. O comando a seguir alterna o contexto para o banco de dados YourDB e seleciona linhas de uma de suas tabelas.

    USE YourDB
    SELECT * FROM YourTable
    GO
    
  5. Quando terminar de usar o sqlcmd, digite exit.

  6. Quando terminar de trabalhar na sessão ssh remota, digite exit novamente.

Próxima etapa

Neste tutorial, você aprendeu a fazer backup de um banco de dados em Windows e movê-lo para um servidor Linux que executa o SQL Server. Você aprendeu a:

  • Usar o SSMS e o Transact-SQL para criar um arquivo de backup em Windows
  • Instalar um shell Bash em Windows
  • Usar o comando scp para mover arquivos de backup do Windows para o Linux
  • Usar o comando ssh para conectar-se remotamente ao seu computador Linux
  • Relocar o arquivo de backup para se preparar para a restauração
  • Usar o sqlcmd para executar comandos Transact-SQL
  • Restaurar o backup do banco de dados com o comando RESTORE DATABASE
  • Executar a consulta para verificar a migração

Em seguida, explore outros cenários de migração para o SQL Server em Linux.