Częste tworzenie kopii zapasowych SQL DB

10

Obecnie mam zaplanowane zadanie, które uruchamia się każdej nocy o 2 rano, które wywołuje SQLCMD.exe i przekazuje mu skrypt .sql w celu wykonania kopii zapasowej (pokazano poniżej). Jesteśmy dość małą firmą z rosnącymi potrzebami ze względu na duży rozwój po stronie biznesowej. Utrata 1 dni danych w tym momencie kosztowałaby dziesiątki tysięcy dolarów w porównaniu do kilkuset w tym roku w zeszłym roku. Dopóki nie będę mógł migrować tej platformy DB do innego rozwiązania, w którym występuje dublowanie danych z dużą nadmiarowością, takiego jak SQL Azure, co mogę zrobić, aby uzyskać częstsze kopie zapasowe? Czy poniższy skrypt zmusza bazę danych do przejścia w tryb offline? Czy mogę uruchomić ten skrypt z użytkownikami wchodzącymi w interakcje z bazą danych?

USE CompanyCRM;
GO
BACKUP DATABASE CompanyCRM
TO DISK = 'D:\CRMBackups\CompanyCRMCRM.Bak'
   WITH FORMAT,
      MEDIANAME = 'CompanyCRM_Backup',
      NAME = 'Full Backup of CompanyCRM';
GO

Aktualizacja

Wow, oczywiście znacznie bardziej oddana społeczność DBA tutaj niż na SO. Dziękujemy za opinie do tej pory. Brakuje tylko „hows”. Pokazałem powyżej polecenie SQL, którego używam do codziennego tworzenia kopii zapasowych, ale przykładowymi przykładami przyrostowych kopii zapasowych dzienników są MIA. To nie jest duży DB, obecnie działa na SQLExpress. Kiedy mówię HA lub SQL Azure, mam na myśli konkretną architekturę, której nie mamy jako małej firmy. Ta instancja jest obecnie uruchomiona na naszym TYLKO serwerze. Jeśli ten serwer ulegnie awarii, nasz czas na odzyskanie staje się punktem krytycznym. Właśnie dlatego SQL Azure staje się atrakcyjny.

RSolberg
źródło
zredagowałem moją odpowiedź na twoją aktualizację, mam nadzieję, że to pomoże

Odpowiedzi:

5

EDYCJA, z twojej aktualizacji

Jak już powiedziałeś, że możesz stracić dane o wartości 1 dni, po prostu ustawiłbym bazy danych w trybie odzyskiwania PROSTEGO. Możesz wtedy zrobić PEŁNY każdego ranka i / lub wieczorem. Jeśli chcesz się chronić w ciągu dnia, możesz wykonać różnicową kopię zapasową bazy danych, jedną z takich sytuacji na wszelki wypadek. Spowoduje to przechwycenie wszelkich zmian dokonanych od czasu pełnej kopii zapasowej. Jeśli znam ramy czasowe, w których dzieje się dużo danych wejściowych, mogę wrzucić tam tego rodzaju kopię zapasową po jej zakończeniu. Może to zaoszczędzić ludziom czasu na odzyskiwanie, więc nie muszą oni wprowadzać dodatkowych danych.

Ponieważ jest to twój jedyny serwer, upewnię się, że korzystasz z DBCC CHECKDB dla baz danych. Kopie zapasowe nie przynoszą żadnego pożytku, gdy dowiadujesz się, że są uszkodzone (myślę, że ktoś też o tym wspomniał). Możesz prawdopodobnie znaleźć kilka skryptów, aby skonfigurować zaplanowane zadanie sprawdzania ERRORLOGA SQL dla komunikatu DBCC w celu wychwycenia błędów. SQL Server natywnie nie ostrzega o błędach zwracanych z komunikatów DBCC, więc chyba że ręcznie sprawdzasz za każdym razem skrypt, który to robi, może to pomóc.

Polecenie różnicowego tworzenia kopii zapasowych:


USE CompanyCRM; 
GO 
BACKUP DATABASE CompanyCRM 
   TO DISK = 'D:\CRMBackups\CompanyCRMCRM_diff.Bak'    
WITH FORMAT, DIFFERENTIAL,
MEDIANAME = 'CompanyCRM_Backup',       
NAME = 'Full Backup of CompanyCRM'; 
GO 

źródło
1
@Shawn: OP powiedział, że „utrata 1 dni danych w tym momencie kosztowałaby dziesiątki tysięcy dolarów w porównaniu do kilkuset w tym roku w ubiegłym roku”, gdzie powiedział, że może stracić dane warte 1 dzień ?!
Marian,
8
  • Kopie zapasowe w programie SQL Server nie zakłócają pracy. Oznacza to, że baza danych nadal działa. Przeczytaj dokumentację.
  • Codziennie wykonuj pełną kopię zapasową, a następnie wysyłaj (kopiuj) kopie zapasowe dziennika (ponownie dokumentacja zawiera ... dokumentację) częściej - co około 15 minut.
TomTom
źródło
4
Wydaje mi się, że tworzenie kopii zapasowych jest czymś, do czego nie potrzebujesz instrukcji, ale pełna lektura dokumentacji - jest krytyczna dla biznesu ORAZ - na poważnie - ważna. Nie gotowanie jajek. Zatrudnij profesjonalistę.
TomTom
2
Szkoda, że ​​nie mogę głosować w dół na odpowiedzi na tej stronie ...
RSolberg
1
@RSolberg: Odpowiedź TomTom jest ważna, podobnie jak inne porady, które już otrzymałeś. Sugeruję, abyś nie oczekiwał, że któryś z respondentów pokaże ci naprawdę podstawową składnię kopii zapasowej. Chociaż widzę, że Shawn był na tyle uprzejmy, żeby to zrobić. Zaprojektowanie strategii BACKUP nie wystarczy. Musisz połączyć go ze strategią PRZYWRACANIA, aby wszystko było ważne, gdy będziesz go potrzebować.
Marian
2
@RSolberg: przepraszam, że cię wkurzyłem. To nie jest zamierzone. Ale w jaki sposób ta społeczność nie pomogła? Masz dobre i poprawne odpowiedzi (i komentarze). Twoja własna wiadomość brzmiała: „Utrata 1 dni danych w tym momencie kosztowałaby dziesiątki tysięcy dolarów w porównaniu do kilkuset w tym roku w ubiegłym roku”. Potrzebujesz więc solidnej strategii tworzenia kopii zapasowych i przywracania, aby się tam nie dostać. Solidna strategia wynika z bardzo dobrej znajomości podstaw. Które pochodzą z przeczytania i zrozumienia podręcznika. Przepraszam, jeśli zrozumiałeś coś jeszcze!
Marian
2
Zgadzam się z @RSolberg, że większość odpowiedzi tutaj nie pokazuje „jak” to zrobić, ale także dlatego, że w pytaniu brakowało szczegółowych informacji „czego” nie zrozumiałeś Russell. Musisz powiedzieć nam nieco więcej o tym, czego potrzebujesz, ale zgadzam się z tobą, że ta strona nie powinna dotyczyć „RTFM n00b”. Ponadto, jak zauważyłeś, masz 10 000 na przepełnienie stosu , więc na pewno rozumiesz oznaczanie komentarzy, które są niegrzeczne lub zakłócające. W przyszłości powinieneś to zrobić wcześniej, niż gotować się z frustracji.
jcolebrand
6

Pierwszą rzeczą, którą musisz zrobić, to dowiedzieć się, ile danych możesz stracić. Do tego czasu nie będziesz miał pojęcia, jak często wykonywać kopię zapasową bazy danych. To nie jest liczba, którą powinieneś wymyślić. Jest to coś, o czym musiałby zdecydować biznes (lub dyrektor generalny w mniejszej firmie). Pierwszy numer, z którym wrócą, to 0 minut. Co można zrobić, ale będzie to bardzo kosztowne. W rzeczywistości najmniejsza ilość danych, dla których można wykonać kopie zapasowe, to co około 2 minuty. Jeśli ilość danych zmieniających się w systemie jest wystarczająco mała, możesz wykonywać kopie zapasowe co minutę.

Aby wykonać kopie zapasowe dziennika transakcji, musisz to zrobić, aby przełączyć bazę danych w tryb PEŁNEGO odzyskiwania.

Jeśli możesz sobie pozwolić na utratę danych o wartości 5 minut, prawdopodobnie będziesz chciał codziennie wykonywać pełne kopie zapasowe, a kopie zapasowe dziennika transakcji co 5 minut. Jeśli możesz stracić dane o wartości 15 minut, będziesz chciał wykonywać pełne kopie zapasowe i kopie zapasowe dziennika transakcji co 15 minut.

Inną opcją byłoby robienie co tydzień pełnych kopii zapasowych, codzienne różnicowe kopie zapasowe i kopie zapasowe dziennika transakcji co x minut, o czym mówię powyżej.

Należy pamiętać, że im częściej trzeba wykonywać kopie zapasowe, tym więcej plików będzie trzeba przywrócić w przypadku awarii bazy danych lub usunięcia danych. Rozsądne może być wykonywanie różnicowych kopii zapasowych w ciągu dnia, aby skrócić czas potrzebny do przywrócenia bazy danych.

Wszystkie kopie zapasowe korzystające z bazy danych BACKUP i instrukcji BACKUP LOG są wykonywane online i nie uniemożliwiają użytkownikom dostępu do bazy danych.

mrdenny
źródło
Właściwie jestem w stanie ocenić, ile danych możemy stracić. Małe firmy wymagają od ludzi noszenia wielu czapek, ponieważ CIO zazwyczaj codziennie angażuję się w podejmowanie decyzji biznesowych.
RSolberg
1
Dzięki temu dyskusja będzie znacznie krótsza.
mrdenny
3

Powiedzmy, że masz wspólny scenariusz biznesowy, a Twój najbardziej pracowity czas to: 9–17 od poniedziałku do piątku. Następnie sugerowałbym: pełne tworzenie kopii zapasowych w niedzielę wieczorem. Różnicowe kopie zapasowe o godzinie 8:00, 18:00 i 1:00 (w celu skrócenia czasu odzyskiwania). Rejestruj kopie zapasowe co godzinę lub w zależności od wymagań Twojej firmy.

W zależności od okresu przechowywania, powinieneś mieć zadanie automatycznego czyszczenia, aby usunąć stare pliki kopii zapasowej. Wszystkie te można utworzyć za pomocą planów konserwacji SQL. Sprawdź ten link dla SQL 2005 .

Powinieneś przechowywać swoje kopie zapasowe na jakiejś formie nadmiarowego dysku (dublowanego) lub możesz użyć taśm do przechowywania poza siedzibą. Użytkownicy mogą kontynuować pracę w systemie podczas wykonywania kopii zapasowych.

StanleyJohns
źródło
2

Nie robiłbym pełnej kopii zapasowej każdej nocy. Jeśli jest to duża baza danych, może to zająć bardzo dużo czasu, nie wspominając o tym, że zajmuje dużo miejsca w mediach. Wykonuj pełne kopie zapasowe w każdy weekend i różnicowe kopie zapasowe każdej nocy. Następnie wykonaj kopię zapasową dziennika transakcji (zakładając, że baza danych jest w pełni przywracana) co godzinę lub co pół godziny, ale upewnij się, że pliki .bak i .trn znajdują się na osobnym dysku w przypadku awarii dysku.

Thomas Stringer
źródło
Tagi zostały utracone, nie jest to duża baza danych. Obecnie działa na instancji SQLExpress.
RSolberg
1
Dziesiątki tysięcy dolarów na Expressie? Ciekawy!
Andrei Rînea,
Nie całkiem. W zależności od tego, co przechowujesz (bez tekstów, bez plików binarnych) - to 10 gigabajtów danych. Możesz uruchomić system księgowy dla dużej firmy - POWAŻNIE dużej firmy - w 10 gigabajtach. Sklep internetowy z 100 000 zamówień dziennie może z łatwością zrobić zakupy w 10 gigabajtach.
TomTom
1

Czy możesz zsynchronizować w chmurze folder kopii zapasowych w nocy, aby uzyskać miejsce poza miejscem przechowywania? Ponieważ jestem całkiem pewien, że dotyczy to firmy medycznej, czy są takie, które są wystarczająco bezpieczne, aby zachować zgodność z HiPA? A może po prostu superszyfruj je?

Czy skrypt przynajmniej umieszcza kopię kopii zapasowej w udziale sieciowym? W ten sposób, jeśli wysadzi się fizyczne pudełko ...


źródło
Tak, wszystkie powyższe. W rzeczywistości tworzymy kopie zapasowe na dysku sieciowym, który jest dublowany, i kopiujemy dane z tego środowiska do bezpiecznego centrum danych.
RSolberg