Jeg har tatt sikkerhetskopier av SQL Server 2014 Express-databasene mine for import til andre servere og merket en forskjell i filstørrelse mellom .bacpac
og .bak
.
Hvorfor er en .bacpac
-fil så liten sammenlignet med en .bak
fil i samme database?
Takk for innsikten!
Svar
A
-
.bacpac
file = Schema + Data. Vær oppmerksom på at data er BCP» redigert med opprinnelig format (ikke lesbar av Human).-
Du kan gi nytt navn til
.bacpac
til.zip
for å se faktisk innhold. -
Du kan bruke
...DAC\bin\sqlpackage.exe
kommandolinje for å trekke ut.bacpac
innhold programmatisk. -
Det er et øyeblikksbilde som inkluderer brukerdata + skjema fra SQL Server eller Azure SQL Database.
-
–
- Backup (har vanligvis
.bak
utvidelse) = En FULL databasesikkerhetskopi inneholder en komplett kopi av databasen og gir et enkelt tidspunkt der databasen kan gjenopprettes. En full sikkerhetskopi inneholder noen transaksjonsloggposter slik at den gjenopprettede komponenten (database, fil eller filgruppe) kan gjøres transaksjonsmessig konsistent.
En BACPAC
er ikke en erstatning for en FULL sikkerhetskopi. Det er bare et øyeblikksbilde som kan brukes til å flytte en database fra en server til en annen (eller til sky) og arkivering av en eksisterende database i et åpent format .
Fra testen min er resultatene nedenfor
Kommentarer
- Loggfilen er sannsynligvis den største årsaken til størrelsesforskjellen.
- Jeg ' Jeg antar at der ' er ingen indeksdata i .bacpac heller, noe som sannsynligvis vil være en STOR bidragsyter til filstørrelsen.
Svar
En sikkerhetskopi opprettet via BACKUP DATABASE
-kommando (.bak
) er en side-for-side-kopi av en database. Merk at SQL Server-databasen ikke bare inneholder datasider. Det er også sider med indekser som kan være store. Flere detaljer her
En sikkerhetskopi opprettet ved hjelp av Export Data-Tier Application (.bacpac
) operasjonen er ganske enkelt en eksportert rad fra en database i XML-format plassert i et arkiv. Du kan se innholdet i BACPAC manuelt, bare endre utvidelsen til denne filen til .zip.
Størrelsen på .bacpac
-filen er direkte proporsjonal med antall poster i en database (med tanke på kompresjonsforholdet).
Størrelsen på .bak
-filen avhenger ikke bare av dataene, men også av størrelsen på indeksene.
Noen ganger kan dette være et problem, sjekk for eksempel denne gamle diskusjonen
Derfor er .bacpac
filen er vanligvis mindre i størrelse.
Jeg kjørte de enkleste testene med AdventureWorks -databasen og fikk disse resultatene.
AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb
Skal jeg bruke .bacpac for å redusere sikkerhetskopistørrelsen?
Nei.
Export \ Import Data Tier Application har flere betydelige ulemper som er kritiske for store databaser:
- Dette er ikke en transaksjonskonsistent operasjon. Tabellene eksporteres sekvensielt. Det kan være et problem med den utenlandske nøkkelen. Dette er dobbelt så dårlig fordi du bare oppdager det når du prøver å komme deg. Derfor, når du utfører denne operasjonen, må du ta et øyeblikksbilde av databasen og eksportere øyeblikksbildet.
- Det tar mye lengre tid for både eksport og import. For øyeblikket når du raskt trenger å kjøre en gjenoppretting, vil du ikke kunne gjøre dette fordi det vil ta flere timer å gjenopprette gjenopprettingen fra .bacpac.
- Eksportering kan laste serveren betydelig, spesielt for store tabeller, som sammen med forrige punkt gjør regelmessige sikkerhetskopier til en tvilsom beslutning.
Klassisk sikkerhetskopi opprettet ved hjelp av BACKUP DATABASE
-kommandoen er uten disse ulempene, for å spare plass, bruk Gjenoppretting av punkt i tid
Eksporter \ Import datalagsapplikasjon kan betraktes som en måte å lage en sikkerhetskopi bare for små databaser, i de tilfeller du ikke har tilgang til filsystemet. I dette tilfellet må du ikke eksportere den levende databasen under noen omstendigheter. Sørg for å lage et øyeblikksbilde for konsekvent eksport.
Svar
Vel, den største forskjellen er at dataene er komprimert (ved hjelp av zip) for .bacpac
-filen, noe som ikke er tilfelle med en normal .bak
fil. Bare komprimer .bak
-filen og se at den er mye mindre;)