O banco de dados não pode ser atualizado porque é somente leitura ou possui arquivos somente leitura. Torne o banco de dados ou arquivos graváveis ​​e execute novamente a recuperação

8

Recebi um arquivo de banco de dados e as instruções para carregá-lo são para instalar o SQL Server 2005 e anexá-lo usando o SQL Server Management Studio.

Depois de instalar tudo, tentei anexar o arquivo MDF, mas ele me diz:

a pesquisa de diretório para o arquivo "D: {nome_da_pasta} {nome do arquivo} .LDF" falhou com o erro 21 do sistema operacional (erro não encontrado)

Um arquivo LDF não veio com o banco de dados; portanto, presumivelmente, ele deve ser gerado automaticamente.

Agora, a unidade D é onde está a minha unidade de CD, então não encontrará nada lá. Tampouco terá sorte tentando criar alguma coisa lá.

  1. Por que ele está tentando procurar um arquivo de log em um caminho específico? Por que não onde está o arquivo de banco de dados?

  2. Como posso anexar esse banco de dados?

Percebi que quando seleciono um banco de dados para anexar, três entradas aparecem em "detalhes do banco de dados". um MDF, NDF e LDF. O "caminho do arquivo atual" do LDF aponta para o caminho da unidade D acima, então eu o removi.

Desta vez, quando clico em "OK", recebo uma mensagem de erro diferente:

O banco de dados não pode ser atualizado porque é somente leitura ou possui arquivos somente leitura.
Torne o banco de dados ou arquivos graváveis ​​e execute novamente a recuperação.

Falha na ativação do arquivo. O nome físico D: {folder} {file} .LDF pode estar incorreto.
Novo arquivo de log "..." foi criado. (Microsoft SQL Server, Erro: 3415)

Portanto, agora ele cria um novo arquivo de log na mesma pasta que o arquivo de banco de dados, o que é ótimo, mas parece que há problemas de segurança.

Informação adicional:

  • As instruções exigem que eu use o nome de login "sa", que parece ser a conta sysadmin. Estou conectado à minha instância do SQL Server usando esse logon.

  • Eu verifiquei as propriedades do arquivo que não são somente leitura. O diretório também não é somente leitura. Todas as ACLs são permitidas.

  • Não consigo anexar o banco de dados. Quando tento anexá-lo, ele lança uma mensagem de erro com "falha na conexão do banco de dados".

  • Fechar o SSMS e reabri-lo como administrador não fez diferença.

  • select SERVERPROPERTY('ProductVersion')retorna 9.00.4035.00. Há outro arquivo que vem com o banco de dados chamado "dbdata.ini", que diz "IsSql2000 = 1", de modo que provavelmente ele deve ser carregado no SQL Server 2000. Vou ver se consigo fazê-lo funcionar no 2000.

MxLDevs
fonte

Respostas:

8

Este não é um problema de acesso. O problema é que você está anexando o banco de dados a uma versão superior do SQL Server que a instância à qual .mdffoi originalmente anexado e é somente leitura. O SQL Server está tentando atualizar o banco de dados como parte da conexão e não pode porque o banco de dados está no modo somente leitura.

Se o seu banco de dados estiver no READ_ONLY(que parece ser o caso com base nas suas mensagens de erro), você precisará de todos os arquivos (log e dados) para anexá-lo de acordo com a documentação da Technet . Se você observar a FOR ATTACHcláusula, ela explicitamente descreve que:

... para um banco de dados somente leitura, o log não pode ser reconstruído porque o arquivo principal não pode ser atualizado. Portanto, quando você anexa um banco de dados somente leitura cujo log não está disponível, você deve fornecer os arquivos ou arquivos de log na FOR ATTACHcláusula

Você precisa do acompanhamento .ldfpara o banco de dados. Entraria em contato com quem fornecesse o banco de dados e pediria que fornecessem os arquivos .mdfe .ldf. Em seguida, você pode anexá-lo com a seguinte sintaxe:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

O READ_ONLYstatus não pode ser removido do banco de dados sem anexá-lo porque está armazenado nos metadados do banco de dados. Para alterá-lo, o banco de dados precisa estar online e anexado.

Outra alternativa é solicitar um backup do banco de dados. Você pode solucionar alguns desses problemas com mais facilidade se estiver restaurando o banco de dados em vez de anexar.

Mike Fal
fonte
11
Usando LOG ONcom a correspondência ldfnão resolver o problema para mim
Mugen
25

Acabei de encontrar um post que respondeu a esta pergunta:

Isso pode não funcionar em todos os casos, mas eu estava tentando instalar o banco de dados de pesquisa semântica e obtive o mesmo erro.

Você precisa executar o SQL Server Management Studio como administrador e ele funciona.

Data Juggler
fonte
9
  1. Abra o meu computador.
  2. Localize a pasta principal onde você manteve os arquivos ".mdf" e ".ldf".
  3. Clique com o botão direito na pasta e clique em "Propriedades".
  4. Na janela de propriedades, clique em "Segurança"
  5. Clique no botão "Editar"
  6. Habilite "Ler e executar", "Ler", "Escrever" para os usuários listados e aplique as alterações nas seguintes pastas até os arquivos do banco de dados.
  7. Tente anexar o arquivo ".mdf"
Touhid Mustakhim. M. J
fonte
obrigado, minhas janelas antigas se foram e eu acho que esses arquivos bloqueados por esse sistema operacional. mas só preciso alterar a permissão
sabre tabatabaee yazdi -
1

Clique direito no .mdfe .ldfarquivos, um de cada vez e clique em 'Propriedades', em seguida, na parte inferior, onde ele diz que 'este arquivo veio de outro computador e pode ser bloqueado para ajudar a proteger este computador' clique no botão Desbloquear.

Em seguida, clique com o botão direito do mouse em -> propriedades, -> guia segurança -> botão Editar e selecione 'usuários' e dê permissão de controle total.

Subodh Pradhan
fonte
1

No meu caso, a resolução foi fazer login no SSMS com o modo de autenticação do Windows em vez do usuário sql que possui função sysadmin. Apenas certifique-se de que o usuário que você usou no modo de autenticação do Windows tenha uma permissão adequada (meu caso foi sysadmin) Meu palpite é que o usuário sql não tem uma permissão adequada. (Encontro esse problema ao migrar / copiar mdf e ldf de diferentes máquina)

Ben F
fonte
0

Não há permissões no nosso caso, era a versão do SSMS!

(foi em 2012 localmente que obtivemos o erro, mas funcionou quando usamos o SSMS 17+ a partir de uma caixa remota)

Bigpa
fonte
-1

Eu também tive esse problema. Ajudei meu cliente reiniciando o serviço SQL e consegui anexar o MDF por procedimento normal.

Chadwick Powell
fonte
-2

1) Abra o Sql Server Configuration Manager

2) Selecione Sql Server Services (painel esquerdo)

3) Clique duas vezes em seu SqlServer (painel direito)

4) Selecione a guia Logon

5) Selecione o botão de opção embutido e altere o sistema local ou o serviço de rede na caixa de combinação.

6) Clique em Ok.

7) Anexe arquivo mdf no gerenciador de servidor sql.

Ali Osman Yavuz
fonte
-2

Seu serviço do SQL Server provavelmente está sendo executado na conta NT Service \ MSSQLServer . Mudar o sistema local lhe dará acesso.

Provavelmente, é melhor criar um usuário e conceder a ele permissões completas para a pasta em que os arquivos estão.

kwiboo
fonte