Como Compactar um Backup no SQL Server
Backups de banco de dados podem ocupar um espaço enorme em disco, principalmente em bases grandes. Compactar o arquivo de backup ajuda a economizar espaço de armazenamento e, de quebra, costuma acelerar o processo de backup e restore, já que menos dados precisam ser gravados ou lidos do disco.
Neste post você vai ver a forma recomendada de compactar backups nas versões atuais do SQL Server e também uma alternativa para quem ainda precisa lidar com versões bem antigas, sem suporte nativo a compactação.
Compactação nativa (SQL Server 2008 R2 em diante)
Desde o SQL Server 2008 (edição Enterprise) e do SQL Server 2008 R2 (a partir da edição Standard), o próprio mecanismo de backup já compacta o arquivo automaticamente, sem precisar de ferramentas externas. Essa é a forma recomendada hoje em dia: mais simples, mais segura e sem dependências externas.
Compactando com o comando BACKUP
Basta adicionar a opção COMPRESSION ao comando de backup:
BACKUP DATABASE WebMundiDB
TO DISK = 'D:\Backup\WebMundiDB.bak'
WITH COMPRESSION;
Definindo a compactação como padrão da instância
Se você quiser que todo backup feito na instância já saia compactado por padrão, sem precisar informar WITH COMPRESSION toda vez, configure a opção no nível do servidor:
EXEC sp_configure 'backup compression default', 1;
RECONFIGURE;
Com essa configuração ativa, basta rodar o backup normalmente que ele já será compactado:
BACKUP DATABASE WebMundiDB
TO DISK = 'D:\Backup\WebMundiDB.bak';
Restaurando um backup compactado
Não é preciso fazer nada de diferente: o RESTORE reconhece automaticamente que o arquivo está compactado e descompacta durante o processo.
RESTORE DATABASE WebMundiDB
FROM DISK = 'D:\Backup\WebMundiDB.bak';
Vantagens e o que observar
- Reduz o tamanho do arquivo de backup, normalmente entre 30% e 70%, dependendo dos dados
- Costuma reduzir o tempo total de backup e restore, pois há menos I/O de disco
- Aumenta um pouco o uso de CPU durante o backup, já que a compactação é feita em tempo real
- Backups compactados e não compactados não podem estar na mesma mídia física ao mesmo tempo antes do SQL Server 2008 R2; nas versões atuais isso já não é uma limitação relevante
Alternativa para versões antigas, sem compactação nativa
Se você ainda está em uma versão do SQL Server anterior ao suporte nativo à compactação (ou em uma edição que não oferece esse recurso), uma alternativa histórica era usar uma procedure que chama uma ferramenta externa de compactação por meio do xp_cmdshell, como no exemplo abaixo:
USE MASTER;
GO
SET QUOTED_IDENTIFIER OFF;
SET ANSI_NULLS ON;
GO
CREATE PROC sp_dba_ZipFile
@zippedfile VARCHAR(50),
@srcfile VARCHAR(50)
/**************************************************************
Exemplo de uso:
EXEC sp_dba_ZipFile 'D:\backupzip\bdwebmundi.zip', 'C:\backup\bdwebmundi.bak'
***************************************************************/
AS
BEGIN
DECLARE @cmdstr VARCHAR(8000);
SET @cmdstr = 'pkzip -add ' + @zippedfile + ' ' + @srcfile;
EXEC master..xp_cmdshell @cmdstr;
END
GO
Por que evitar essa abordagem hoje
Essa técnica funciona, mas carrega alguns problemas importantes que você deve considerar antes de usá-la:
-
xp_cmdshellé um risco de segurança. Ele permite executar comandos do sistema operacional diretamente a partir do SQL Server, com os privilégios da conta de serviço. Por esse motivo, vem desabilitado por padrão desde o SQL Server 2005 e só deve ser habilitado se realmente não houver alternativa. -
Depende de uma ferramenta externa (como o
pkzip), que precisa estar instalada e licenciada no servidor. -
SET ANSI_NULLS ONsemSET QUOTED_IDENTIFIER ONpode gerar comportamento inesperado em versões mais novas do SQL Server, já que a maioria dos recursos modernos esperaQUOTED_IDENTIFIER ON.
Se for realmente necessário habilitar o xp_cmdshell para rodar essa procedure, lembre-se de desabilitá-lo depois de configurar o processo:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
-- depois de configurar tudo, desabilite novamente:
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
Qual abordagem escolher
-
Está no SQL Server 2008 R2 ou mais recente? Use a compactação nativa com
WITH COMPRESSION. É a opção mais simples, mais segura e não exige ferramentas externas. -
Está em uma versão muito antiga, sem esse recurso? Considere primeiro atualizar a instância, já que versões desatualizadas também trazem riscos de segurança e ficam sem suporte da Microsoft. Se a atualização não for possível no curto prazo, a procedure com
xp_cmdshellpode servir como solução temporária, mas com atenção aos riscos de segurança descritos acima.
Conclusão : Como Compactar um Backup no SQL Server (Nativo e Legado)
A compactação de backup é um recurso simples que ajuda a economizar espaço em disco e, muitas vezes, também tempo de execução. Nas versões atuais do SQL Server, a opção nativa WITH COMPRESSION resolve praticamente todos os casos sem complicação. Guarde a abordagem com xp_cmdshell apenas como referência histórica ou para cenários muito específicos, com versões legadas que ainda estejam em produção.