SQL Server en un estado de confusión: ¿existe la base de datos o no?

8

Tengo un problema realmente extraño y molesto. De alguna manera, la instancia de SQL Server 2008 R2 que se ejecuta en nuestro servidor se ha dañado un poco.

Primero, notamos que faltaba la base de datos que creamos ayer. Entonces, miramos a nuestro alrededor y descubrimos que todavía estaba allí, pero separado. Entonces, tratamos de adjuntar el mdf pero recibimos un mensaje que era algo así The file is currently in use.

Pensé que era extraño, así que reinicié SQL Server. Lo mismo ... bueno, es hora de tomar medidas drásticas ... así que detuve el servicio, comprimí el mdf, comencé el servicio, lo descomprimí y luego intenté restaurarlo. El mensaje anterior desapareció, pero luego obtuve:

No se puede adjuntar una base de datos con el mismo nombre que una base de datos existente

Ay. Por supuesto, no se muestra en el explorador de bases de datos, así que no tengo idea de lo que está pasando ... último recurso:

DROP DATABASE [DatabaseName]

Por supuesto, eso no funcionó ... eso me dice que la base de datos no existe. Entonces, estoy atascado ... en un momento, SQL Server cree que la base de datos existe y en otro punto cree que la base de datos no existe ... obviamente está en un estado de confusión.

¿Alguien ha visto esto antes? ¿Tienes alguna idea sobre cómo solucionarlo?

Mate
fuente
Entonces los archivos físicos ya no están allí, ¿verdad? ¿Todavía ves tu base de datos en sys.databases? Por ejemplo, ¿ SELECT * FROM sys.databasestodavía enumera su base de datos?
marc_s
@Josien thansk por el consejo ... Lo puse allí también
Matt
@marc_s Lo intenté ahora, pero no se muestra cuando ejecuto esa consulta
Matt
¿Qué SELECT name, user_access_desc, state_desc FROM sys.databasesrevela?
Mark Storey-Smith
¿Por qué alguien menospreciaría esta publicación? ¿Podría alguien por favor elaborar? En serio ...
Matt

Respuestas:

5

Correcto ... lo descubrí ... algún payaso aquí (que no lo reconocerá) cambió el nombre del db para que su nombre en SSMS sea diferente a los nombres de los archivos mdf y ldf ... y no solo un poco diferente ... . completamente diferente. Jajaja Gracias a todos por sus sugerencias útiles de todos modos.

Mate
fuente
44
Para estar seguro, niegue el permiso ALTER en la base de datos a todos excepto 'sa', cambie la contraseña 'sa' y sea selectivo al dar la contraseña a 'payasos'
Carol Baker West
4

Si no tiene permiso para ver la base de datos, estos serían exactamente los síntomas. La base de datos no se mostrará en sus vistas. ¿Está seguro de que no solo eliminó los archivos de una base de datos a la que no tenía acceso? ¿Estás operando como administrador de sistemas?

Actualizar


¿La base de datos estaba desconectada o desconectada ? ¿Cuándo dices de So, we looked around and found that it was still there, but detachedqué estás hablando exactamente? ¿Dónde miraste, qué encontraste? Identificar que una base de datos fue 'separada' (en lugar de, por ejemplo, descartada) no es trivial.

Remus Rusanu
fuente
De hecho, soy un administrador de sistemas
Matt
2
Desde que lo mencionó, tengo un script en mi blog que detecta archivos de base de datos sin adjuntar en las carpetas predeterminadas de datos / registro: voluntariodba.com/post/2012/08/21/…
Jon Seigel
Gracias, lo intentaré más tarde cuando esté en la oficina.
Matt
@ JonSeigel, agradable, pero desafortunadamente eso no me resultó nada. Intenté algo más también ... reinicie el servidor y luego cree un nuevo DB con ese nombre ... no me dejaría hacerlo ... muy molesto. Creo que tendré que ignorar esta situación y crear una nueva base de datos con un nombre diferente.
Matt
3

Consulta sys.databases. Puede ser que la base de datos se haya creado con un espacio al final de su nombre. Ejecute el siguiente código y observe que solo puede crear una de las bases de datos, y no importa cuál cree primero, solo puede crear esa.

create database [test]
create database [test ]
mrdenny
fuente
Creo que esto es un error, ¿verdad?
AK
Probablemente no. Supongo que SQL está haciendo un TRIM en el nombre de la base de datos cuando verifica si existe el valor. Eso tendría que ser intencional, por lo que probablemente sea por diseño.
mrdenny
@mrdenny, gracias, pero no hay ayuda allí ... la base de datos no aparece en absoluto, con ninguna variación en el nombre en absoluto ... y solo hay un puñado de bases de datos en ese servidor, por lo que lo detectaría de inmediato si estuviera allí . Gracias de todos modos
Matt
0

EJECUTE 'DBCC CHECKDB' en master, msdb y la base de datos para ver qué dice. Es posible que deba poner el sistema en modo de usuario único para que dbcc se ejecute en modo de reparación con pérdida de datos. O simplemente restaure sus copias de seguridad de master y msdb según corresponda.

Ian P
fuente
Ejecutar eso en el master y msdb no ayudó y no puedo probarlo en el db en sí, porque no puedo ver el db en el estudio de administración de ningún tipo ...
Matt
0

Para mí, esto se resolvió actualizando las bases de datos. He realizado una recuperación fallida y vi db, que no se pudo eliminar con el mismo mensaje de error: "La base de datos no existe en el servidor".

Raduga
fuente
2
Es posible que desee dar más detalles sobre cómo hace exactamente "actualizar bases de datos".
mustaccio
0

Estaba teniendo este mismo problema al usar el servidor SQL 2008r2.

Estaba tratando de duplicar una base de datos (versioning foo) y terminé confundiendo al servidor SQL. SQL Server Management Studio pensó que la base de datos existía (el MDF y el LDF sí existían) pero la base de datos maestra no creía que existiera (no se mostraba en las bases de datos sys).

El truco consistía en cambiar el nombre de los archivos MDF y LDF, luego crear la base de datos desde SQL, create database [db name here]luego eliminar la base de datos y finalmente adjuntar los archivos MDF y LDF de antes.

John Pycroft
fuente