Inicio > Resolución de problemas, SQL Server > Error 9002 después de un intento por encoger la base de datos

Error 9002 después de un intento por encoger la base de datos


El día de hoy ha sido terrible. Resulta que el proyecto de GeoSEP que tengo está en un servidor de desarrollo compartido. Pero ya no hay espacio en disco duro. Me meto al servidor y menudo lío: solo 9MB de espacio disponible. Ni pex, tiempo de liberar espacio.

Entro a la dirección de SQL Server ($SQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA) y veo que mi base de datos tiene un log de 500MB. Pero además hay una base de datos cuyo MDF mide 3GB y su archivo log LDF mide 2GB! Así que aquí está el pan. Basta con hacer una reducción de ambas bases de datos para ganar 2.5GB nuevamente.

Así pues, abro el Management Studio y expando las bases de datos. Selecciono la mía y hago clic secundario y selecciono “Tasks->Shrink->Database”. Se ejecuta la transacción y listo, 500GB menos. Perfecto. Hago lo propio con la otra base de datos… ¡Y patatús! Resulta que en lugar de reducirse el archivo LDF, ¡éste comienza a aumentar de tamaño! de 2GB pasó a 2.5GB en unos segundos… y lanza error porque ya no hay espacio en disco duro. Me da el patatús.

¿De quién cuernos es esa base de datos? Investigo, y resulta que no es de nadie, ya no se usa. Pero no se puede desaparecer, hay que respaldarla. Bien. Voy al server de nuevo e intento hacerle un “detach” a la base de datos… y me lanza el siguiente error.

The transaction log for database ‘xxx’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait

Me dá el patatús. Ni jota idea del por qué. Pero el mensaje dice que revise log_reuse_wait de la tabla sys.databases, así que hay voy. El campo log_reuse_wait_desc tiene el valor ‘LOG_BACKUP’, que no dice absolutamente nada. Vale, vamos a la documentación a buscar algo. Encuentro un artículo en MSDN que no da información útil.

Así que regreso a la base de datos. Intento hacer un respaldo y me sale el mismo error. Intento ver las propiedades, error. Intento hacer cualquier cosa, y error. Comienzo a perder la paciencia, así que salgo a comer para despejarme.

Regresando, a continuar. Comienzo a buscar en Google y los foros de MSDN, sin tener mucho resultado. Algunas soluciones proponen que se haga un detach/attach, pero es precisamente lo que no puedo hacer. Intento también volver a correr el comando para reducir la base de datos, y el mismo error.

Abro mi explorador y navego a la página de foros de MSDN. Localizo el foro para SQL Server, a ver si alguien me puede ayudar. Comienzo a redactar la pregunta, y cuando regreso al servidor para copiar el mensaje de error, noto algo que no había visto: “Microsoft SQL Server Error 9002”. ¡Ah, hay un código de error! Abro Google y a buscar. Y finalmente encontré una solución.

1. Ejecutar el procedimiento almacenado sp_resetstatus, así:

exec sp_resetstatus 'mi_basededatos'

2. Ejecutar el comando para recuperar una base de datos:

 DBCC DBRECOVER ('mi_basededatos')

Intento correr el detach… ¡y ahora sí funciona! ¡Uf! Me recargo en la pared, supongo que no ganaré el premio al mejor DBA del año. Pero bueno, ya quedó. Dejo un par de enlaces que me dieron la solución, por si alguien más con este problema los quiere leer.

Bueno, ahora sí, de vuelta al trabajo.

Anuncios
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

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