Reducir Tamaño MDF

12/04/2010 - 09:08 por José Antonio Muñoz | Informe spam
Hola a todos,

¿Hay alguien que me pueda ayuda para reducir el tamaño de un archivo MDF?
¿existe alguna manera?

saludos,
José Antonio Muñoz.

Preguntas similare

Leer las respuestas

#1 Nacho
13/04/2010 - 15:44 | Informe spam
Este Sp me ha servido para reducir los LOG. Luego de esto debes
reorganizar los datos y liberar el espacio del DATA.
Espero que te sea de utilidad.


SET NOCOUNT ON
DECLARE @NombreLogicoArchivo sysname,
@MaxMinutos INT,
@NuevoTamano INT

USE [BD_1] -- Nombre de la base de datos para el que se va a
truncar el registro
desea reducir.
SELECT @NombreLogicoArchivo = 'BD_1_Data',
@MaxMinutos = 10, -- Límite de tiempo permitido para dar la
vuelta al registro.
@NuevoTamano = 2000 -- en MB

DECLARE @TamanoOriginal int
SELECT @TamanoOriginal = size -- en páginas de 8 KB
FROM sysfiles
WHERE name = @NombreLogicoArchivo
SELECT ' El tamaño original del registro de ' + db_name() + ' es ' +
CONVERT(VARCHAR(30),@TamanoOriginal) + ' páginas de 8 KB ó ' +
CONVERT(VARCHAR(30),(@TamanoOriginal *8/1024)) + 'MB'
FROM sysfiles
WHERE name = @NombreLogicoArchivo
CREATE TABLE DummyTrans(DummyColumna char (8000) not null)


DECLARE @Contador INT,
@HoraInicio DATETIME,
@TruncReg VARCHAR(255)
SELECT @HoraInicio = GETDATE(),@TruncReg = 'BACKUP LOG [' + db_name()
+ '] WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@NombreLogicoArchivo, @NuevoTamano)
EXEC (@TruncReg)
WHILE @MaxMinutos > DATEDIFF (mi, @HoraInicio, GETDATE())
AND @TamanoOriginal = (SELECT size FROM sysfiles WHERE name @NombreLogicoArchivo)
actual.
AND (@TamanoOriginal * 8 /1024) > @NuevoTamano
BEGIN -- Bucle externo.
SELECT @Contador = 0 WHILE ((@Contador < @TamanoOriginal / 16)
AND (@Contador < 50000))

BEGIN -- Actualización

INSERT DummyTrans VALUES ('Llenar registro')
DELETE DummyTrans
SELECT @Contador = @Contador + 1
END -- Actualización Probar si un truncamiento reduce de
tamaño el registro.
EXEC (@TruncReg)
END -- Bucle externo

SELECT ' El tamaño final del registro de ' + db_name() + ' es de ' +
CONVERT(VARCHAR(30),size) + ' páginas de 8 KB ó ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @NombreLogicoArchivo
DROP TABLE DummyTrans
PRINT '*** RECUERDE: DEBE REALIZAR UNA COPIA DE SEGURIDAD COMPLETA DE
LA BASE DE DATOS***'
SET NOCOUNT OFF
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida