Backup bazy danych Microsoft SQL Server, część 2

0

Z artykułu dowiesz się, jak zautomatyzować tworzenie kopii zapasowych, dlaczego należy regularnie sprawdzać spójność baz danych oraz jak odtworzyć bazę bez utraty znajdujących się w niej w momencie wystąpienia awarii danych. Artykuł kończy punkt poświęcony odtwarzaniu instancji serwera SQL, czyli metodom uruchomienia tego serwera po uszkodzeniu dysku, na którym znajdowały się bazy systemowe, lub po awarii systemu operacyjnego.

Tworzenie kopii zapasowych jest jednym z tych zadań administracyjnych, które zawsze powinno zostać zautomatyzowane. Tylko takie podejście pozwala:

  1. Wyeliminować błędy ludzkie polegające na pominięciu lub przypadkowej zmianie ustawień kopii bazy danych lub dziennika transakcyjnego.
  2. Zagwarantować, że kopie zapasowe będą tworzone zgodnie z przyjęta strategią, a więc zawsze w tym samym czasie i podczas minimalnej aktywności użytkowników (np. w nocy lub w dni wolne od pracy).
  3. Automatycznie powiadamiać administratora o wykonanych oraz nieudanych (np. z powodu niedostępności bazy lub braku miejsca w urządzeniu kopii zapasowej) kopiach zapasowych.

Użytkownicy płatnych edycji serwera SQL do automatyzacji procesu tworzenia kopii zapasowych mogą wykorzystać zadania usługi SQL Server Agent lub uruchamiane przez tę usługę plany konserwacji (Maintenance Plans).

Żeby przy pomocy kreatora utworzyć plan konserwacji, w ramach którego tworzone będą kopie bazy i jej dziennika transakcyjnego:

  1. Połącz się z serwerem SQL za pomocą konsoli SSMS.
  2. W oknie eksploratora obiektów rozwiń sekcję Management.
  3. Kliknij prawym przyciskiem myszy folder Maintenance Plans i z menu kontekstowego wybierz opcję Maintenance Plan Wizard.
  4. Podaj nazwę tworzonego planu (np. AdvWorks Backup) i wybierz opcję Separate schedules for each task – w ten sposób możliwe będzie określenie różnych częstotliwości tworzenia kopi zapasowych bazy i dziennika.
  5. Odpowiadając na kolejne pytanie kreatora, wybierz odpowiednie opcje, np. Back Up Database (Full) oraz Back Up Database (Transaction Log).
  6. Ponieważ każde zadanie uruchamiane będzie według osobnego harmonogramu, kreator nie umożliwi zmiany kolejności ich wykonywania – odpowiadając na kolejne pytanie, wystarczy kliknąć Next.
  7. Skonfiguruj tworzenie pełnej kopii zapasowej (rysunek 1):

a.       Wybierz archiwizowaną bazę lub bazy danych.

b.      Określ czas, przez który kopia nie będzie mogła zostać nadpisana.

c.       Wskaż lokalizację docelowego urządzenia kopii zapasowej (zalecane jest przechowywanie kopii zapasowych w oddzielnych, zapisywanych w utworzonych dla każdej bazy danych podfolderach, plikach). Wskazany folder musi wcześniej istnieć, natomiast podfoldery, w których zapisane będą kopie poszczególnych baz, zostaną automatycznie utworzone.

d.      Zdecyduj, czy kopie zapasowe będą kompresowane (w większości przypadków włączenie kompresji znacząco skraca czas zarówno tworzenia, jak i odtwarzania kopii).

e.       Określ harmonogram, według którego tworzona będzie kopia zapasowa.

image001
Rysunek 1. Przykładowa pełna kopia bazy danych zapisywana będzie w folderze E:\Backup\AdventureWorks, w plikach, których nazwa będzie zawierała czas utworzenia kopii, a zadanie wykonania kopii uruchamiane będzie w każdą niedzielę o godzinie 0:00

  1. W taki sam sposób skonfiguruj tworzenie kopii dziennika transakcyjnego – pamiętaj tylko, że kopie dziennika powinny być wykonywane znacznie częściej, np. co 30 minut.
  2. Określ lokalizację plików zawierających raport z wykonania planu konserwacji (jeżeli zdefiniowani zostali operatorzy, taki raport może też zostać wysłany na ich adresy
    e-mail) i zakończ działanie kreatora.

Wynikiem pracy kreatora będzie plan konserwacji oraz dwa zadania (Jobs) i harmonogramy (Schedules) usługi SQL Server Agent. Uruchamiając te zadania (w tym celu należy rozwinąć sekcję SQL Server Agent/Jobs, kliknąć nazwę zadania prawym przyciskiem myszy i wybrać opcję Start Job at Step), przetestujesz działanie utworzonego planu konserwacji (rysunek 2).

image002
Rysunek 2. Automatycznie utworzone kopie zapasowe

Użytkownicy wszystkich edycji serwera SQL, w tym darmowej edycji Express, mogą zautomatyzować tworzenie kopii zapasowych przy pomocy skryptów języka T-SQL. Poniższy skrypt tworzy pełne kopie wybranych baz danych (baz, których nazwy zostały wymienione w klauzuli WHERE) i zapisuje je w plikach znajdujących się w podanym (jako wartość zmiennej @path) folderze, przy czym nazwa każdego pliku kopii zapasowej będzie zawierała nazwę zarchiwizowanej bazy danych uzupełnioną o czas jej utworzenia:

DECLARE @name VARCHAR(50) — database name
DECLARE @path VARCHAR(256) — path for backup files
DECLARE @fileName VARCHAR(256) — filename for backup
DECLARE @fileDate VARCHAR(20) — used for file name
SET @path = ‚E:\Backup\’
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + ‚_’ + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),’:’,”)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name IN (‚AdventureWorks’,’pubs’)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + ‚_’ + @fileDate + ‚.BAK’
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor

Uruchomienie powyższego skryptu spowoduje utworzenie pełnych kopii zapasowych wybranych baz danych.

Przygotowany skrypt powinien być uruchamiany według określonego harmonogramu. Do jego automatycznego uruchamiania można użyć zadania usługi SQL Server Agent lub harmonogramu zadań systemu Windows. Ponieważ edycja Express nie zawiera usługi SQL Sever Agent, jej użytkownicy muszą wybrać drugie rozwiązanie. Żeby zautomatyzować tworzenie kopii zapasowych:

  1. Zapisz utworzony skrypt języka T-SQL w pliku, np. w pliku Backup.sql.
  2. Utwórz w Notatniku skrypt wiersza polecenia uruchamiający za pomocą narzędzia SQLCMD zapisany plik Backup.sql na wybranym serwerze SQL (kropka oznacza domyślną, lokalną instancję serwera SQL, a parametr –E pozwala połączyć się z tym serwerem jako użytkownik Windows, który uruchomił skrypt): SQLCMD -i E:\Backup\Backup.sql -S . -E
  3. Uruchom (dostępne między innymi w sekcji System i zabezpieczenia w Panelu sterowania) narzędzie Harmonogram zadań.
  4. Kliknij prawym przyciskiem myszy pozycję Harmonogram zadań i z menu kontekstowego wybierz opcję Utwórz zadanie podstawowe.
  5. Odpowiadając na kolejne pytania kreatora: podaj nazwę tworzonego zadania, np. SQL Backup; określ częstotliwość jego uruchamiania, np. co tydzień; podaj czas uruchamiania zadania, np. niedziela o godzinie 0:00; jako typ akcji wybierz Uruchom program; wskaż przygotowany plik wiersza polecenia, np. E:\Backup\Backup.cmd.
  6. Dwukrotnie kliknij utworzone zadanie lewym przyciskiem myszy i w zakładce Ogólne wybierz opcje Uruchom nienależnie od tego, czy użytkownik jest zalogowany oraz, jeżeli kopia zapisywana jest na lokalnym dysku, Nie przechowuj hasła (rysunek 3).

image003
Rysunek 3. Tak skonfigurowane zadanie będzie uruchamiane zawsze o określonej godzinie, niezależnie od tego, kto w tym czasie będzie zalogowany do komputera

1
2
3
4
5
PODZIEL SIĘ

BRAK KOMENTARZY

ZOSTAW ODPOWIEDŹ