sobota, 5 października 2013

Tworzenie backupu bazy - MSSQL 2008 cz.7

Niewątpliwie jednym z najważniejszych, jak nie najważniejszym zagadnienie podczas nadzoru nad infrastrukturą programową jest tworzenie kopi zapasowych najbardziej wrażliwych danych dla firmy. Brak robienia kopi zapasowych czy słabe dbanie o kondycję sprzętu może skończyć się nieciekawie dla ważnych firmowych danych.

Baza musi posiadać model odzyskiwania FULL:
ALTER DATABASE AdventureWorks2008 
  SET RECOVERY FULL
GO



W wersji 2008, MS SQL posiada możliwość stworzenia backupu na 4 różne sposoby:

1) Pełny backup - pierwszym krokiem w przygotowaniu poprawnego postępowania z polityką backupu jest utworzenie najbardziej dokładnej kopi danych, do tego służy pełny backup. Zawiera on dokładną kopię wszystkich danych jakie mamy w bazie, pomijając puste strony danych.

BACKUP DATABASE AdventureWorks2008
   TO DISK = 'c:\Backup\AdventureWorks2008_1.bak'
   MIRROR TO DISK = 'd:\Backup\AdventureWorks2008_2.bak'
   WITH COMPRESSION, INIT, CHECKSUM, STOP_ON_ERROR
GO

Powyższy kod tworzy pełną kopię naszej bazy, dodatkowo tworzona jest kopia lustrzana. W ten sposób możemy zrobić do 4 kopi lustrzanych w jednym podejściu, ważne aby kopie wykorzystywały ten sam nośnik danych, czyli jeżeli korzystamy z dysku twardego musimy pozostałe kopie również na takim nośniku utworzyć.
Ostatni wiersz to opcje, które rozszerzają możliwość backupu:
-COMPRESSION - silnik bazy domyślnie kompresuje dane,
-INIT - nadpisuje obecny plik kopi nowymi danymi, jeżeli ustawimy NOINIT dopisuje dane do obecnego pliku, czyli rozszerzy go o najnowsze kopie bazy,
-CHECKSUM - weryfikuje sumę kontrolną backupu, sprawdza czy kopia jest poprawnie stworzona oraz zapisana na dysku,
-STOP_ON_ERROR - w momencie wystąpienia błędu proces backupu jest przerywany, jeżeli ustawimy CONTINUE_PAST_ERROR backup zostanie zrobiony pomimo błędów.

2) Kopia zapasowa dziennika transakcji -  w dzienniku transakcji zapisywane są wszelkie zmiany dokonywane na bazie. Każda kolejna zmiana posiada swój unikalny numer począwszy od 1. Oczywiście na początku musimy utworzyć pełną kopię;)

Na początku dodajmy do bazy testową wartość, np.

USE AdventureWorks2008
GO

INSERT INTO HumanResources.Department (Name, GroupName)
VALUES('Test1', 'Test1')
GO

BACKUP LOG AdventureWorks2008
TO DISK = 'c:\Backup\AdventureWorks2008_1.trn'
WITH COMPRESSION, INIT, CHECKSUM, STOP_ON_ERROR
GO

Wykonajmy ponownie powyższe kroki:

USE AdventureWorks2008
GO

INSERT INTO HumanResources.Department (Name, GroupName)
VALUES('Test2', 'Test2')
GO

BACKUP LOG AdventureWorks2008
TO DISK = 'c:\Backup\AdventureWorks2008_2.trn'
WITH COMPRESSION, INIT, CHECKSUM, STOP_ON_ERROR
GO

3) Kopia różnicowa - kopia tego typu zawiera zmienione dane, w porównaniu do kopi pełnej:

USE AdventureWorks2008
GO

INSERT INTO HumanResources.Department (Name, GroupName)
VALUES('Test3', 'Test3')
GO

BACKUP DATABASE AdventureWorks2008
TO DISK = 'c:\Backup\AdventureWorks2008_1.dif'
MIRROR TO DISK = 'd:\Backup\AdventureWorks2008_2.dif'
WITH DIFFERENTIAL, COMPRESSION, INIT, FORMAT, STOP_ON_ERROR
GO

Opcje różnią się nieco w stosunku do pełnej kopi:

-DIFFERENTIAL - wskazuje na przyrostową kopię bazy danych ,
- COPY_ONLY - z tą opcją możemy przenieść najnowszą bazę do środowiska testowego lub deweloperskiego. Taka opcje nie powoduje zmiany bazy, jak sama nazwa wskazuje jest to tylko kopiowanie danych bez ich zmiany. 

4) Możemy również backup zrobić przy pomocy kreatora:







Większość opcji zaznaczonych na czerwono trzeba oczywiście zmienić według własnych potrzeb.
Jeżeli chcemy zrobić kopię różnicową wybieramy zamiast Full w Backup type opcję Differential (screen nr.2)





Brak komentarzy:

Prześlij komentarz