¿Por qué un archivo .bacpac es tan pequeño en comparación con un archivo .bak de la misma base de datos?

He estado haciendo copias de seguridad de mis bases de datos SQL Server 2014 Express para importarlas a otros servidores y noté una diferencia en el tamaño del archivo entre .bacpac y .bak.

¿Por qué un archivo .bacpac es tan pequeño en comparación con un .bak archivo de la misma base de datos?

¡Gracias por cualquier información!

Respuesta

A

  • .bacpac file = Schema + Data. Tenga en cuenta que los datos son BCP» y se utilizan en formato nativo (no legible por humanos).

    • Puede cambiar el nombre de .bacpac a .zip para ver el contenidos reales.

    • Puede utilizar ...DAC\bin\sqlpackage.exe para extraer la línea de comandos .bacpac contenidos programáticamente.

    • Es una instantánea que incluye datos de usuario + esquema de SQL Server o Azure SQL Database.

  • Copia de seguridad (normalmente tiene .bak extensión) = Una copia de seguridad COMPLETA de la base de datos contiene una copia completa de la base de datos y proporciona un único momento en el que se puede restaurar la base de datos. Una copia de seguridad completa contiene algunos registros del registro de transacciones para que el componente restaurado (base de datos, archivo o grupo de archivos) se pueda convertir en una transacción coherente.

Una BACPAC no sustituye a una copia de seguridad COMPLETA. Es solo una instantánea que puede usarse para mover una base de datos de un servidor a otra (oa la nube) y archivando una base de datos existente en un formato abierto .

De mi prueba, a continuación se muestran los resultados

ingrese la descripción de la imagen aquí

Comentarios

  • El archivo de registro es probablemente la principal razón de la diferencia de tamaño.
  • Yo ' supongo que hay ' tampoco hay datos de índice en el .bacpac, lo que probablemente contribuya en GRANDE al tamaño del archivo.

Respuesta

Una copia de seguridad creada a través de (.bak) es una copia página por página de una base de datos. Tenga en cuenta que la base de datos de SQL Server no solo contiene páginas de datos. También hay páginas con índices que pueden ser grandes. Más detalles aquí

Una copia de seguridad creada con la aplicación Exportar nivel de datos (.bacpac) La operación es simplemente una fila exportada de una base de datos en formato XML colocada en un archivo. Puede ver manualmente el contenido de BACPAC, simplemente cambie la extensión de este archivo a .zip.

El tamaño del .bacpac archivo es directamente proporcional al número de registros en una base de datos (teniendo en cuenta la relación de compresión).

El tamaño del archivo .bak depende no solo de los datos, sino también del tamaño de los índices.

A veces esto puede ser un problema, verifique por ejemplo esta vieja discusión

Por lo tanto, la .bacpac el archivo suele ser más pequeño.

Ejecuté las pruebas más simples con la base de datos AdventureWorks y obtuve estos resultados.

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

¿Debería utilizar .bacpac para reducir el tamaño de mi copia de seguridad?

No.

La aplicación Exportar / Importar nivel de datos tiene varios inconvenientes importantes que son críticos para grandes bases de datos:

  1. Esta no es una operación transaccionalmente consistente. Las tablas se exportan secuencialmente. Puede haber un problema con la clave externa. Esto es doblemente malo porque solo lo descubres cuando intentas recuperarte. Por lo tanto, al realizar esta operación, debe tomar una instantánea de la base de datos y exportar la instantánea.
  2. La exportación e importación demoran mucho más. En el momento en que necesite ejecutar urgentemente una restauración, no podrá hacerlo porque la restauración desde .bacpac tardará varias horas en completarse.
  3. La exportación puede cargar significativamente el servidor, especialmente para grandes tablas, lo que, junto con el punto anterior, hace que las copias de seguridad periódicas sean una decisión dudosa.

La copia de seguridad clásica creada con el comando BACKUP DATABASE carece de estos inconvenientes; para ahorrar espacio, use Recuperación en un momento determinado

La aplicación de capa de datos de exportación / importación puede considerarse como una forma de crear una copia de seguridad solo para bases de datos pequeñas, en aquellos casos en los que no tiene acceso a el sistema de archivos. En este caso, no exporte la base de datos en vivo bajo ninguna circunstancia, asegúrese de crear una instantánea para una exportación consistente.

Respuesta

Bueno, la mayor diferencia es que los datos están comprimidos (usando zip) para el archivo .bacpac que no es el caso con un .bak normal expediente. Simplemente comprima el archivo .bak y compruebe que es mucho más pequeño;)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *