Estimando o tamanho do backup no SQL Server

Imagine um cenário… Você tem que fazer um backup de um banco de dados em um disco local para alguma atividade ou simplesmente por ter que implementar como sua rotina de backup, você não sabe o tamanho que os backups vão utilizar e existe a chance de estouro do disco.

Se você tiver mais de um disco você pode usar como manobra a realização dos backups em multiplos arquivos (aka Stripes). Mas mesmo se estiver com apenas um disco ou mais de um ainda é interessante realizar uma estimativa de tamanho, certo?

Podemos usar o histórico de backup dos bancos de dados. Na backupset você encontra o campo backup_size que mostra o valor utilizado/alocado pelo arquivo de backup gerado.

Mas…… eu uso o backup em compression ?! Show! Então dá uma olhada na compressed_backup_size. Se você não sabe se usa/usou ou não a compressão do backup, se os campos backup_size e compressed_backup_size mostram o mesmo valor, a compressão de backup não foi ativada.

Bacana mas…. o SQL Server aloca o espaço estimado e depois realiza o compressão do arquivo gerado e no meu cenário isso é um problema! Então você precisa do efeito gerado a partir da ativação da Trace Flag 3042. Com o trace flag ligado, o arquivo de backup crescerá até o tamanho necessario pela compressão do backup. Mas é garantido? Teste e veja….. sempre primeiro no ambiente não produtivo é claro.

Uma variante do Script apresentado no link acima.

SELECT 
   msdb.dbo.backupset.database_name,  
   msdb.dbo.backupset.backup_start_date,  
   msdb.dbo.backupset.backup_finish_date, 
   datediff(minute, msdb.dbo.backupset.backup_start_date,  msdb.dbo.backupset.backup_finish_date) as elapsed_time_minutes,
   CASE msdb.dbo.backupset.type  
       WHEN 'D' THEN 'Database (Full)' 
       WHEN 'L' THEN 'Log' 
       WHEN 'I' THEN 'Differential'
       WHEN 'F' THEN 'File or filegroup'
       WHEN 'G' THEN 'Differential file'
       WHEN 'P' THEN 'Partial'
       WHEN 'Q' THEN 'Differential partial'
   END AS backup_type,  
   cast(msdb.dbo.backupset.backup_size / 1073741824 as decimal(10,2)) backup_size_GB,   
   cast(msdb.dbo.backupset.compressed_backup_size / 1073741824 as decimal(10,2)) as compressed_backup_size_GB,
   CASE msdb.dbo.backupmediafamily.device_type
    WHEN 2 THEN 'DISK'
    WHEN 5 THEN 'TAPE'
    WHEN 7 THEN 'VIRTUAL DEVICE'
    WHEN 105 THEN 'PERMANCE BACKUP DEVICE'
    ELSE 'OTHER'
    END AS device_type_desc,
    msdb.dbo.backupmediafamily.logical_device_name,
   msdb.dbo.backupmediafamily.physical_device_name
FROM   msdb.dbo.backupmediafamily  
   INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7)  
ORDER BY 
   msdb.dbo.backupset.backup_finish_date desc,
   msdb.dbo.backupset.database_name

O AdventureWorks sendo realizado com e sem backup compression.

Backup Size

hmmm… 05AM já… depois eu corrijo os erros de português… e por agora isso é tudo! vlws! flws! 🙂

Esse post foi publicado em SQLServer e marcado , , , , , , , , , , , . Guardar link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s