Erro de restauração do SQL Server - acesso negado

167

Criei um banco de dados na minha máquina local e, em seguida, fiz um backup chamado tables.bakde tabela DataLabTables.

Mudei esse backup para uma máquina remota sem essa tabela e tentei fazer uma restauração, mas obtive o seguinte erro:

System.Data.SqlClient.SqlError: o sistema operacional retornou o erro '5 (Acesso negado.)' Ao tentar 'RestoreContainer :: ValidateTargetForCreation' em 'c: \ Arquivos de Programas \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables .mdf '.

Como faço para corrigir meus direitos, se esse é o problema?

cdub
fonte

Respostas:

540

Acabei de ter esse problema com o SQL Server 2012.

Acontece que tudo o que eu precisava fazer era marcar a caixa 'Realocar todos os arquivos para a pasta' na seção 'Arquivos':

insira a descrição da imagem aqui

(Clique para ver a imagem em tamanho real)

Obviamente, isso pressupõe que você tenha a versão correta do SQL Server instalada.

Exílio
fonte
13
Trabalhou para mim também. Alguém pode explicar o porquê ?
magnattic
3
Você também pode compartilhar como isso pode ser feito via script em vez de interface do usuário?
FMFF 01/07
9
Eu tive esse problema com 2014, mesma correção.
DaneEdw
3
Esta foi também a solução para mim ao fazer backup de SQL Express e restaurar em pleno SQL Server
tarrball
11
Eu preciso te dar um abraço. Agora, falando sério, eu estava prestes a dizer não a um cliente, sua resposta salvou meu projeto.
Marco Scabbiolo 10/01
30

Na mensagem de erro, ele diz que há um erro ao validar o target ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) da sua operação de restauração.

Isso soa como:

a) esse arquivo já existe (porque você já o restaurou anteriormente) e está sendo usado pelo SQL Server

ou

b) esse diretório não existe

Na sua pergunta, você mencionou que criou um backup para essa tabela - não é assim que os backups do SQL Server funcionam. Esses backups são sempre o banco de dados inteiro (ou pelo menos um ou vários grupos de arquivos desse banco de dados).

Meu palpite é: você já restaurou esse banco de dados anteriormente e agora, após uma segunda restauração, não marcou a caixa de seleção "Substituir banco de dados existente" no seu assistente de restauração - portanto, o arquivo existente não pode ser substituído e a restauração falha.

O usuário que está executando a restauração no servidor remoto obviamente não tem acesso a esse diretório no servidor remoto.

C:\program files\.... é um diretório protegido - usuários normais (não administradores) não têm acesso a esse diretório (e seus subdiretórios).

Solução mais fácil: tente colocar o arquivo BAK em outro lugar (por exemplo C:\temp) e restaure-o a partir daí

marc_s
fonte
Tentei sob C: \ temp, mas o erro ainda é o mesmo que acima, com o mesmo caminho que eu mencionei primeiro o que é estranho
cdub
Eu clique direito sobre bancos de dados no SQL Server Management Studio, em seguida, Tarefas -> Restaurar
cdub
1
@marc_s thx, esqueci de editar as opções, pois não há diretório para esse arquivo ... não é ... MSSQL \ DataLabTables.mdf, mas sim ... MSSQL \ Data \ DataLabTables.mdf
cdub
2
@marc_s: pequeno comentário sobre a parte "e está sendo usada pelo SQL Server" da opção A listada acima: Acontece que um RESTOREcomando padrão falha se o arquivo existir, mesmo que não esteja sendo usado pelo SQL Server (por exemplo, o MDF / Os arquivos LDF permanecem no local após uma desanexação anterior). Eu me deparei com isso em uma implementação de envio de logs personalizada baseada em T-SQL para uma grande migração de centenas de bancos de dados nas últimas semanas. Não sei se a mensagem de erro foi "acesso negado", pode ter sido algo menos específico.
Tao
2
Eu tive que renomear manualmente os arquivos MDF / LDF existentes antes de poder restaurar por meio de um backup - verificar 'Substituir' não era suficiente.
21714 Jamie Keeling
26

Eu estava tendo o mesmo problema. Aconteceu que meus serviços SQL Servere estavam sendo executados na conta que não tinha acesso de gravação para executar a restauração do backup.SQL Server Agentlogon asNetwork Services

Eu mudei esses dois serviços para fazer logon como Local System Accounte isso corrigiu o problema.

Pulga
fonte
Isso não é uma boa ideia. Ele mascara o problema real, que é o local do arquivo que você está tentando restaurar e não é o que você pretende.
Decouet 11/10
2
Meu serviço do SQL Server estava em execução no "NT Service \ MSSQLSERVER", adicionando permissões para esse usuário na pasta de dados e log que funcionou para mim.
Tim Tim
Tudo bem, isso ajudou a me
Aliaksei Zhukau
9

Recentemente, enfrentei esse problema com o SQL 2008 R2 e a solução abaixo funcionou para mim:

1) Crie um novo banco de dados com o mesmo nome que você está tentando restaurar. 2) Durante a restauração, use o mesmo nome que você usou acima e, nas opções, clique na opção substituir

Você pode tentar o exposto acima se as outras soluções não funcionarem.

Devin
fonte
6

O criador do backup tinha o MSSql versão 10 instalado; portanto, quando ele fez o backup, ele também armazena o caminho do arquivo original (para poder restaurá-lo no mesmo local), mas eu tinha a versão 11, por isso não foi possível encontrar o diretório de destino.

Alterei o diretório do arquivo de saída para C: \ Arquivos de programas \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \, e ele foi capaz de restaurar o banco de dados com êxito.

Fonte

Philluminati
fonte
6

Eu tive um problema parecido. Tentei restaurar um arquivo .bak de 2005 e recebi exatamente o mesmo erro. Selecionei a opção de substituição também sem sucesso.

minha solução foi conceder ao usuário SQL acesso ao diretório em questão, indo para a pasta e editando os direitos de acesso através da tela de propriedades.

martijn
fonte
2

Também perdi algumas horas com esse problema. conseguiu:

"acesso negado" no meu caso realmente significava "acesso negado". A conta de usuário do mssqlstudio no meu dispositivo Windows NÃO tinha controle total da pasta especificada na mensagem de erro. eu dei controle total. o acesso não foi mais negado e a restauração foi bem-sucedida.

por que a pasta foi trancada para o estúdio? quem sabe ? Eu tenho perguntas suficientes para lidar como é, sem tentar responder mais.

abraham tio
fonte
1

Eu tive esse problema, entrei como administrador e o problema foi corrigido.

Rob Smith
fonte
Trabalhou para mim, bem como para o v17 SSMS
Nandolcs
0

Outro cenário pode ser a existência de vários caminhos de banco de dados. Primeiro, anote o caminho em que novos bancos de dados estão sendo armazenados. Portanto, se você criar um novo banco de dados vazio e Tasks/Restorecriar, verifique se o caminho que a restauração está tentando usar é o mesmo diretório em que o banco de dados vazio foi criado. Mesmo se o caminho de restauração for legal, você ainda terá o acesso negado erro se não for o caminho atual com o qual você está trabalhando. Muito fácil de detectar quando o caminho não é legal, muito mais difícil de detectar quando o caminho é legal, mas não o atual.

demongolem
fonte
0

Desculpe, porque não posso comentar ...

Eu tive o mesmo problema. No meu caso, o problema estava relacionado à tentativa de restauração em uma pasta antiga do servidor sql (que existia no servidor). Isso ocorre devido ao backup antigo do servidor sql (ou seja, Backup do SQL Server 2012) restaurado em um novo servidor sql (SQL Server 2014). O problema real não é muito diferente da resposta @marc_s. Enfim, mudei apenas a pasta de destino para a nova pasta de dados do SQL Server.

bubi
fonte
0

Esta pode não ser a melhor solução, mas eu estava tentando fazer a restauração no SQL Server 2005, mas mudei para o SQL Server 2008 e funcionou.

alansiqueira27
fonte
0

Tem um problema como este. Erro causado pela compactação habilitada nas pastas do SQL Server.

Arman Hayots
fonte
0

Frnds ... Eu tive o mesmo problema ao restaurar o banco de dados e tentei todas as soluções, mas não foi possível resolver. Então eu tentei reinstalar o SQL 2005 e o problema foi resolvido. Na verdade, da última vez que esqueci de verificar a opção de personalização enquanto instalava o SQL .. Ele vem duas vezes durante a instalação e eu o verifiquei apenas para aqueles ..

Nishant
fonte
0

No meu caso - tive que verificar novamente o caminho de backup do banco de dados de onde estava restaurando. Eu o havia restaurado anteriormente de um caminho diferente quando o fiz pela primeira vez. Corrigi o caminho de backup para usar o caminho de backup que usei na primeira vez e funcionou!

SitecoreSyed
fonte
0

Acabei criando novas pastas para Dados e Logs e funcionou corretamente, deve ter sido um problema de permissão de pasta / arquivo.

reggaeguitar
fonte
0

Isso também acontece se os caminhos estiverem corretos, mas a conta de serviço não é a proprietária dos arquivos de dados (ainda assim, ela possui direitos suficientes para acesso de leitura / gravação). Isso pode ocorrer se as permissões dos arquivos foram redefinidas para corresponderem às permissões da pasta (é claro, enquanto o serviço foi parado).

A solução mais fácil nesse caso é desanexar cada banco de dados e anexá-lo novamente (porque, ao anexar, o proprietário é alterado para ser a conta de serviço).

Razvan Socol
fonte
-1

Tente o seguinte:

Na janela do assistente Restaurar banco de dados, vá para a guia Arquivos, desmarque a caixa de seleção "Realocar todos os arquivos para a pasta" e altere o destino da restauração de C: para outra unidade. Em seguida, continue com o processo de restauração regular. Será restaurado com sucesso.

Raja Sekhar
fonte
-1

Eu tive o mesmo problema, mas usei o sql server 2008 r2, você deve verificar as opções e verificar os caminhos em que o sql salvará os arquivos .mdf e .ldf, deve selecionar o caminho da instalação do servidor sql. Resolvi meu problema com isso, espero que ajude você.

Edgar Castillo
fonte
-2

Em seguida, tente movê-lo para uma subpasta em C :, mas verifique se o usuário tem todos os direitos sobre a pasta que você usa.

sqlKob
fonte