4 jun 2013

Reparar base de datos SQL Server 2005 o posterior

En algunas ocasiones las base de datos se dañan con fallas de hardware, apagones inesperados del servidor y transacciones interrumpidas incorrectamente. SQL Server provee de sentencias que permiten verificar y reparar una base de datos con inconsistencias o dañada.

Antes de realizar el siguiente procedimiento deberia realizar un respaldo de la base de datos dañada si lo permite SQL Server o hacer una copia física de los archivos.


Paso 1: se coloca la base de datos en modo emergencia y usuario único
Alter Database mibd SET SINGLE_USER
Alter Database mibd SET EMERGENCY


Paso 2: Reparar la base datos
DBCC CHECKDB('mibd', REPAIR_ALLOW_DATA_LOSS)

. Repita este paso hasta que el mensaje sea '0 errores encontrados' para la base de datos
. La sentecia CHECKDB con la opcion REPAIR_ALLOW_DATA_LOSS elimina datos de ser necesario para realizar la reparación o corregir la consistencia de los datos, para una reparación más rápida y sin pérdida de datos pruebe la opcion REPAIR_REBUILD, aunque en ocasiones con esta opción no se repara completamente la base de datos.


Paso 3: Regresar a multiusuario y colocar en linea la base de datos
Alter Database mibd SET ONLINE
Alter Database mibd SET MULTI_USER


Aunque esto permite recuperar la base de datos en la mayoría de los casos, es altamente recomendable tener una estrategia correcta de respaldo o recuperación de la base de datos tales como espejos de discos, servidor reflejado, recuperación completa, etc.

29 comentarios:

Radicalsistemas dijo...

Que tal muy interesante tu tema, ha pasado alrrededor de 12 con el proceso de recuperacion y hasta ahorita no se ha recuperado nada...

Antonio Ortiz dijo...

A que te refieres con que a pasado alrededor de 12?

Unknown dijo...

hola, me podras ayudar, tengo SQL server 2005 y en la base de datos me sale el signo de admiracion y no tengo respaldo, que hago ? se podra reparar como dices en los pasos? saludos!

Antonio Ortiz dijo...

que tal Alberto, posiblemente solo sea un indicador de advertencia por estatus, te sugiero desconectes la base de datos y vuelvas a conectarla; es posible que eso solucione tu problema.

Si con el procedimiento anterior no se quita el signo, procede a reparar con el procedimiento del articulo

Anónimo dijo...

Amigo, muchas gracias por tener en cuenta los detalles porque los otros bloggs aunque son muy buenos como este, no hacen el comentario de como devolver la bd de emergency a online, y aunque es basico a algunos que no nos ha sucedido seguido esto, nos ayuda grandemente.

saludos.

atte., JARCH

Anónimo dijo...

Como puedo reparar una base de datos que se daño el disco duro y solo pude recuperar el archivo MDF, no la puedo cargar porque falta el archivo LOG.

Antonio Ortiz dijo...

Para restaurar el MDF sin el log, mira esta documentacion:

https://msdn.microsoft.com/es-MX/library/ms174385.aspx

Anónimo dijo...

como se que la base de datos esta corrupta y no se borro? un dia prendi la maquina y la base de datos ya no se conectaba y desde el manager no deja hacer nada, y el archivo de la base de datos pesa 0kb pero hay un log es posible recuperar algo con ese log?

Antonio Ortiz dijo...

oh caray, pues si mide 0k es obvio que se borro o sobreescribieron la base de datos. Si el log tiene un tamaño considerable es posible que la base de datos haya tenido recuperacion completa, mira este tema:

https://msdn.microsoft.com/es-mx/library/ms179451.aspx

Unknown dijo...

saludos, gracias por el aporte: breve, conciso, preciso y completo.

Unknown dijo...

cComo puedo resolver lo mismo pero con SQL 2014 si me marca error:- version 661. Upgrade the database to the latest version.-

Unknown dijo...

cComo puedo resolver lo mismo pero con SQL 2014 si me marca error:- version 661. Upgrade the database to the latest version.-

Antonio Ortiz dijo...

Lo siento, aun no tengo instalado SQL 2014

Anónimo dijo...

Buena tarde, tengo un problema, espero que me pueda ayudar
el MSSQLSERVER no se inicia, al revisar en el ERRORLOG
me aparece el siguiente error,
NO SE PUEDE ABRIR LA BASE DE DATOS "MODEL" TIENE LA MARCA SUSPECT, para recuperacion consulte el registro de errores de SQL server

no se ni por donde empezar para reparar el problema, no tengo copia de seguridad de la base de datos

antemano le agradezco, sus comentarios

Antonio Ortiz dijo...

Reinstala SQL Server y adjunta tus bases de datos previamente guardadas despues de desinstalar

Anónimo dijo...

hola una consulta tengo un backup de mi base datos pero esta corrupta.... se podra recuperar o reparar

Anónimo dijo...

me podrias ayudar tengo un backup de una bese datos pero este esta corrupta hay alguna forma de recuperarlo

Anónimo dijo...

con este ´procedimiento que indicas si podre resolver FCRPDM(Pendiente de recuperacion), de antemano agradsco tu apoyo, se tienen instlados sql server 2012


saludos

Antonio Ortiz dijo...

Estimado anónimo, ignoro si resuelva tu problema, cuando alguna base de datos esta en modo 'recuperacion' en mi experiencia lo he resuelto simplemente desconectando y volviendo a conectar la base de datos

MAURICIO dijo...

Excelente.. me ayudo mucho tu post.. pude recuperar toda la base sin perdida de info... mil millones de gracias desde Chile.

Antonio Ortiz dijo...

Me da gusto Mauricio, espera mi próxima publicación sobre seguridad de SQL para evitar alteración de datos

Chuche McTaff dijo...

Hola Antonio, me gustaría sabes si me puedes ayudar con este problema que tengo:

SQL Server detectó un error de E/S de coherencia lógico: página rasgada (firma esperada: 0x55555555; firma existente: 0x00005555). Ocurrió durante leer de la página (1:3543285) en la base de datos con id. 13, desplazamiento 0x000006c21ea000, archivo 'MIBASEDEDATOS'. El registro de errores de SQL Server o el registro de eventos del sistema puede contener mensajes adicionales con más detalles. Se trata de una condición de error grave que amenaza la integridad de la base de datos y que se debe corregir de inmediato. Ejecute una comprobación de coherencia completa de la base de datos (DBCC CHECKDB). Este error se puede haber originado por muchos factores; para obtener más información, vea los Libros en pantalla de SQL Server.

Con este metodo que indicas en tu blog sea posible reparar esto ??
De antemano muchas gracias.

Antonio Ortiz dijo...

Supongo que si podrias reparar tu base de datos, lo has intentado?

Unknown dijo...

Que tal Antonio, buen día, tengo este error, que me recomiendas?

SQL Server detectó un error de E/S de coherencia lógico: página rasgada (firma esperada: 0x55555555; firma existente: 0x00005555). Ocurrió durante leer de la página (1:3543285) en la base de datos con id. 13, desplazamiento 0x000006c21ea000, archivo 'DataBase.mdf'. El registro de errores de SQL Server o el registro de eventos del sistema puede contener mensajes adicionales con más detalles. Se trata de una condición de error grave que amenaza la integridad de la base de datos y que se debe corregir de inmediato. Ejecute una comprobación de coherencia completa de la base de datos (DBCC CHECKDB). Este error se puede haber originado por muchos factores; para obtener más información, vea los Libros en pantalla de SQL Server.

Muchas gracias

Antonio Ortiz dijo...

Buen dia Jesús, te recomiendo ejecutar el procedimiento escrito en el articulo, si después de eso no resuelves tu error procede a restaurar el respaldo o a comprar una herramienta avanzada para recuperación de bases de datos SQL Server.


saludos

Unknown dijo...

Que tal Antonio, para comentarte que realizando este proceso si funciona la reparacion de la DB, muchas gracias por tu aporte.
Saludos...

Antonio Ortiz dijo...

Saludos Jesus, es un placer poder ayudar.

NOUS dijo...

Buen día, veo que eres experto en reparar bases de datos de SQL Server, tengo un mega detalle con una BD de SQL SERVER 2016, al tratar de hacer respaldo me aparece un error, según es el espacio o propiedades de la carpeta, ya hice de todo DBCC habilitar permisos y nada.

Antonio Ortiz dijo...

Gracias por comentar, realmente no soy 'tan experto', pero aunque lo fuera no tengo ida de cual puede ser tu problema al respaldar.