Por que um arquivo .bacpac é tão pequeno em comparação com um arquivo .bak do mesmo banco de dados?

Tenho feito backups de meus bancos de dados SQL Server 2014 Express para importação para outros servidores e percebi uma diferença no tamanho do arquivo entre .bacpac e .bak.

Por que um arquivo .bacpac é tão pequeno em comparação com um .bak arquivo do mesmo banco de dados?

Obrigado por qualquer insight!

Resposta

A

  • .bacpac arquivo = Esquema + Dados. Observe que os dados são BCP” ed out usando o formato nativo (não legível por humanos).

    • Você pode renomear o .bacpac para .zip para ver o conteúdos reais.

    • Você pode usar ...DAC\bin\sqlpackage.exe linha de comando para extrair a .bacpac conteúdos programaticamente.

    • É um instantâneo que inclui dados do usuário + esquema do SQL Server ou banco de dados SQL do Azure.

  • Backup (geralmente tem a extensão .bak) = Um backup COMPLETO do banco de dados contém uma cópia completa do banco de dados e fornece um único momento no qual o banco de dados pode ser restaurado. Um backup completo contém alguns registros de log de transações para que o componente restaurado (banco de dados, arquivo ou grupo de arquivos) possa ser transacionalmente consistente.

Um BACPAC não é um substituto para um backup COMPLETO. É apenas um instantâneo que pode ser usado para mover um banco de dados de um servidor para outro (ou para a nuvem) e arquivando um banco de dados existente em um formato aberto .

Do meu teste, abaixo estão os resultados

insira a descrição da imagem aqui

Comentários

  • O arquivo de registro é provavelmente o maior motivo para a diferença de tamanho.
  • Eu ' d presumo que ' s não há dados de índice no .bacpac também, o que provavelmente contribui GRANDE para o tamanho do arquivo.

Resposta

Um backup criado por meio do (.bak) é uma cópia página por página de um banco de dados. Observe que o banco de dados SQL Server contém não apenas páginas de dados. Também existem páginas com índices que podem ser grandes. Mais detalhes aqui

Um backup criado usando o aplicativo Export Data-Tier (.bacpac) operação é simplesmente uma linha exportada de um banco de dados em formato XML colocado em um arquivo. Você pode visualizar manualmente o conteúdo do BACPAC, basta alterar a extensão deste arquivo para .zip.

O tamanho do .bacpac o arquivo é diretamente proporcional ao número de registros em um banco de dados (levando em consideração a taxa de compressão).

O tamanho do arquivo .bak depende não apenas dos dados, mas também do tamanho dos índices.

Às vezes, isso pode ser um problema, verifique por exemplo esta antiga discussão

Portanto, a .bacpac arquivo geralmente é menor em tamanho.

Eu executei os testes mais simples com o banco de dados AdventureWorks e consegui esses resultados.

AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb 

Devo usar .bacpac para reduzir o tamanho do meu backup?

Não.

Exportar \ Importar aplicativo da camada de dados tem várias desvantagens significativas que são críticas para grandes bancos de dados:

  1. Esta não é uma operação consistente transacional. As tabelas são exportadas sequencialmente. Pode haver um problema com a chave estrangeira. Isso é duplamente ruim porque você só o descobre quando tenta se recuperar. Portanto, ao realizar esta operação, você precisa tirar um instantâneo do banco de dados e exportar o instantâneo.
  2. Demora muito mais para exportar e importar. No momento em que você precisar executar uma restauração com urgência, não poderá fazer isso porque a restauração de .bacpac levará várias horas para ser concluída.
  3. A exportação pode carregar significativamente o servidor, especialmente para grandes tabelas, o que, juntamente com o ponto anterior, torna os backups regulares uma decisão duvidosa.

O backup clássico criado usando o comando BACKUP DATABASE não tem essas desvantagens, para economizar espaço, use Recuperação pontual

Exportar \ Importar aplicativo da camada de dados pode ser considerado uma forma de criar um backup apenas para bancos de dados pequenos, nos casos em que você não tem acesso a o sistema de arquivos. Nesse caso, não exporte o banco de dados ativo em nenhuma circunstância, certifique-se de criar um instantâneo para exportação consistente.

Resposta

Bem, a maior diferença é que os dados são compactados (usando zip) para o arquivo .bacpac, o que não é o caso de um .bak normal Arquivo. Basta compactar o arquivo .bak e ver que é muito menor;)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *