Dlaczego plik .bacpac jest tak mały w porównaniu z plikiem .bak w tej samej bazie danych?

Robiłem kopie zapasowe moich baz danych SQL Server 2014 Express w celu zaimportowania na inne serwery i zauważyłem różnicę w rozmiarze pliku między .bacpac i .bak.

Dlaczego plik .bacpac jest tak mały w porównaniu z .bak tej samej bazy danych?

Dziękujemy za wszelkie uwagi!

Odpowiedź

A

  • .bacpac file = Schemat + Dane. Należy pamiętać, że dane są BCP” usuwane przy użyciu formatu natywnego czytelne dla człowieka).

    • Możesz zmienić nazwę .bacpac na .zip, aby zobaczyć rzeczywista zawartość.

    • Możesz użyć wiersza polecenia ...DAC\bin\sqlpackage.exe , aby wyodrębnić .bacpac zawartość programowo.

    • Jest to migawka , który obejmuje dane użytkownika + schemat z SQL Server lub Azure SQL Database.

  • Kopia zapasowa (zwykle ma rozszerzenie .bak) = PEŁNA kopia zapasowa bazy danych zawiera pełną kopię bazy danych i zapewnia pojedynczy punkt w czasie, do którego można przywrócić bazę danych. Pełna kopia zapasowa zawiera niektóre rekordy dziennika transakcji, dzięki czemu przywracany składnik (baza danych, plik lub grupa plików) może być spójny transakcyjnie.

BACPAC nie zastępuje PEŁNEJ kopii zapasowej. To tylko migawka, której można użyć do przeniesienia bazy danych z jednego serwera do inną (lub do chmury) i archiwizowanie istniejącej bazy danych w otwartym formacie .

Z mojego testu poniżej są wyniki

tutaj wprowadź opis obrazu

Komentarze

  • Plik dziennika jest prawdopodobnie największym powodem różnicy wielkości.
  • Ja ' d zakładam, że ' nie ma również danych indeksu w .bacpac, co prawdopodobnie będzie DUŻYM czynnikiem przyczyniającym się do rozmiaru pliku.

Odpowiedź

Kopia zapasowa utworzona za pomocą (.bak) to kopia bazy danych strona po stronie. Zauważ, że baza danych SQL Server zawiera nie tylko strony danych. Istnieją również strony z indeksami, które mogą być duże. Więcej szczegółów tutaj

Kopia zapasowa utworzona za pomocą aplikacji Export Data-Tier (.bacpac) operacja to po prostu wyeksportowanie wierszy z bazy danych w formacie XML umieszczonych w archiwum. Możesz ręcznie wyświetlić zawartość BACPAC, po prostu zmień rozszerzenie tego pliku na .zip.

Rozmiar .bacpac jest wprost proporcjonalny do liczby rekordów w bazie danych (biorąc pod uwagę współczynnik kompresji).

Rozmiar pliku .bak zależy nie tylko od danych, ale także od rozmiaru indeksów.

Czasami może to być problem, sprawdź na przykład tę starą dyskusję

Dlatego .bacpac jest zwykle mniejszy.

Przeprowadziłem najprostsze testy z bazą danych AdventureWorks i otrzymałem te wyniki.

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

Czy powinienem użyć .bacpac, aby zmniejszyć rozmiar kopii zapasowej?

Nie.

Aplikacja poziomu eksportu i importu danych ma kilka istotnych wad, które są krytyczne dla dużych baz danych:

  1. Nie jest to operacja spójna transakcyjnie. Tabele są eksportowane sekwencyjnie. Być może wystąpił problem z kluczem obcym. Jest to podwójnie złe, ponieważ odkrywasz to tylko wtedy, gdy próbujesz dojść do siebie. Dlatego wykonując tę operację, musisz zrobić migawkę bazy danych i wyeksportować migawkę.
  2. Zarówno eksport, jak i import trwa znacznie dłużej. W chwili, gdy musisz pilnie przeprowadzić przywracanie, nie będziesz w stanie tego zrobić, ponieważ przywracanie z .bacpac zajmie kilka godzin.
  3. Eksport może znacznie obciążyć serwer, szczególnie w przypadku dużych tabele, co wraz z poprzednim punktem sprawia, że regularne tworzenie kopii zapasowych jest wątpliwą decyzją.

Klasyczna kopia zapasowa utworzona za pomocą polecenia BACKUP DATABASE jest pozbawiona tych wad. Aby zaoszczędzić miejsce, użyj Odzyskiwanie do określonego momentu

Aplikacja warstwy danych Export \ Import może być traktowana jako sposób na utworzenie kopii zapasowej tylko dla małych baz danych, w przypadkach, gdy nie masz dostępu do system plików. W takim przypadku pod żadnym pozorem nie eksportuj aktywnej bazy danych, upewnij się, że utworzyłeś migawkę w celu spójnego eksportu.

Odpowiedź

Cóż, największa różnica polega na tym, że dane są kompresowane (przy użyciu zip) dla pliku .bacpac, co nie ma miejsca w przypadku zwykłego .bak plik. Po prostu skompresuj plik .bak i zobacz, że jest dużo mniejszy;)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *