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 em Windows
- Mover o arquivo de backup para Linux 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:
Computador Windows com o seguinte:
- SQL Server instalado.
- SQL Server Management Studio instalado.
- Banco de dados de destino a ser migrado.
Computador Linux com o seguinte instalado:
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).
Inicie o SQL Server Management Studio em seu computador Windows.
Na caixa de diálogo de conexão, insira localhost.
No Pesquisador de Objetos, expanda Bancos de Dados.
Clique com o botão direito do mouse no banco de dados desejado, selecione Tarefas e, em seguida, clique em Fazer backup....
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 2016 terá o caminho de backup padrão igual a
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Selecione OK para fazer backup do banco de dados.
Observação
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\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 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.
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:
- O Subsistema Windows para Linux (Windows 10)
- O Shell Bash do Git (https://git-scm.com/downloads)
Abra uma sessão do Bash em Windows.
Copie o arquivo de backup para o Linux
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\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
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:./
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 instruções passo a passo no Ubuntu, confira Como criar um compartilhamento de rede por meio do Samba. 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, como se fosse de propriedade do usuário mssql
e do grupo mssql
. Se você estiver procurando alterar o local de backup padrão, consulte o artigo Configurar com mssql-conf.
Na mesma sessão do 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 o usuário user1.
ssh user1@192.0.2.9
Agora você está executando comandos no servidor Linux remoto.
Entre no modo de superusuário.
sudo su
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
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/
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 TQL (Transact-SQL).
Observação
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 do SQL Server em Linux.
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
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 deYourDB
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\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. Se esses arquivos não forem especificados na cláusula
MOVE
deRESTORE 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 a seguinte (trazendo apenas as duas primeiras colunas):
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. 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
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
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
Quando terminar de usar o sqlcmd, digite
exit
.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.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de