Uno de los beneficios de tener habilitada la traza por defecto de SQL Server es que te permite comprobar quién, cuándo, cómo y desde dónde se ha realizado una operación SHRINK de tus ficheros de bases de datos.
Hace poco nos toco investigar quién había realizado un SHRINK en un fichero de log de transacciones de una de nuestras bases de datos más críticas, ya que esto impacto en el rendimiento de la operativa transaccional de nuestro cliente.
Lo primero que hicimos fue comprobar si estaba habilitada o no la traza por defecto:
EXEC master.dbo.sp_configure 'show advanced options', 1;
GO
RECONFIGURE
GO
EXEC master.dbo.sp_configure 'default trace enabled';
GO
EXEC master.dbo.sp_configure 'show advanced options', 0;
GO
RECONFIGURE
GO
Como podéis ver en la columna ‘run_value’, el valor devuelto es un 1, por lo que si está habilitada. En caso de que no esté habilitada no es posible averiguar quién realizó el SHRINK.
Lo segundo, fue consultar donde estaba el fichero de traza (.trc) con la siguiente query:
SELECT value
FROM fn_trace_getinfo(default)
Where property = 2;
En el siguiente enlace de Microsoft podemos profundizar más sobre la función:
Y por último, usando la función fn_trace_gettable (podéis obtener más información sobre la función en el enlace de Microsoft):
SELECT
TextData,
HostName,
ApplicationName,
LoginName,
StartTime
FROM
[fn_trace_gettable]('G:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\log_9438.trc', DEFAULT)
WHERE TextData LIKE '%SHRINKFILE%';
¡Ya tendríamos toda la información sobre los últimos SHRINK realizados sobre nuestra instancia SQL Server!
Lo que tenemos que tener en cuenta es que la traza por defecto es un sistema definido que consiste en 5 ficheros (.trc) y cada uno puede llegar a pesar 20 MB. Siempre será guardado en la carpeta de SQL. Estas opciones no se pueden cambiar, por lo que debemos ser conscientes que esta información va ir rotando cíclicamente. No se mantiene un histórico, por lo que si buscas información de hace unas horas o muchos días (dependerá de la actividad de tu ínstancia) puede que ya no la encuentres. Recuerda esta limitación. A pesar de esto, es un sistema muy útil, que habilitando solo un par de parámetros, puedes tener mucha información importantísima sobre los cambios realizados en tu instancia/bases de datos. Te recomendamos que lo uses y saques todos los beneficios.