Estou trabalhando com SQL-Server, usando o SQL-Server Management Studio (SSMS).
Para executar a restauração de um backup, criei um login do SQL Server via SSMS, chamado PORT-DDM\SQLEXPRESS
, que é a maneira típica de se conectar a um banco de dados SQL Server.
Também criei um segundo, chamado PORT-DDM\SQLEXPRESS01
(onde PORT-DDM
está o nome do meu PC), e agora gostaria de restaurar um backup da PORT-DDM\SQLEXPRESS
instância para a PORT-DDM\SQLEXPRESS01
instância . Peguei o PORT-DDM\SQLEXPRESS
backup e o armazenei no meu diretório local C:\Temp_Folder\<filename>.bak
, mas ao executar a ação de restauração, recebo a seguinte mensagem de erro:
===================================
Restore of database '<Prod>_<Customer>' failed. (Microsoft.SqlServer.Management.RelationalEngineTasks)
------------------------------
Program Location:
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.Perform(ITaskExecutionContext context)
at Microsoft.SqlServer.Management.TaskForms.TaskExecutionManager.ExecuteTaskSequence(ISfcScriptCollector collector)
===================================
System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Customer>.mdf'. (Microsoft.SqlServer.SmoExtended)
------------------------------
For help, click: https://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=16.100.47021.0&LinkId=20476
------------------------------
Program Location:
at Microsoft.SqlServer.Management.Smo.RestorePlan.Execute()
at Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreDatabaseTaskFormComponent.PerformTask(ITaskExecutionContext context)
(O link mencionado parece estar inativo.)
Como posso prosseguir?
Ah, esqueci de mencionar: o local onde meu backup está localizado é acessível para todos os usuários do meu PC:
Eu dei controle total a todos, usando icalcs
. Agora estou preso porque o seguinte arquivo está sendo usado pelo SQL-Server: C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\<Prod>_<Cust>.mdf
.
Para evitar isso, reiniciei minha sessão do SQL Server e até mesmo meu PC inteiro, mas o problema persiste.
Conforme solicitado, a imagem da tela "restaurar banco de dados":
Isto está se tornando um pesadelo sangrento :
- Primeiro, recebo mensagens de erro informando que ele precisa de acesso de administrador para os arquivos.
- Então ele reclama que os arquivos estão em uso, então tenho que reiniciar meu computador.
- Depois ele reclama que há outros arquivos para os quais ele precisa de direitos de administrador.
- Depois que isso é resolvido, ele reclama novamente que os arquivos estão em uso, então preciso reiniciar meu computador novamente .
- Por fim, ele diz: "Mas você não pode fazer isso: você está restaurando um banco de dados em seu local original".
=> Essa última coisa é a razão exata pela qual criei o login "SQLExpress 01 ": para poder ter diferentes instâncias dos mesmos bancos de dados: uma para testes de tempo de execução e uma para restaurar os backups, recuperados dos sites do cliente. Geralmente essa última coisa está funcionando bem, mas agora estou lidando com um cliente cujo servidor de banco de dados está inacessível, então estou usando "Gerar script" para obter o ±backup. A ideia era fazer outro backup do meu computador (sob o login "SQLEXPRESS"), restaurar sob o login "SQLEXPRESS01" e usá-lo para o cenário "Gerar script" mencionado.
Quando você tem um arquivo de backup, o arquivo contém os locais dos arquivos de banco de dados enquanto eles estavam em execução na instância/an.
Por exemplo, seu banco de dados em sua
...\SQLEXPRESS
instância pode ter os arquivos de banco de dados localizados nos seguintes diretórios:Essas informações também são armazenadas em qualquer arquivo de backup que você criar para um banco de dados na instância e podem ser recuperadas executando o seguinte comando:
O comando mostrará o local original dos arquivos *.mdf e *.ldf.
Para restaurar o arquivo de backup para sua segunda instância, você terá que transferir
MOVE
os arquivos lógicos contidos no banco de dados para o novo local da sua segunda instância.Vamos supor que seus arquivos de banco de dados para a segunda instância do SQLExpress estejam localizados aqui:
Ao executar a GUI no seu SSMS e clicar nos comandos juntos, é importante alterar o local do arquivo *.MDF e *.LDF para o novo subdiretório.
Abra a GUI para RESTORE
Selecione o
C:\Temp_Folder\<filename>.bak
arquivoNa seção Arquivos da GUI de restauração no SSMS, certifique-se de alterar o local do arquivo físico (Restaurar como) para o novo diretório SQLEXPRESS01. (por exemplo, captura de tela)

Gere o script de restauração clicando no botão "Script" na GUI e verifique se o local do arquivo está correto no script.

Feche a GUI e execute o script (você aprende muito aqui).
Boa sorte.
O motivo pelo qual você pode estar recebendo uma
5. Access denied
mensagem pode serSQLEXPRESS
diretório da sua primeira instância, ao qual você não tem acesso com a segunda conta.SQLEXPRESS01
, mas não alterou o local de restauração para apontar para os diretórios de dados da sua segunda instância (por exemploC:\SQLServer\MSSQL15.SQLEXPRESS01\DATA\
)Adicionar o
MOVE
comando ao script de restauração por meio da GUI no SSMS (também conhecido como: atribuir os diretórios corretos na GUI para apontar, por exemploC:\SQLServer\MSSQL15.SQLEXPRESS01\DATA\
) garantirá que você esteja usando os diretórios corretos e poderá evitaraccess denied
erros.