2 comentarios

Como Recuperarse de Errores en Bases Utilizando EMERGENCY MODE


Recuperarse de Errores en Bases utilizando EMERGENCY MODE

Que pasa por tu mente cuando ocurre un inprevisto en tus ambientes y tus bases de datos salen de linea, estan en modo sospechoso, recovery pending o en algun estado que no nos permita operar con ella, lo primero es pensar en los respaldos no?, por que tienes una estrategia de respaldos no?,,, ok ok, sabemos que si estas leyendo esto es muy probable que no tengas un respaldo, pues bueno aqui les dejo un post de como podemos recuperar nuestras bases de datos si esta se ha corrompido, ojo,, no siempre se puede …

la mejor opción es siempre descansar en una buena estrategia de backups, que nos permita recuperar en la manera mas granular posible cualquier error.
Pero…. en muchos casos no contamos con un backup actualizado, o falló la cinta ó el que limpia desenchufó el server para hacer café.

Bueno, después del prólogo, nos encontramos con una base dañada y sin backup previo. Que pasos seguimos?


1) Revisar el estado de la Base

Tenemos tres estados posibles en una base dañada :

– ONLINE
Si solamente uno de los datafiles está dañado, y esta falla es alcanzada por algún query durante alguna operación, la base podrá seguir ONLINE y por consecuencia accesible por el resto de los procesos. Solamente nos queda trabajar con la parte dañada, que puede resumirse en recrear índices, usar DBCCs o bien regenerar los datos particulares de ese objeto.

– RECOVERY PENDING
Este estado ocurre cuando el motor sabe que la base necesita realizar un recovery sobre la base (generalmente durante el start-up), pero algo previene que el recovery complete el Start-Up de la base.
Este es un estado diferente al de SUSPECT porque aún no hay nada que indique el recovery va a fallar, simplemente indica que aún no se pudo inciar la base.

Un ejemplo de esto es cuando la base de datos no fue cerrada en forma limpia ( esto es cuando quedan transacciones no commiteadas al momento del shutdown) o se pierde un archivo de log físico .

– SUSPECT
Una base de datos se encontrará en este estado cuando el Log de Transacciones esté dañado y prevenga que se complete el recovery o que una transacción haga rollback.

Algunos ejemplos de esto :

Cuando la base no fue cerrada en forma limpia durante el shutdown del server y el proceso de recovery intente leer una página de datos corrupta o bien un registro del log corrupto.

O bien una transacción regular que hace rollback y trata de leer una página de datos corrupta o bien un registro del log corrupto.

También puede ocurrir que el Log de Transacciones no tenga espacio en disco suficiente para crecer durante el proceso de Recovery, dejando la base inaccesible también.

Para chequear el estado de la base se pueden ejecutar los siguientes comandos :

— 70 y 80

Código:
SELECT status FROM sysdatabases WHERE name = ‘master’;

90 y 100

Código:
SELECT state_desc FROM sys.databases WHERE name = ‘master’;

Ó utilizando la función DATABASEPROPERTYEX válida de versión 2000 en adelante (aunque ésta muestra SUSPECT si la base esta en RECOVERY PENDING):

Código:
SELECT DATABASEPROPERTYEX (‘master’, ‘STATUS’);

2) Acciones de Recuperación

Como dijimos antes, el caso mas simple es cuando la base está ONLINE. Que se puede recuperar utilizando DBCCs, regenerado objetos o bien extractando la mayor cantidad de datos posibles hacia una nueva base.

Los otros dos estados restantes son mas difíciles, y en los cuales hay que tranquilizarse y tomar la mayor precaución. En estos casos la base no se encuentra accesible de ninguna manera, dado que no corrió el proceso de recovery y la base está en un estado inconsistente.
Podría ser un caso de inconsistencia lógica (ej. una transacción que modificó datos sin recuperar), o peor aún, podría estar structuralmente inconsistente (ej. una transacción de sistema modificando punteros de índices que no se recuperó). De cualquier forma, el SQL Server va a tratar de prevenir el acceso a la base, dado que no sabe cual es el estado de las estructuras y los datos.

En estos casos se puede utilizar el modo EMERGENCY. En las versiones previas al SQL Server 2005, el modo EMERGENCY no está documentado, por lo que hay que alterar la tabla SYSDATABASES, mientras que a partir de 2005 existe un comando documentado para realizar esta tarea.

– Versión 2005 en adelante :

 

Código:
ALTER DATABASE <nombre base> SET EMERGENCY;

– Versión 2000 :

Código:
UPDATE master..sysdatabases SET status=-32768 WHERE name='<dbname>'

Una vez en modo EMERGENCY, la base de datos se encuentra accesible para los Sysadmin, pero solamente en Read-Only y no se puede escribir nada en el log de transacciones.
Esto permite hacer algunas tareas de mantenimiento como por ejemplo vaciar el log , correr DBCC o bien extraer datos para su resguardo.

Ademas les dejo el link de otro post donde podemos averiguar con mas detalle en que momentes se deberia hacer una reconstrucción del log:

https://dbasqlserver.wordpress.com/2012/03/22/cuando-se-debe-reconstruir-el-transaction-log/

 

Espero les sirva

 

saludos

 

fuente

http://flydba.top-me.com/t24-recuperarse-de-errores-en-bases-utilizando-emergency-mode

 

Anuncios

2 comentarios el “Como Recuperarse de Errores en Bases Utilizando EMERGENCY MODE

  1. Hola a mi me sucede algo parecido tengo una base en Sqlserver 2008 el se conecta a nuestro Sistema de un momento me aparece un mensaje que no es accesible mi base que se encuentra en recuperación, entro al servidor de SQL y trato de abrir la base y no permite hasta ahora no he podido resolver este problema lo que hacemos es reiniciar el Server y después ya pueden entrar todos al sistemas. Alguna recomendación, solución…

Si te sirvio o te gusto el post, deja un comentario, o vota por el blog, esto nos ayuda a seguir creciendo, Gracias

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: