Comando DBCC SHRINKFILE
Como se ha establecido, Se trata de un comando de mantenimiento, cuando mencionamos los Comandos DBCC, que este comando puede reducir el tamaño del archivo de datos o de registro de transacciones para la base de datos seleccionada, o bien, nos ayuda a vaciar un archivo moviendo los datos del archivo especificado a otros archivos del mismo grupo, lo cual permite quitar el archivo de la base de datos. Puede reducir un archivo a un tamaño menor que el tamaño especificado cuando se creó. De esta forma, se restablece el tamaño mínimo de archivo a un valor nuevo.
Es
importante indicar que la reducción de un archivo de datos puede modificarse a
un tamaño más pequeño mientras no se tengan datos, ya que cuando se desea
reducir el tamaño de un archivo con datos a un tamaño más pequeño que el que
tiene, Microsoft SQL Server no lleva a cabo la función, ya que no puede reducir un
archivo a un tamaño menor que el que se necesita para almacenar los datos en el
archivo.
La sintaxis
en su forma más simple es:
USE master;
GO
GO
DBCC
SHRINKFILE (file_name);
En el
comando se indica que se lleve a cabo la reducción del tamaño del archivo file_name de la base de datos actualmente
seleccionada, al tamaño determinado cuando se creó el archivo. Es necesario indicar que aunque se puede
indicar el identificador correspondiente (file_id), éste es un número que está
asociado al nombre de archivo, pero es mas común el uso del nombre
correspondiente.
La sintaxis
que se usa más a menudo es:
USE master;
GO
GO
DBCC SHRINKFILE (file_name, size);
En el
comando se indica que se lleve a cabo la reducción del tamaño del archivo file_name de la base de datos actualmente
seleccionada, al tamaño indicado por size, este se expresa en MB como un número
entero.
Existen algunos
argumentos opcionales que pueden ser utilizados con el comando, estos son:
EMPTYFILE
|
Mueve todos los datos
desde el archivo especificado a otros archivos en el mismo grupo de archivos,
esto es, no quedaran datos en el archivo indicado para que pueda ser quitado
de la base de datos. No obstante, existen ciertas restricciones que deben
tomarse en cuenta con los archivos de FILESTREAM.
|
NOTRUNCATE
|
Compacta los datos de
archivos de datos moviendo páginas asignadas del final de un archivo a
páginas no asignadas del principio del archivo. El tamaño objetivo es
opcional. NOTRUNCATE solo es aplicable a archivos de datos. No afecta al
archivo de registro. Asimismo no se permite su uso en archivos de FILESTREAM.
|
TRUNCATEONLY
|
Devuelve al sistema
operativo todo el espacio disponible del final del archivo, pero no realiza
ningún movimiento de página dentro del archivo. El archivo de datos solo se
reduce hasta el último tamaño asignado. El tamaño objetivo se omite si se
especifica con TRUNCATEONLY. Este argumento afecta al archivo de registro de
transacciones únicamente. De igual forma, no se permite su uso en archivos de
FILESTREAM.
|
WITH NO_INFOMSGS
|
Suprime todos los mensajes informativos con
niveles de gravedad entre 0 y 10.
|
Es necesario
indicar, que cuando se ejecuta este comando se puede obtener información
correspondiente a actividad realizada por la comando, dicha información es:
Columna
|
Descripción
|
DbId
|
Número de identificación de
la base de datos del archivo que Microsoft SQL Server intentó reducir.
|
FileId
|
Número de identificación del archivo que Microsoft SQL
Server intentó reducir.
|
CurrentSize
|
El número de páginas que el
archivo ocupa actualmente.
|
MinimumSize
|
El número de páginas que el archivo podría
ocupar, como mínimo. Esto corresponde al tamaño mínimo o tamaño de creación
original de un archivo.
|
UsedPages
|
El número de páginas que
utiliza actualmente el archivo.
|
EstimatedPages
|
El número de páginas al que Microsoft SQL Server estima
que se puede reducir el archivo.
|
Nota: Microsoft SQL Server no presentará filas para los archivos que no se reducen
Ejemplos de DBCC SHRINKFILE
Mostraré
algunos ejemplos de uso de este comando:
USE master;
GODBCC SHRINKFILE (db1_data) WITH NO_INFOMSGS;
Este
comando lleva a cabo la reducción del archivo denominado db1 _data que pertenece base
de datos db1, al tamaño especificado cuando se creó el archivo, sin
emitir mensajes.
USE master;GO
DBCC
SHRINKDATABASE (db1_log, 10);
Este
comando lleva a cabo la reducción del archivo denominado db1_log en la base de
datos indicada, dejando el tamaño en 10 MB.USE master;
GO
GO
DBCC SHRINKDATABASE (db1_2_data, EMPTYFILE);
Este
comando lleva a cabo el vaciado del archivo denominado db1_2_data en la base de
datos indicada, esto mueve todos los datos del archivo a otro archivo dentro
del grupo, asegúrese de que el movimiento de los datos se lleve a cabo de forma
correcta, se ha indicado que el archivo queda marcado para que ya no se utilice
y pueda ser quitado de la base de datos por utilizar la sentencia ALTER
DATABASE.Comentarios
Es necesario
notar que la reducción se
hace más efectiva si se lleva a cabo después de una operación que crea mucho
espacio y posteriormente lo deja inutilizado, como es el caso de una operación
para truncar o eliminar tablas. Si bien,
la mayoría de las bases de datos requieren que haya espacio disponible para
realizar las operaciones diarias de forma normal, el tratar de reducir una base
de datos en forma reiterada y su tamaño vuelve a aumentar, no sirve tratar de reducir
la base de datos de esta forma.
La reducción de
los archivos no mantiene la fragmentación de los índices actuales de la base de
datos y es muy posible que aumente la fragmentación hasta cierto punto, ésta es
otra de las razones para no reducir la base de datos de forma continua.
Debe tenerse en
cuenta que la reducción de varios archivos en la misma base de datos debe
hacerse de forma secuencial en lugar de simultáneamente. La contención en las
tablas del sistema puede provocar retrasos debido al bloqueo.
Como se ha
indicado, es recomendable ejecutar la instrucción CHECKPOINT en la base de
datos antes de utilizar el comando que reduzca el tamaño de los archivos para
que las páginas modificadas que se encuentren en la memoria se almacenen
adecuadamente en el disco y se mejore el desempeño del comando.
No hay comentarios.:
Publicar un comentario