Hvorfor er en .bacpac-fil så liten sammenlignet med en .bak-fil i samme database?

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

skriv inn bildebeskrivelse her

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:

  1. 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.
  2. 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.
  3. 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;)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *