Jeg har lavet sikkerhedskopier af mine SQL Server 2014 Express-databaser til import til andre servere og bemærket en forskel i filstørrelse mellem .bacpac
og .bak
.
Hvorfor er en .bacpac
-fil så lille sammenlignet med en .bak
fil i samme database?
Tak for enhver indsigt!
Svar
A
-
.bacpac
file = Schema + Data. Bemærk, at data er BCP” redigeret ved hjælp af oprindeligt format (ikke kan læses af mennesker).-
Du kan omdøbe
.bacpac
til.zip
faktiske indhold. -
Du kan bruge
...DAC\bin\sqlpackage.exe
kommandolinjen til at udtrække.bacpac
indhold programmatisk. -
Det er et øjebliksbillede der inkluderer brugerdata + skema fra SQL Server eller Azure SQL Database.
-
–
- Backup (har normalt
.bak
udvidelse) = En FULD databasesikkerhedskopi indeholder en komplet kopi af databasen og giver et enkelt tidspunkt, hvor databasen kan gendannes. En fuld sikkerhedskopi indeholder nogle transaktionslogoptegnelser, så den gendannede komponent (database, fil eller filgruppe) kan gøres transaktionelt konsistent.
En BACPAC
er ikke en erstatning for en FULD backup. Det er kun et øjebliksbillede, der kan bruges til at flytte en database fra en server til en anden (eller til sky) og arkivering af en eksisterende database i et åbent format .
Fra min test nedenfor er resultaterne
Kommentarer
- Logfilen er sandsynligvis den største årsag til størrelsesforskellen.
- Jeg ' Jeg antager der ' er heller ingen indeksdata i .bacpac, hvilket sandsynligvis vil være en STOR bidragyder til filstørrelse.
Svar
En sikkerhedskopi oprettet via BACKUP DATABASE
kommando (.bak
) er en side-for-side-kopi af en database. Bemærk, at SQL Server-database ikke kun indeholder datasider. Der er også sider med indekser, der kan være store. Flere detaljer her
En sikkerhedskopi oprettet ved hjælp af Export Data-Tier Application (.bacpac
) operation er simpelthen en eksporteret række fra en database i XML-format placeret i et arkiv. Du kan manuelt se indholdet af BACPAC, bare ændre udvidelsen af denne fil til .zip.
Størrelsen på .bacpac
-filen er direkte proportional med antallet af poster i en database (under hensyntagen til kompressionsforholdet).
Størrelsen på .bak
-filen afhænger ikke kun af dataene, men også af størrelsen på indekserne.
Nogle gange kan dette være et problem, tjek for eksempel denne gamle diskussion
Derfor er .bacpac
filen er normalt mindre i størrelse.
Jeg kørte de enkleste tests med AdventureWorks -databasen og fik disse resultater.
AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb
Skal jeg bruge .bacpac til at reducere min backup-størrelse?
Nej.
Export \ Import Data Tier Application har flere væsentlige ulemper, der er kritiske for store databaser:
- Dette er ikke en transaktionskonsistent handling. Tabellerne eksporteres sekventielt. Der kan være et problem med den fremmede nøgle. Dette er dobbelt dårligt, fordi du kun opdager det, når du prøver at komme sig. Derfor skal du tage et øjebliksbillede af databasen og eksportere øjebliksbilledet, når du udfører denne handling.
- Det tager meget længere tid for både eksport og import. I det øjeblik, hvor du hurtigt har brug for at køre en gendannelse, vil du ikke være i stand til at gøre dette, fordi gendannelsen fra .bacpac vil tage flere timer at gennemføre.
- Eksport kan indlæse serveren betydeligt, især for store tabeller, der sammen med det foregående punkt gør regelmæssig sikkerhedskopiering til en tvivlsom beslutning.
Klassisk sikkerhedskopi oprettet ved hjælp af BACKUP DATABASE
kommandoen er blottet for disse ulemper, for at spare plads skal du bruge Gendannelse af punkt i tid
Eksport \ Import data-tier-applikation kan betragtes som en måde at oprette en sikkerhedskopi til kun små databaser, i de tilfælde hvor du ikke har adgang til filsystemet. I dette tilfælde må du under ingen omstændigheder eksportere den levende database. Sørg for at oprette et øjebliksbillede til ensartet eksport.
Svar
Nå, den største forskel er, at data komprimeres (ved hjælp af zip) til .bacpac
-filen, hvilket ikke er tilfældet med en normal .bak
fil. Komprimer bare .bak
-filen og se at den er meget mindre;)