Ho eseguito backup dei miei database SQL Server 2014 Express per limportazione su altri server e ho notato una differenza nella dimensione del file tra .bacpac
e .bak
.
Perché un file .bacpac
è così piccolo rispetto a un .bak
file dello stesso database?
Grazie per eventuali approfondimenti!
Risposta
A
-
.bacpac
file = Schema + Data. Nota che i dati sono BCP” editi utilizzando il formato nativo (non leggibile da umano).-
Puoi rinominare
.bacpac
in.zip
per vedere contenuto effettivo. -
Puoi utilizzare
...DAC\bin\sqlpackage.exe
per estrarre il.bacpac
contenuto in modo programmatico. -
È una istantanea che include dati utente + schema da SQL Server o database SQL di Azure.
-
–
- Backup (comunemente ha
.bak
estensione) = Un backup COMPLETO del database contiene una copia completa del database e fornisce un unico punto nel tempo in cui il database può essere ripristinato. Un backup completo contiene alcuni record del log delle transazioni in modo che il componente ripristinato (database, file o filegroup) possa essere reso coerente dal punto di vista delle transazioni.
Un BACPAC
non sostituisce un backup COMPLETO. È solo unistantanea che può essere utilizzata per spostare un database da un server a un altro (o nel cloud) e archiviando un database esistente in un formato aperto .
Dal mio test, di seguito sono riportati i risultati
Commenti
- Il file di registro è probabilmente il motivo principale della differenza di dimensioni.
- ' presumo che ci sia ' non contiene dati di indice neanche nel .bacpac, il che probabilmente contribuisce alla dimensione del file.
Risposta
Un backup creato tramite BACKUP DATABASE
command (.bak
) è una copia pagina per pagina di un database. Si noti che il database di SQL Server contiene non solo pagine di dati. Esistono anche pagine con indici che possono essere di grandi dimensioni. Maggiori dettagli qui
Un backup creato utilizzando lapplicazione Export Data-Tier (.bacpac
) loperazione è semplicemente una riga esportata da un database in formato XML posta in un archivio. Puoi visualizzare manualmente i contenuti di BACPAC, basta modificare lestensione di questo file in .zip.
La dimensione del .bacpac
il file è direttamente proporzionale al numero di record in un database (tenendo conto del rapporto di compressione).
La dimensione del file .bak
dipende non solo dai dati ma anche dalla dimensione degli indici.
A volte questo può essere un problema, controlla ad esempio questa vecchia discussione
Pertanto, .bacpac
di solito è di dimensioni inferiori.
Ho eseguito i test più semplici con il database AdventureWorks e ho ottenuto questi risultati.
AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb
Devo usare .bacpac per ridurre le dimensioni del backup?
No.
Export \ Import Data Tier Application presenta diversi svantaggi significativi che sono critici per database di grandi dimensioni:
- Questa non è unoperazione consistente a livello di transazione. Le tabelle vengono esportate in sequenza. Potrebbe esserci un problema con la chiave esterna. Questo è doppiamente negativo perché lo scopri solo quando cerchi di riprenderti. Pertanto, quando si esegue questa operazione, è necessario acquisire unistantanea del database ed esportare listantanea.
- Ci vuole molto più tempo per lesportazione e limportazione. Nel momento in cui hai urgente bisogno di eseguire un ripristino, non sarai in grado di farlo perché il ripristino da .bacpac richiederà diverse ore per essere completato.
- Lesportazione può caricare in modo significativo il server, specialmente per grandi tabelle, che, insieme al punto precedente, rende i backup regolari una decisione dubbia.
Il backup classico creato utilizzando il comando BACKUP DATABASE
è privo di questi inconvenienti, per risparmiare spazio usa Ripristino point-in-time
Lapplicazione di livello dati Export \ Import può essere considerata un modo per creare un backup solo per database di piccole dimensioni, nei casi in cui non si ha accesso a il file system. In questo caso, non esportare il database live in nessuna circostanza, assicurati di creare unistantanea per unesportazione coerente.
Risposta
Bene, la differenza più grande è che i dati vengono compressi (utilizzando zip) per il file .bacpac
, il che non è il caso di un normale .bak
file. Comprimi semplicemente il file .bak
e verifica che sia molto più piccolo;)