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
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:
- 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.
- 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.
- 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;)