Vous êtes sur la page 1sur 4

Reducir el fichero de Log en SQL Server

1 . Introduccin 2 . Tipos de ficheros 3 . Modo de recuperacin 4 . Funcionamiento del fichero de Log 5 . Reducir el fichero de Log . !lan " # . $na solucin definiti%a & . 'ota final

Introduccin
(e manera recurrente aparece una pregunta en los grupos de noticias ) en los foros so"re el tama*o del fichero de transacciones de una "ase de datos del +,L +er%er. -l pro"lema es .ue el fichero Log crece indefinidamente hasta hacerse tan grande .ue se come todo el disco duro/ llegando en el peor de los casos a llenarlo con el consiguiente error0 Error: 1105, Severity: 17, State: 2: Could not allocate space for the transaction log for database ' i!ase' because the device is full" #u$p the log or enlarge the device to create $ore space" Realmente este error no es un pro"lema del +,L +er%er. -s el comportamiento normal del ser%idor cuando no tenemos en cuenta .ue en toda "ase de datos ha) .ue reali1ar una serie de tareas de mantenimiento para .ue todo funcione correctamente. Lo .ue nos est2 indicando es .ue el fichero de Log no puede crecer m2s/ "ien sea por.ue le hemos limitado el tama*o o por.ue hemos llenado todo el disco/ ) si el ser%idor no puede escri"ir en el fichero de Log no puede continuar tra"a3ando. !ero %amos a %er un poco como funciona el almacenamiento de datos en el +,L +er%er ) .ue es eso del fichero de transacciones 4o de Log5 para entender como podemos solucionar este error/ ) lo .ue es m2s importante/ como e%itarlo.

Tipos de ficheros
-n toda "ase de datos de +,L +er%er ha) al menos dos ficheros. $no es el fichero de "ase de datos donde estar2n almacenados los datos de nuestras ta"las 4) dem2s o"3etos5 ) otro es el fichero de transacciones. -l fichero de transacciones consiste en una serie de registros de todas las modificaciones de la "ase de datos ) de la transaccin .ue ha reali1ado cada modificacin. -n el registro de transacciones figura el inicio de cada transaccin. Tam"i6n registra los cam"ios de los datos ) facilita suficiente informacin para deshacer las modificaciones 4si fuera necesario posteriormente5 reali1adas durante cada transaccin. -l fichero de "ase datos tiene e7tensin mdf mientras .ue el de transacciones tiene e7tensin ldf. -n este caso nos %amos a concentrar en este 8ltimo .ue es el .ue nos puede dar pro"lemas en cuanto al espacio.

Modo de recuperacin
-l modo de recuperacin de la "ase de datos es mu) importante para entender de donde surge nuestro pro"lema. (ependiendo de cmo hemos creado la "ase de datos

ha) %arios modos de recuperacin de la "ase de datos en el +,L +er%er. Tenemos el modo completo/ el de registro masi%o ) el sencillo. +i al crear la "ase de datos no especificamos nada el modo de recuperacin elegido es el completo. !ara sa"er el modo en .ue lo tenemos configurado podemos mirar en el 9:dministrador ;orporati%o< en las propiedades de la "ase de datos/ en la solapa 9=pciones<. :h> podemos %er cual es el modo de recuperacin de la "ase de datos. Tam"i6n podemos a%eriguar el modelo de recuperacin e3ecutando el comando sp_helpdb NombreBaseDatos en el anali1ador de consultas. +i lo hacemos as> en el panel de resultados ha) una columna status donde se detalla/ entre otra cosas/ el modelo de recuperacin 4Reco%er)?F$LL5. Tener modo de recuperacin completa significa .ue se puede recuperar la "ase de datos hasta el momento en el .ue se produ1ca un error o hasta un momento determinado del tiempo. -s el modo ha"itual en una "ase de datos de produccin. -n este modo de recuperacin cada transaccin .ue se produ1ca en la "ase de datos 4insercin/ modificacin/ "orrado@5 .ueda registrada en el archi%o de transacciones 4el .Log5 de tal manera .ue se puede reconstruir todo lo ocurrido con la "ase de datos a lo largo del tiempo. !ero usar este modo implica .ue el fichero de transacciones crecer2 indefinidamente/ llegando incluso a ser m2s grande .ue la propia "ase de datos. La solucin a este crecimiento es sencilla0 hacer copias de seguridad. ;uando hacemos una copia de seguridad del registro de transacciones los datos .ue pasan a la copia de seguridad se "orran del disco de3ando espacio li"re. :s> con cada copia eliminaremos del disco la parte del archi%o de Log .ue )a no es necesaria de3ando espacio li"re para registrar las nue%as transacciones .ue se produ1can en nuestra "ase de datos. Lo malo es .ue cuando esto ocurre se li"era espacio dentro del archi%o de Log/ pero no .uiere decir .ue se redu1ca el tama*o en disco de este fichero. -n este caso tendremos .ue reducir el tama*o del archi%o de Log en una segunda fase.

Funcionamiento del fichero de Log


;omo dicen lo A=L del +,L +er%er cada archi%o de registro de transacciones se di%ide lgicamente en segmentos m2s pe.ue*os/ denominados archi%os de registro %irtuales 4BLF5. Los archi%os de registro %irtuales son las unidades de truncamiento del registro de transacciones. ;uando un archi%o de registro %irtual )a no contiene registros para transacciones acti%as/ puede truncarse con el fin de .ue ha)a espacio disponi"le para registrar nue%as transacciones. -l tama*o m>nimo de un archi%o de registro %irtual es de 25 CA. -l tama*o m>nimo de un registro de transacciones es de 512 CA/ lo .ue proporciona dos archi%os de registro %irtuales de 25 CA. -l n8mero ) el tama*o de los archi%os de registro %irtuales en un archi%o de transacciones incrementan a medida .ue lo hace el archi%o de registro. $n archi%o de registro pe.ue*o puede tener un n8mero reducido de pe.ue*os archi%os de registro %irtuales mientras .ue un archi%o de registro de gran tama*o puede tener archi%os de registro %irtuales m2s grandes. ;omo dec>amos cuando el archi%o de transacciones se hace mu) grande la solucin es hacer una copia de seguridad ) la parte de ese archi%o de la .ue se hace una copia se li"era. -s decir/ se %ac>an los BLF ) una %e1 %ac>os se pueden truncar para .ue se redu1ca el espacio .ue ocupa el fichero en el disco. !ara truncar este archi%o de Log

podemos usar el :dministrador ;orporati%o usando la opcin 9Reducir "ase de datos< o hacerlo desde el :nali1ador de ;onsultas. Do prefiero el :nali1ador de ;onsultas por.ue da m2s informacin de lo .ue estamos haciendo ) de los posi"les errores .ue pueden aparecer. Beamos .ue comandos tenemos .ue e3ecutar para hacerlo desde al :nali1ador de ;onsultas con T+,L.

Reducir el fichero de Log


+uponiendo .ue tenemos una "ase de datos de nom"re MiAase los pasos a dar ser>an los siguientes0 1" %brir el anali&ador de consultas" E'ecutar la sentencia (SE i!ase para )ue el conte*to de e'ecuci+n sea el de la base de datos )ue )uere$os" 2" E'ecutar la sentencia C,EC-./012 .ara )ue se graben en disco todas las p3ginas desfasadas 4las )ue est3n en cach5 y todav6a no est3n en el disco7 8" E'ecutar la sentencia: E9EC sp:addu$pdevice 'dis;', 'Copia i!ase', 'd:<=og i!ase"ba;' .ara crear un dispositivo f6sico donde al$acenar la copia de seguridad" Este dispositivo ser3 un archivo en d: de no$bre =og i!ase"ba;" ,ay )ue asegurarse de )ue hay suficiente sitio para la copia de seguridad" 2a$bi5n pode$os crear este dispositivo desde el %d$inistrador Corporativo" >" Crear una copia de seguridad de la base de datos !%C-(. #%2%!%SE i!ase 2/ Copia i!ase Con esto crea$os una copia co$pleta de la base de datos" 5" Crear la copia de seguridad del archivo de =og !%C-(. =/? i!ase 2/ Copia i!ase %hora he$os creado una copia de la infor$aci+n del archivo de =og con lo )ue habre$os liberado alguno de los @=A 4virtual =og file7 %hora pode$os $irar si el fichero de =og se ha reducido, y si no lo ha hecho pasa$os al siguiente punto" B" =iberar espacio f6sico del fichero de =og #!CC S,C01-A0=E 4 i!ase:=og, 1007 Este co$ando libera espacio f6sico si hay algDn @=A vac6o" El pri$er argu$ento el no$bre l+gico del archivo )ue )uere$os reducir y el 100 es el ta$aEo ob'etivo en b" %un)ue en este e'e$plo usa$os 100 b co$o ta$aEo ob'etivo, en cada caso habr3 )ue $irar cual es el valor deseado y hasta donde se puede llegar dependiendo e los @=A )ue haya libres despu5s de hacer la copia de seguridad del fichero de =og"

$na %e1 hecho esto )a de"er>amos tener un archi%o de Log de tama*o ra1ona"le.

Plan b
+i no nos interesa tener copia de seguridad de todos los datos del fichero de Log 4o no ha) espacio para la copia de seguridad5 podemos seguir un m6todo m2s r2pido pero .ue no hace copia de seguridad de este fichero/ aun.ue s> del de la "ase de datos0 1F (SE i!ase 2F C,EC-./012 8F E9EC sp:addu$pdevice 'dis;', 'd:<=og i!ase"ba;' >F !%C-(. #%2%!%SE i!ase 2/ Copia i!ase 5F !%C-(. =/? i!ase G02, 2C(1C%2E:/1=H BF #!CC S,C01-A0=E 4 i!ase:=og, 1007

'Copia i!ase',

-sta opcin simplemente trunca el fichero de Log perdiendo la parte de este fichero .ue no esta acti%a.

Una solucin definitiva


!ara .ue no %uel%a a ocurrir ha) .ue tener un plan de mantenimiento de la "ase de datos .ue realice copias de seguridad completas ) del archi%o de Log cada cierto tiempo. ;u2nto tiempo es dif>cil de decir sin sa"er para .ue se utili1a la "ase de datos ) cual es su tama*o/ pero podr>a ser desde %arias %eces al d>a hasta una %e1 por semana. (esde luego es mucho m2s sencillo si programamos como tra"a3o la reali1acin de las copias de seguridad ) si programamos alguna alerta .ue nos indi.ue si se so"repasa el l>mite .ue consideremos ra1ona"le para el tama*o de nuestros ficheros. +iempre es me3or pre%enir los errores .ue corregirlos.

ota final
Da se .ue no es necesario decirlo/ pero siempre .ue reali1amos alguna tarea .ue puede resultar peligrosa es o"ligatorio reali1ar una copia de seguridad de la "ase de datos as> como de las "ases de datos del sistema por si ocurre alg8n impre%isto.