1
resposta

Erro ao restaurar o banco AdventureWorks

Estou usando o SQL Server 2019 Developer em Docker.

Tentei com os bancos AdventureWorks2014, AdventureWorks2017 e AdventureWorks2019

Copiei os arquivos para o volume do docker onde está as outras tabelas: /var/opt/mssql/data/AdventureWorks2017.bak

Ao tentar executar (tanto via interface gráfica quanto via script o erro é o mesmo). Segue o script:

USE [master]
RESTORE DATABASE [AdventureWorks2017] 
FROM  DISK = N'/var/opt/mssql/data/AdventureWorks2017.bak' 
WITH  FILE = 1
    ,  MOVE N'AdventureWorks2017' TO N'/var/opt/mssql/data/AdventureWorks2017.mdf'
    ,  MOVE N'AdventureWorks2017_log' TO N'/var/opt/mssql/data/AdventureWorks2017_log.ldf'
    ,  NOUNLOAD,  STATS = 5
GO

Segue o Erro:

Msg 3634, Level 16, State 1, Line 2
The operating system returned the error '2(The system cannot find the file specified.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on '/var/opt/mssql/data/AdventureWorks2017.mdf'.
Msg 3156, Level 16, State 5, Line 2
File 'AdventureWorks2017' cannot be restored to '/var/opt/mssql/data/AdventureWorks2017.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 3634, Level 16, State 1, Line 2
The operating system returned the error '2(The system cannot find the file specified.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on '/var/opt/mssql/data/AdventureWorks2017_log.ldf'.
Msg 3156, Level 16, State 5, Line 2
File 'AdventureWorks2017_log' cannot be restored to '/var/opt/mssql/data/AdventureWorks2017_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 2
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
1 resposta

Olá Leonardo, tudo bem?

Peço desculpas pela demora no retorno.

Aparentemente esse erro ocorreu pelo fato de o SQL Server não ter conseguido identificar um local válido para os arquivos.

Para tentar resolver esse problema, no momento de executar o comando de restauração do arquivo BAK, você precisa indicar um diretório válido onde os arquivos MDF e de LOG serão armazenados na sua máquina.

Então o comando para restaurar o arquivo indicando um diretório válido onde os arquivos MDF e de LOG serão armazenados é:

RESTORE DATABASE Banco_de_Dados
   FROM DISK = 'diretório_do_Arquivo/arquivo.bak'
   WITH MOVE 'Banco_de_Dados' TO 'diretório_para_Salvar_Arquivo/Banco.mdf',
        MOVE 'Banco_de_Dados_Log' TO 'diretório_para_Salvar_Arquivo/Banco_log.ldf'
GO

Qualquer dúvida é só falar!