SQL Server em um estado de confusão: o banco de dados existe ou não?

8

Tem um problema realmente estranho e irritante. De alguma forma, a instância do SQL Server 2008 R2 em execução no nosso servidor ficou um pouco corrompida.

Primeiro, percebemos que o banco de dados que criamos ontem estava ausente. Então, olhamos em volta e descobrimos que ele ainda estava lá, mas separado. Então, tentamos anexar o mdf, mas recebemos uma mensagem que era algo parecido The file is currently in use.

Eu pensei que isso era estranho, então reiniciei o SQL Server. A mesma coisa ... ok, hora de medidas drásticas ... então, eu parei o serviço, fechei o zíper do mdf, iniciei o serviço, descompactei o zíper e tentei restaurá-lo. A mensagem acima desapareceu, mas então eu recebi:

Não é possível anexar um banco de dados com o mesmo nome que um banco de dados existente

Ai. Claro que não está aparecendo no explorador de banco de dados, então não faço ideia do que está acontecendo ... último recurso:

DROP DATABASE [DatabaseName]

Claro que não funcionou .. isso me diz que o banco de dados não existe. Então, eu estou preso ... em um ponto, o SQL Server acha que o banco de dados existe e, em outro ponto, acha que o banco de dados não existe ... obviamente está em um estado de confusão.

Alguém viu isso antes? Tem alguma idéia de como corrigi-lo?

Matt
fonte
Então os arquivos físicos não estão mais lá, certo? Você ainda vê seu banco de dados em sys.databases?? Por exemplo, SELECT * FROM sys.databasesainda lista seu banco de dados?
21313 Marc13
@Josien thansk pela dica .. eu colocá-lo lá também
Matt
@marc_s Tentei fazer isso agora, mas ele não está mostrando quando eu executar essa consulta
Matt
O que SELECT name, user_access_desc, state_desc FROM sys.databasesrevela?
Mark Storey-Smith
Por que diabos alguém votaria contra este post? Alguém poderia por favor elaborar? Sério ...
Matt

Respostas:

5

Certo .. eu descobri isso .. alguns palhaços aqui (que não se responsabilizam por isso) renomearam o db para que seu nome no SSMS seja diferente dos nomes dos arquivos mdf e ldf .. e não um pouco diferente .. . completamente diferente. RI MUITO. Obrigado a todos por suas sugestões úteis de qualquer maneira.

Matt
fonte
4
Para estar do lado seguro, negue a permissão ALTER no banco de dados a todos, exceto 'sa', altere a senha 'sa' e seja seletivo ao fornecer a senha aos 'palhaços'
Carol Baker West
4

Se você não tivesse permissão para ver o banco de dados, esses seriam exatamente os sintomas. O banco de dados não seria exibido nas suas visualizações. Tem certeza de que não acabou de zapear os arquivos de um banco de dados aos quais você não teve acesso? Você está operando como administrador de sistemas?

Atualizar


O banco de dados foi desanexado ou offline ? Quando você diz do So, we looked around and found that it was still there, but detachedque exatamente está falando? Onde você olhou, o que encontrou? Identificar que um banco de dados foi 'desanexado' (em vez de, por exemplo, descartado) não é trivial.

Remus Rusanu
fonte
Eu sou de fato um sysadmin
Matt
2
Desde que você mencionou, eu tenho um script no meu blog que detecta arquivos banco de dados desanexado nos dados padrão pastas / log: voluntarydba.com/post/2012/08/21/...
Jon Seigel
Obrigado, tentarei isso mais tarde, quando estiver no escritório.
Matt
@ JonSeigel, legal, mas infelizmente isso não apareceu para mim. Tentei outra coisa também .. reinicie o servidor e crie um novo banco de dados com esse nome .. não me deixaria fazê-lo .. muito irritante. Acho que vou ter que ignorar essa situação e criar um novo banco de dados com um nome diferente.
Matt
3

Consulta sys.databases. Pode ser que o banco de dados tenha sido criado com um espaço no final de seu nome. Execute o código abaixo e observe que você só pode criar um dos bancos de dados e não importa qual deles você criar primeiro, você pode apenas criar esse.

create database [test]
create database [test ]
Mrdenny
fonte
Eu acho que isso é um bug, certo?
AK
Provavelmente não. Estou assumindo que o SQL está fazendo um TRIM no nome do banco de dados quando está verificando se o valor existe. Isso teria que ser intencional, provavelmente por design.
mrdenny
@ Mrdenny, obrigado, mas não há ajuda lá .. o banco de dados não aparece, com qualquer variação de nome, e há apenas um punhado de bancos de dados nesse servidor, então eu o localizaria imediatamente se estivesse lá . Obrigado de qualquer forma
Matt
0

Execute 'DBCC CHECKDB' no master, no msdb e no banco de dados para ver o que diz. Pode ser necessário colocar o sistema no modo de usuário único para que o dbcc seja executado no modo de reparo com perda de dados. Ou apenas restaure os backups do master e do msdb, conforme apropriado.

Ian P
fonte
Execução que no master e msdb não ajudou e eu não pode experimentá-lo no próprio db, porque eu não posso ver o db no estúdio de gerenciamento de tudo ...
Matt
0

Para mim, isso foi resolvido com a atualização de bancos de dados. Fiz uma recuperação malsucedida e vi o banco de dados que não foi excluído com a mesma mensagem de erro: "O banco de dados não existe no servidor".

Raduga
fonte
2
Você pode elaborar como exatamente você realiza a "atualização de bancos de dados".
mustaccio
0

Eu estava tendo esse mesmo problema usando o SQL Server 2008r2.

Eu estava tentando duplicar um banco de dados (versionamento foo) e acabei confundindo o servidor SQL. O SQL Server Management Studio achou que o banco de dados existia (o MDF e o LDF existiram), mas o banco de dados mestre não achou que o banco de dados existia (não apareceu no sys.databases)

O truque era renomear os arquivos MDF e LDF, criar o banco de dados a partir do SQL create database [db name here], excluir o banco de dados e finalmente anexar os arquivos MDF e LDF de antes.

John Pycroft
fonte