Migrar um banco de dados do SQL Server do Windows para o Linux usando o recurso de backup e restauraçãoMigrate a SQL Server database from Windows to Linux using backup and restore

APLICA-SE A: simSQL Server (somente para o Linux) nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

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.SQL Server's backup and restore feature is the recommended way to migrate a database from SQL Server on Windows to SQL Server on 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.In this tutorial, you will walk through the steps required to move a database to Linux with backup and restore techniques.

  • Criar um arquivo de backup em Windows com SSMSCreate a backup file on Windows with SSMS
  • Instalar um shell Bash em WindowsInstall a Bash shell on Windows
  • Mover o arquivo de backup para Linux do shell BashMove the backup file to Linux from the Bash shell
  • Restaurar o arquivo de backup no Linux com o Transact-SQLRestore the backup file on Linux with Transact-SQL
  • Executar uma consulta para verificar a migraçãoRun a query to verify the migration

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.You can also create a SQL Server Always On Availability Group to migrate a SQL Server database from Windows to Linux. Confira sql-server-linux-availability-group-cross-platform.See sql-server-linux-availability-group-cross-platform.

PrerequisitesPrerequisites

Os pré-requisitos a seguir são necessários para concluir esse tutorial:The following prerequisites are required to complete this tutorial:

Criar um backup em WindowsCreate a backup on Windows

Há várias maneiras de criar um arquivo de backup de um banco de dados em Windows.There are several ways to create a backup file of a database on Windows. As etapas a seguir usam o SSMS (SQL Server Management Studio).The following steps use SQL Server Management Studio (SSMS).

  1. Inicie o SQL Server Management Studio em seu computador Windows.Start SQL Server Management Studio on your Windows machine.

  2. Na caixa de diálogo de conexão, insira localhost.In the connection dialog, enter localhost.

  3. No Pesquisador de Objetos, expanda Bancos de Dados.In Object Explorer, expand Databases.

  4. Clique com o botão direito do mouse no banco de dados desejado, selecione Tarefas e, em seguida, clique em Fazer backup... .Right-click your target database, select Tasks, and then click Back Up....

    Use o 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.In the Backup Up Database dialog, verify that Backup type is Full and Back up to is Disk. Observe o nome e a localização do arquivo.Note name and location of the file. Por exemplo, um banco de dados chamado YourDB no SQL Server 2016 terá o caminho de backup padrão igual a C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak.For example, a database named YourDB on SQL Server 2016 has a default backup path of C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Clique em OK para fazer backup do banco de dados.Click OK to back up your database.

Observação

Outra opção é executar uma consulta Transact-SQL para criar o arquivo de backup.Another option is to run a Transact-SQL query to create the backup file. O comando Transact-SQL a seguir executa as mesmas ações que as etapas anteriores para um banco de dados chamado YourDB:The following Transact-SQL command performs the same actions as the previous steps for a database called YourDB:

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

Instalar um shell Bash em WindowsInstall a Bash shell on Windows

Para restaurar o banco de dados, primeiro você precisa transferir o arquivo de backup do computador Windows para o computador Linux de destino.To restore the database, you must first transfer the backup file from the Windows machine to the target Linux machine. Neste tutorial, movemos o arquivo para o Linux por meio de um shell Bash (janela de terminal) em execução no Windows.In this tutorial, we move the file to Linux from a Bash shell (terminal window) running on Windows.

  1. Instale em seu computador Windows um shell Bash compatível com os comandos scp (cópia segura) e ssh (logon remoto).Install a Bash shell on your Windows machine that supports the scp (secure copy) and ssh (remote login) commands. Dois exemplos são:Two examples include:

  2. Abra uma sessão do Bash em Windows.Open a Bash session on Windows.

Copie o arquivo de backup para o LinuxCopy the backup file to Linux

  1. Na sessão do Bash, navegue até o diretório que contém o arquivo de backup.In your Bash session, navigate to the directory containing your backup file. Por exemplo:For example:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
    
  2. Use o comando scp para transferir o arquivo para o computador Linux de destino.Use the scp command to transfer the file to the target Linux machine. 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:The following example transfers YourDB.bak to the home directory of user1 on the Linux server with an IP address of 192.0.2.9:

    scp YourDB.bak user1@192.0.2.9:./
    

    Comando scp

Dica

Há alternativas ao uso do comando scp para transferência de arquivos.There are alternatives to using scp for file transfer. Deve-se usar o Samba para configurar um compartilhamento de rede de SMB entre o Windows e o Linux.One is to use Samba to configure an SMB network share between Windows and Linux. Para obter instruções passo a passo no Ubuntu, confira Como criar um compartilhamento de rede por meio do Samba.For a walkthrough on Ubuntu, see How to Create a Network Share Via Samba. Depois de estabelecido, você pode acessá-lo como um compartilhamento de arquivo de rede do Windows, como \\machinenameorip\share.Once established, you can access it as a network file share from Windows, such as \\machinenameorip\share.

Mova o arquivo de backup antes de restaurarMove the backup file before restoring

Neste ponto, o arquivo de backup está no servidor Linux, no diretório base do seu usuário.At this point, the backup file is on your Linux server in your user's home directory. Antes de restaurar o banco de dados no SQL Server, você deve colocar o backup em um subdiretório de /var/opt/mssql.Before restoring the database to SQL Server, you must place the backup in a subdirectory of /var/opt/mssql.

  1. Na mesma sessão do Bash do Windows, conecte-se remotamente ao seu computador Linux de destino com o comando ssh.In the same Windows Bash session, connect remotely to your target Linux machine with ssh. O exemplo a seguir conecta-se ao computador Linux 192.0.2.9 como o usuário user1.The following example connects to the Linux machine 192.0.2.9 as user user1.

    ssh user1@192.0.2.9
    

    Agora você está executando comandos no servidor Linux remoto.You are now running commands on the remote Linux server.

  2. Entre no modo de superusuário.Enter super user mode.

    sudo su
    
  3. Crie um novo diretório de backup.Create a new backup directory. O parâmetro -p não fará nada se o diretório já existir.The -p parameter does nothing if the directory already exists.

    mkdir -p /var/opt/mssql/backup
    
  4. Mova o arquivo de backup para esse diretório.Move the backup file to that directory. No exemplo a seguir, o arquivo de backup reside no diretório base do user1.In the following example, the backup file resides in the home directory of user1. Altere o comando para corresponder à localização e ao nome do seu arquivo de backup.Change the command to match the location and file name of your backup file.

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

    exit
    

Restaurar seu banco de dados no LinuxRestore your database on Linux

Para restaurar o backup do banco de dados, você pode usar o comando RESTORE DATABASE do TQL (Transact-SQL).To restore the database backup, you can use the RESTORE DATABASE Transact-SQL (TQL) command.

Observação

As etapas a seguir usam a ferramenta sqlcmd.The following steps use the sqlcmd tool. Caso ainda não tenha instalado as ferramentas do SQL Server, confira Instalar as ferramentas de linha de comando do SQL Server em Linux.If you haven't install SQL Server Tools, see Install SQL Server command-line tools on Linux.

  1. No mesmo terminal, inicie o sqlcmd.In the same terminal, launch sqlcmd. O exemplo a seguir conecta-se à instância local do SQL Server com o usuário SA.The following example connects to the local SQL Server instance with the SA user. Insira a senha quando solicitado ou especifique a senha adicionando o parâmetro -P.Enter the password when prompted, or specify the password by adding the -P parameter.

    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).At the >1 prompt, enter the following RESTORE DATABASE command, pressing ENTER after each line (you cannot copy and paste the entire multi-line command at once). Substitua todas as ocorrências de YourDB pelo nome do seu banco de dados.Replace all occurrences of YourDB with the name of your database.

    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.You should get a message the database is successfully restored.

    RESTORE DATABASE pode retornar um erro como no exemplo a seguir:RESTORE DATABASE may return an error like the following example:

    File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL11.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\MSSQL11.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.In this case, the database contains secondary files. 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.If these files are not specified in the MOVE clause of RESTORE DATABASE, the restore procedure will try to create them in the same path as the original server.

    Você pode listar todos os arquivos incluídos no backup:You can list all files included in the backup:

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

    Deve ser exibida uma lista como a seguinte (trazendo apenas as duas primeiras colunas):You should get a list like the one below (listing only the two first columns):

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

    Você pode usar essa lista para criar cláusulas MOVE para os arquivos adicionais.You can use this list to create MOVE clauses for the additional files. Neste exemplo, RESTORE DATABASE é:In this example, the RESTORE DATABASE is:

    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.Verify the restoration by listing all of the databases on the server. O banco de dados restaurado deve constar na lista.The restored database should be listed.

    SELECT Name FROM sys.Databases
    GO
    
  4. Execute outras consultas no banco de dados migrado.Run other queries on your migrated database. O comando a seguir alterna o contexto para o banco de dados YourDB e seleciona linhas de uma de suas tabelas.The following command switches context to the YourDB database and selects rows from one of its tables.

    USE YourDB
    SELECT * FROM YourTable
    GO
    
  5. Quando terminar de usar o sqlcmd, digite exit.When you are done using sqlcmd, type exit.

  6. Quando terminar de trabalhar na sessão ssh remota, digite exit novamente.When you are done working in the remote ssh session, type exit again.

Próximas etapasNext steps

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.In this tutorial, you learned how to back up a database on Windows and move it to a Linux server running SQL Server. Você aprendeu a:You learned how to:

  • Usar o SSMS e o Transact-SQL para criar um arquivo de backup em WindowsUse SSMS and Transact-SQL to create a backup file on Windows
  • Instalar um shell Bash em WindowsInstall a Bash shell on Windows
  • Usar o comando scp para mover arquivos de backup do Windows para o LinuxUse scp to move backup files from Windows to Linux
  • Usar o comando ssh para conectar-se remotamente ao seu computador LinuxUse ssh to remotely connect to your Linux machine
  • Relocar o arquivo de backup para se preparar para a restauraçãoRelocate the backup file to prepare for restore
  • Usar o sqlcmd para executar comandos Transact-SQLUse sqlcmd to run Transact-SQL commands
  • Restaurar o backup do banco de dados com o comando RESTORE DATABASERestore the database backup with the RESTORE DATABASE command
  • Executar a consulta para verificar a migraçãoRun the query to verify the migration

Em seguida, explore outros cenários de migração para o SQL Server em Linux.Next, explore other migration scenarios for SQL Server on Linux.