|

Como Compactar um Backup no SQL Server

Compartilhe :

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 ON sem SET QUOTED_IDENTIFIER ON pode gerar comportamento inesperado em versões mais novas do SQL Server, já que a maioria dos recursos modernos espera QUOTED_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_cmdshell pode 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.

Posts Similares