10 ene 2013

Administrar el registro de Transaccciones en Sql Server





¿Qué es un registro de transacciones en Sql Server?
Es un archivo adjunto a las bases de datos SQL Server.. Es importante revisar periódicamente el tamaño de estos archivos, porque es posible que llegue a ocupar mucho espacio en disco. Por otra parte si llegara a producirse un error en el sistema, es posible utilizar este archivo para poner la base de datos en marcha. El registro de transacciones nunca se debe eliminar o Mover  a menos que se realice un buen plan de mantenimiento conociendo a fondo los posibles problemas que se puedan presentar.


¿Quién usa  el registro de transacciones?
Este archivo se encarga de registrar las transacciones que se realizan sobre una base de datos, por tanto es de vital importancia para la BD. Si se quiere revisar cuanto espacio de disco esta ocupando los registros de transacciones de sql server se debe ejecutar el siguiente comando:

DBCC SQLPERF(LOGSPACE);
GO

Con esto Usted vera cuanto  espacio esta reservado y cuanto espacio esta siendo utilizado por el registro de transacciones
Database Name Log Size (MB) Log Space Used (%) Status     
------------- ------------- ------------------ -----------
master         3.99219      14.3469            0
tempdb         1.99219      1.64216            0
model          1.0          12.7953            0
msdb           3.99219      17.0132            0
AdventureWorks 19.554688    17.748701          0

¿Qué tiene que  ver el Modo Simple o Full de recovery con los registros de transacciones? 
Al manejar una base de datos Sql Server es importante conocer los modelos de recuperación de una base de datos, este método es definido en la base de datos como una propiedad. Hasta el momento exiten 3 metodos: Simple, Completa y por medio de registro de operaciones masivas. Los mas comunes son el Simple y el completo. Ahora nos enfocaremos en resumir las diferencias que presentan estos dos métodos.
Metodo de Recuperacion Simple.-  El riesgo de pérdida de información es mayor debido a que si se presentará un error en la base de datos solamente podríamos recuperar la informacion hasta la fecha y hora del ultimo backup. Ventaja  es que en el backup solamente toma los datos obviando las transacciones. Esto ocasiona menor consumo de Disco Duro en el servidor.
Metodo de Recuperacion Completa.- El riesgo de pérdida de información es mucho menor ya que este método toma en cuenta al registro de transacciones, entonces es posible recuperar y/o restaurar una base de datos hasta cierto punto en el tiempo,  incluso hasta instantes previos al error de un usuario o comando. La desventaja de este método es que el archivo de registro de transacciones puede crecer demasiado con el afán de reservar espacio en el disco duro, siempre con el fin de utilizarlo en el futuro. Debido a malas configuración en el control de crecimiento de este archivo puede reducir de tamaño y las maneras de como hacerlas las veremos a continuación.

¿Cómo bajar el tamaño reservado en disco para los archivos de registro de transacciones de Sql server?

Ojo: La reducción sólo se puede realizar mientras la base de datos está conectada y existe al menos un archivo de registro virtual libre. En algunos casos, no será posible reducir el registro hasta el siguiente truncamiento del registro.
En sql server 2008 r2 se tiene el siguiente comando  “DBCC ShrinkfFile” para mas informacion vea la ayuda de SQL.  Ahora nos enfocaremos en ejecutar el código, en el analizador de consultas ejecute lo siguiente:

USE AdventureWorks2012;
GO
-- cambiando la base de datos en recuperacion simple.
ALTER DATABASE AdventureWorks2012
SET RECOVERY SIMPLE;
GO
-- Ejecutamos el commando  definiendo el tamaño del archivo en megas en este caso es 1 MB.
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);
GO
-- Devolvemos el estado al modo de recuperacion en la base de datos.
ALTER DATABASE AdventureWorks2012
SET RECOVERY FULL;
GO

Por ultimo verifica el uso de los archivos de registros de transacciones en todas las bases de datos de la siguiente manera en el analizador de consultas:
DBCC SQLPERF(LOGSPACE);
GO

Suerte!
Fuentes de informacion:
http://msdn.microsoft.com/es-es/library/ms189493%28v=sql.105%29.aspx