Zwykle po rozpoczęciu tworzenia kopii zapasowej nie zezwalamy na zatwierdzanie zmian lub baza danych nie będzie dostępna. Mam na myśli, że baza danych będzie w trybie pojedynczego użytkownika, ale chcę rozpocząć tworzenie kopii zapasowej i zwolnić db do użytku. Ponadto po uruchomieniu kopii zapasowej nie chcę, aby bieżące zmiany były zapisywane w pliku kopii zapasowej. Chcę wiedzieć, jak mogę to osiągnąć w programie Microsoft SQL Server 2012. Proszę o pomoc.
Cóż, najpierw wyjaśnię mój problem. Obecnie ustawiam bazę danych na tryb pojedynczego użytkownika, dopóki kopia zapasowa nie zostanie ukończona. Ten tryb służy mojemu celowi unikania zmian danych podczas tworzenia kopii zapasowej. Ale moja aplikacja jest powiązana z wieloma bazami danych (każda baza danych jest ze sobą połączona i istnieją różne pliki db, które są tworzone co miesiąc). Tworzenie kopii zapasowych wszystkich tych baz danych stało się żmudnym procesem i, co ważniejsze, muszę trzymać użytkowników z dala od systemu podczas tworzenia kopii zapasowej.
Szukam mechanizmu tworzenia kopii zapasowych, który spełni poniższe wymagania.
- Rozpocznij tworzenie kopii zapasowej wszystkich dbs na raz i zwolnij db do użytku.
- Ponieważ bazy danych są ze sobą połączone, chcę zachować spójność danych w plikach kopii zapasowych. Z powodu tego wymogu spójności danych nie chcę, aby zmiany były zapisywane w moim pliku kopii zapasowej.
Chcę tylko - wykonać kopię zapasową wszystkich dbs w danym momencie.
źródło
Odpowiedzi:
Zakładam, że Twoim zadaniem jest utworzenie zestawu kopii zapasowych, w których możesz przywrócić je wszystkie do jednego statycznego punktu (bez otwartych transakcji) (wszystkie w synchronizacji). Podobne do tego, co zrobi ci punkt wyciszenia w DB2. Niestety w SQL Server nie ma nic, co mogłoby to zrobić. Jednak zakładając, że twoje bazy danych są w trybie PEŁNEGO odzyskiwania, możesz zrobić coś podobnego.
Możesz utworzyć pojedynczą
MARKED
transakcję we wszystkich bazach danych jednocześnie . Następnie wykonujesz kopię zapasową dziennika transakcji dla każdej bazy danych. Zakładając, że nadążasz za kopiami zapasowymi dziennika (które i tak powinieneś być), kopie zapasowe dziennika nie zajmują dużo czasu. I nie ma potrzeby powstrzymywania nikogo przed wejściem do systemu (może z wyjątkiem wystarczająco długiego czasu, aby utworzyć zaznaczoną transakcję).W tym momencie, jeśli musisz wykonać przywracanie, wykonaj czynności
RESTORE STOPBEFOREMARK
na każdej ze swoich baz danych. Spowoduje to przywrócenie wszystkich baz danych do tego samego punktu (na podstawie Twojej transakcji). Uwaga: Istnieje również STOPATMARK, jeśli chcesz uwzględnić tę transakcję.Jeśli chcesz przykład, mam go w powyższym linku wraz z sporo dodatkowej lektury.
Zdaję sobie sprawę, że to nie odpowiada dokładnie na twoje pytanie, ale mam nadzieję, że rozwiązuje twój problem.
źródło
Twoje pytanie jest podobne do pytania, na które odpowiedziałem - Tworzenie kopii zapasowych i przywracanie baz danych SQL Server 10-20 do ~ stanu synchronicznego?
Zakładając, że model odzyskiwania bazy danych jest PEŁNY, powinieneś zrobić pełną kopię zapasową, a następnie użyć Oznaczonych transakcji .
Obala wasze mity ...
Z mitów o kopiach zapasowych (zdecydowanie zalecamy przeczytanie wszystkich mitów o kopiach zapasowych) :
zaznaczone Transakcje pomogą ci wykonać spójne kopie zapasowe dziennika i będziesz mógł je przywrócić za pomocą
RESTORE ... WITH STOPBEFOREMARK = '<mark_name>'
Pamiętaj, że transakcje oznaczone dla wszystkich baz danych w instancji są również rejestrowane w
dbo.logmarkhistory
tabeli wMSDB
bazie danych.źródło
więcej szczegółów: https://blogs.technet.microsoft.com/letsdothis/2013/11/06/backup-multiple-sql-databases-in-a-single-swoop/
źródło