Ćwiczenie 3 Tworzenie kopii bezpieczeństwa bazy danych. 1 Wprowadzenie teoretyczne. ................................................................................................................. 2 Typy kopii bezpieczeństwa .............................................................................................................. 2 Modele odtwarzania baz danych i kopie bezpieczeństwa ................................................................ 3 Model Full recovery ..................................................................................................................... 3 Model Bulk-logged recovery ....................................................................................................... 3 Model Simple recovery ................................................................................................................ 3 Tworzenie narzędzia archiwizacyjnego ........................................................................................... 3 Kontrolowanie urządzeń archiwizacyjnych przy pomocy Transact-SQL ................................... 3 Sprawdzanie spójności bazy danych ................................................................................................ 4 Inne sposoby sprawdzenia integralności .......................................................................................... 5 Tworzenie kopii bezpieczeństwa bazy danych ................................................................................ 6 Kopie bezpieczeństwa na pojedynczym nośniku archiwizującym (single-device) ..................... 6 Kopie bezpieczeństwa równolegle rozproszone (parallel striped) ............................................... 6 Wiele kopii bezpieczeństwa na pojedynczym nośniku ................................................................ 6 Polecenie BACKUP DATABASE dla całej bazy danych ............................................................... 6 Polecenie DIFFERENTIAL BACKUP DATABASE ..................................................................... 8 Polecenie BACKUP LOG ................................................................................................................ 8 Przebieg ćwiczenia ............................................................................................................................... 9 Przykładowe pytania kontrolne. ......................................................................................................... 15 Wprowadzenie teoretyczne. Typy kopii bezpieczeństwa Można stworzyć kilka rodzajów kopii bezpieczeństwa w SQL Serverze 2000. Zostaną omówione: kopia bezpieczeństwa całej bazy danych (full), różnicowa kopia bazy danych (differential), kopie bezpieczeństwa pliku i grupy plików oraz kopie bezpieczeństwa dziennika transakcji. W tym rozdziale wszystkie kopie bezpieczeństwa z wyjątkiem kopii dziennika transakcji będą nazywane kopiami bazy danych. Poniżej przedstawiono omówienie różnych typów kopii bezpieczeństwa: Pełna kopia bezpieczeństwa bazy danych (full backing) — tworzy kopię całej bazy danych, włączając w to tabele, indeksy, tabele systemowe i obiekty bazy danych, (które są zawarte w tych tabelach systemowych). Kopia bezpieczeństwa bazy danych tworzy również kopię wpisów do dziennika transakcji ale nie przechowuje pustych stron ani nie usuwa z bazy danych żadnych wpisów w dzienniku transakcji. Różnicowa kopia bezpieczeństwa bazy danych(differential backing) — tworzy kopię wszystkich stron danych, które były modyfikowane od czasu tworzenia ostatniej kopii całej bazy danych. Odtwarzanie z kopii tego typu jest szybsze niż odtwarzanie z kopii bezpieczeństwa dziennika transakcji. Różnicowe kopii zapasowe są używane tylko w kombinacji z pelnymi kopiami zapasowymi. Kopia bezpieczeństwa pliku i/lub grupy plików zakłada tworzenie kopii bezpieczeństwa jedynie wybranych plików lub grup plików, a nie całej bazy danych. Jeżeli jedna tabela lub więcej tabel lub indeksów ma zostać umieszczonych w odrębnych grupach plików zamiast pozostawienia wszystkich danych i indeksów w domyślnej grupie plików, można niezależnie utworzyć kopię danych. Zaletą tego rozwiązania jest to, że jeśli pojedynczy dysk ulegnie uszkodzeniu a została zrobiona kopia plików z tego dysku, można odtworzyć uszkodzone pliki bez potrzeby odtwarzania całej bazy danych. Ten typ kopii bezpieczeństwa jest szybszy niż odtwarzanie kopii całej bazy danych. Kopia bezpieczeństwa dziennika transakcji zawiera kopię wpisów wszystkich zmian jakie zostały wykonane w bazie danych w zadanym czasie. Zawiera wyrażenia uruchamiane przez użytkowników, jak również działania drugoplanowe systemu, takie jak alokacja przestrzeni w bazie danych. Dzięki transakcjom zapisywanym w dzienniku można odtworzyć wszystkie działania (transakcje). Inną korzystną własnością dziennika transakcji jest to, że można powtórzyć (uruchomić ponownie) transakcje do określonego punktu w czasie. Gdy 2 Modele odtwarzania baz danych i kopie bezpieczeństwa SQL Server 2000 wprowadził modele odtwarzania, które są przydatne przy planowaniu kopii bezpieczeństwa. Wybór modelu odtwarzania zależy od rodzaju baz danych i od typu wykonywanych kopii bezpieczeństwa. Dostępne są trzy następujące modele odtwarzania: Pełny (Full recovery) Rejestracja masowa (Bulk-logged recovery) Prosty (Simple recovery). Model Full recovery Model Full recovery jest najczęściej uruchamianym modelem. Model ten obsługuje wszystkie kopie baz danych (pełną, różnicową, kopię dziennika transakcji, kopię pliku/grupy). Można odtworzyć dane do punktu w czasie lub do „zaznaczonej” transakcji. Jest to domyślne ustawienie dla nowej bazy tworzonej przy pomocy wersji Standard i Enterprise Editon SQL Servera. Odpowiadająca temu modelowi strategia kopii bezpieczeństwa powinna obejmować pełne kopie bezpieczeństwa, kopie dziennika transakcji, oraz opcjonalni , różnicowe kopie bezpieczeństwa. Model Bulk-logged recovery Po wykonaniu wybranych poleceń, takich jak SELECT INTO, BULK INSERT, CREATE INDEX, WRITETEXT i UPDATETEXT, zostają zapisane bardzo duże ilości danych. Przy zastosowaniu modelu Full recovery, każdy wiersz dodawany do SQL Servera jest w pełni odtwarzany w dzienniku transakcji. Można sobie wyobrazić, że oznacza to, że dane są zapisywane dwukrotnie. Zapewnia to maksimum możliwości odtworzenia danych ale może być nadmierne w stosunku do potrzeb. W trybie Bulk-logged, dane modyfikowane przez te polecenia nie są w pełni rejestrowane; obrazy modyfikowanych stron są rejestrowane po załadowaniu strony. Z powodu metody używanej do rejestracji danych w bazie nie jest możliwe odtwarzanie do punktu w czasie. Można odtworzyć jedynie do punktu końcowego kopii bazy danych lub do końca kopii bezpieczeństwa dziennika transakcji. Model Simple recovery Model simple recovery jest najbardziej restrykcyjny. Zasadniczo, model ten jest używany gdy jedyne co jest istotne to powrót do ostatniej pełnej kopii bezpieczeństwa lub kopii różnicowej. Kopie bezpieczeństwa dziennika transakcji są dostępne i dziennik transakcji jest okresowy czyszczony. Jeżeli baza danych jest taka, że jedyne co potrzeba zrobić w razie awarii, to odtworzyć dane do pojedynczego punktu w czasie (do czasu tworzenia ostatniej kopii całkowitej lub różnicowej), to dobrze jest zastosować prostą rejestrację (simple logging). Najmniejsza możliwa ilość informacji jest rejestrowana w dzienniku transakcji i dziennik utrzymuje najmniejszy rozmiar. Występuje nadal rejestracja niektórych transakcji więc SQL Server może zachować wewnętrzną spójność i obsługiwać obiekty takie jak wyzwalacze, używające dziennika transakcji. Tworzenie narzędzia archiwizacyjnego Pierwszym krokiem w przygotowaniu do wykonywania kopii baz danych jest utworzenie narzędzia archiwizacyjnego. Pomimo tego, że nie ma technicznie potrzeby posiadania predeklarowanych narzędzi archiwizujących, upraszcza to składnię poleceń archiwizujących, jak również pomaga administratorowi, który musi pracować w systemie po zakończeniu pracy przez użytkowników. Narzędzie archiwizujące jest to wskaźnik, w katalogu systemowym SQL Servera (tabela systemowa sysdevices w bazie danych master), zawierający logiczną nazwę i fizyczną ścieżkę dostępu do pliku lokalnego dysku sztywnego, lokalnego napędu taśmowego lub zdalnego pliku na innym komputerze. Kopie bezpieczeństwa nie mogą być wykonywane przy pomocy zdalnych napędów taśmowych. Po określeniu polecenia BACKUP, należy odwołać się raczej do logicznej nazwy niż określać pełną ścieżkę i nazwę pliku za każdym razem. Podejście to pomaga zredukować nakład czasu na powtarzające się wpisywanie wszystkich informacji i jest mniej narażone na błędy. Kontrolowanie urządzeń archiwizacyjnych przy pomocy Transact-SQL Można utworzyć urządzenie archiwizujące przy pomocy systemowej procedury składowej sp_addumpdevice: sp_addumpdevice [@devtype =] 'device_type', [@logicalname =] 'logical_name', [@physicalname =] 'physical_name' 3 [, {[@cntrltype =] cntrltype | [@devstatus =] 'device_status'}] Znaczenie składni: device_type jest typem urządzenia, na które ma wskazywać urządzenie archiwizujące. Jest to jeden z możliwych wariantów: Disk Tape Pipe wskaźnik do fizycznego pliku na lokalnym dysku twardym wskaźnik do lokalnego napędu taśmowego wskaźnik do Named Pipe logical_name jest nazwą, jaka ma być używana dla kopii bezpieczeństwa przez polecenia odtwarzania, przy odwoływaniu się do fizycznego położenia kopii. physical_name jest fizyczną lokalizacją urządzenia archiwizacyjnego. Dla dysków, będzie to ścieżka i nazwa pliku. Dla taśmy, będzie to wskaźnik do napędu taśmowego. Dla Named Pipe jest to adres sieciowy biblioteki Named Pipe. cntrltype jest przestarzałym parametrem obsługiwanym dla zachowania zgodności z wcześniejszymi wersjami. device_status określa czy nagłówki ANSI taśmy są ignorowane podczas zapisu do tego urządzenia archiwizacyjnego. Jeżeli wartość parametru device_type zostanie określona jako Tape, SQL Server będzie miał informację, że oznacza to NoSkip. Czyli jeśli taśma posiada informacje nagłówkowe o wcześniejszych kopiach na taśmie, SQL Server nie ignoruje ich automatycznie i nie reinicjalizuje taśmy. Jeżeli takie działanie SQL Servera (automatyczna reinicjalizacja taśmy nawet gdy zawiera dane) jest pożądane należy określić wartość: Skip. Aby usunąć urządzenie archiwizujące, należy uruchomić systemową procedurę składową: sp_dropdevice [@logicalname =] 'logical_name', [@delfile =] 'delfile' Składnia: logical_name jest nazwą, jaka ma być używana w poleceniach tworzenia kopii i odtwarzania danych, przy odwoływaniu się do fizycznej lokalizacji kopii bezpieczeństwa. delfile — jeżeli parametr został użyty — określa fizyczny plik kopii, który powinien być skasowany (jeśli jest na dysku). Sprawdzanie spójności bazy danych Jeżeli jest dostępne urządzenie archiwizujące, wszystko jest prawie przygotowane do utworzenia kopii bezpieczeństwa baz danych. Może się zdarzyć, że zajdzie potrzeba przedsięwzięcia dodatkowych kroków przed rozpoczęciem tworzenia kopii. Jak zostało wcześniej wspomniane, uszkodzona kopia bazy danych jest bezwartościowa. Dlatego, należy sprawdzić, czy kopia jest poprawna. Microsoft dostarcza dwóch opcji do weryfikacji integralności bazy danych i kopii bezpieczeństwa. Polecenie tworzenia kopii bezpieczeństwa posiada opcję do kontroli poprawności kopii bezpieczeństwa po jej wykonaniu. Zbiór poleceń również dostarcza możliwości zweryfikowania integralności bazy danych. Teraz należy się skupić na możliwościach sprawdzania spójności jaka występuje w bazach danych SQL Servera. Jeżeli baza danych jest w porządku przed wykonywaniem jej kopii, na ogół kopii bezpieczeństwa również jest poprawna. Aby sprawdzić spójność bazy danych, należy skorzystać z rozszerzeń narzędzia Database Consistency Checker (DBCC). Kilka różnych narzędzi DBCC sprawdza różne aspekty integralności bazy danych. Warto uruchomić polecenie DBCC CHECKDB: DBCC CHECKDB ('database_name' [, Noindex | { Repair_Allow_Data_Loss | Repair_Fast | Repair_Rebuild }]) [ With {[ALL_ERRORMSGS] | [NO_INFOMSGS], [TABLOCK],[ESTIMATEONLY], [PHYSICAL_ONLY], [TABLERESULTS]] } ] Znaczenie składni: database_name jest nazwą bazy danych, dla której ma być sprawdzona integralność. Noindex określa, że integralność nie klastrowanych indeksów nie ma być sprawdzana. (Indeksy zostaną omówione w rozdziale 13). Repair_Allow_Data_Loss określa wszystkie rodzaje napraw, jakie mają być przeprowadzone prze opcję Repair_Rebuild. Opcja ta pozwala również „wyczyścić” uszkodzone strony i strony tekst/obraz bez względu 4 na to czy powoduje to utratę danych czy nie. Baza danych musi być w trybie pojedynczego użytkownika (singleuser) aby określić tę opcję. Repair_Fast modyfikuje uszkodzone indeksy, jeżeli jest to bezpieczne (żadne dane nie zostaną utracone używając tej opcji). Opcja ta wykonuje również szybkie i łatwe naprawy (takie jak uszkodzone klucze indeksu). Baza danych musi być w trybie pojedynczego użytkownika, aby było możliwe określenie tej opcji. Repair_Rebuild naprawia uszkodzone indeksy, podobnie jak opcja Repair_Fast ale są to bardziej czasochłonne naprawy, takie jak ponowne utworzenie uszkodzonych indeksów. Baza danych musi być w trybie pojedynczego użytkownika, aby było możliwe określenie tej opcji. ALL_ERRORMSGS zwraca wszystkie komunikaty z polecenia. Domyślnie, SQL Server wstrzymuje zwracanie komunikatów o błędach po otrzymaniu 200 komunikatów. Być może opcja ta nie będzie nigdy potrzebna. NO_INFOMSGS określa, że będą zgłaszane jedynie znaczące komunikaty o błędach; nie będą natomiast przedstawiane komunikaty informacyjne. Opcja ta jest na ogół używana przez większość czasu. TABLOCK określa, że współdzielone blokady tabel powinny być używane w zamian za domyślne blokady stron. Używanie tego parametru przyspiesza działanie poleceń DBCC jeśli system jest zajęty ale utrudnia pracę konkurencyjnych użytkowników, którzy mogą być w tym przypadku blokowani przez dane polecenia DBCC. ESTIMATEONLY oznacza, że użytkownik chce wiedzieć ile wolnej przestrzeni w bazie danych tempdb jest potrzebne do uruchamiania polecenie bez uruchamiania CHECKDB. PHYSICAL_ONLY oznacza, ze użytkownik chce sprawdzić jedynie fizyczną integralność bazy danych (a nie logiczną integralność). Opcja ta działa szybciej i wyłapuje większość typowych uszkodzeń w SQL Serverze (takich jak problemy z dyskiem, kontrolerem dysku i uszkodzonymi stronami). TABLERESULTS określa, że rezultaty poleceń DBCC będą zwracane w formacie polecenia SELECT (jako zbiór „wynikowy”). Opcja ta, nowa w SQL Serverze 2000, pozwala zachować wyniki tego polecenia (i innych poleceń DBCC) w postaci tabeli, co powala uniknąć zagłębiania się w raporty w poszukiwaniu interesującego wyniku. Teraz należy uruchomić następujący kod, aby sprawdzić spójność i integralność bazy danych: DBCC CHECKDB ('pubs') With NO_INFOMSGS, TABLERESULTS The command(s) completed successfully. Jeżeli zostanie ominięta część polecenia With NO_INFOMSGS, ukaże się wiele wierszy (dwa dla każdej tabeli w bazie danych). Inne sposoby sprawdzenia integralności Następne trzy polecenia DBCC CHECKCATALOG, DBCC CHECKALLOC i DBCC CHECKTABLE są podzbiorem DBCC CHECKDB. Polecenia te wymagają, aby użytkownik należał do roli serwera sysadmin lub roli baz danych db_owner. Te same warunki stosują się do używania DBCC CHECKDB. DBCC CHECKCATALOG Polecenie DBCC CHECKCATALOG sprawdza integralność referencyjną tabel systemowych. DBCC CHECKCATALOG ( 'database_name') [WITH NO_INOFMSGS] W tej składni database_name oznacza nazwę bazy danych, której integralność na być sprawdzona. Poniżej przedstawiono przykład użycia tego polecenia: DBCC CHECKCATALOG ('Pubs') DBCC CHECKALLOC DBCC CHECKALLOC sprawdza, czy informacje na temat alokacji (oznaczającej — jakie rozszerzenia są własnością jakich tabel) w bazie danych są poprawne. DBCC CHECKALLOC ('database_name' [, NOINDEX | { REPAIR_ALLOW_DATA_LOSS |REPAIR_FAST | REPAIR_REBUILD }] ) [WITH {[ALL_ERRORMSGS | NO_INFOMSGS], [TABLOCK] [,ESTIMATEONLY] [, TABLERESULTS]}] Wszystkie parametry w tej składni mają takie samo znaczenie jak w przypadku DBCC CHECKDB. DBCC CHECKTABLE Polecenie DBCC CHECKTABLE wykonuje te same operacje co DBCC CHECKDB ale jest ograniczone do pojedynczej tabeli. Jest to bardzo przydatne jeżeli ma zostać sprawdzona jedna duża tabela ale nie ma potrzeby sprawdzania całej bazy danych. 5 DBCC CHECKTABLE ('table_name' [, NOINDEX | index_id |{ REPAIR_ALLOW_DATA_LOSS |REPAIR_FAST | REPAIR_REBUILD }] ) [WITH {[ALL_ERRORMSGS | NO_INFOMSGS], [TABLOCK] [,ESTIMATEONLY], [PHYSICAL_ONLY].[TABLERESULTS]}] W przypadku tej składni wszystkie opcje są takie same jak dla DBCC CHECKDB z wyjątkiem dwóch: table_name jest nazwą tabeli, której integralność ma zostać sprawdzona ndex_id oznacza, że ma zostać sprawdzona integralność pojedynczego indeksu Tworzenie kopii bezpieczeństwa bazy danych Można stworzyć kopię bezpieczeństwa na pojedynczym nośniku archiwizacyjnym lub na wielu nośnikach; można także umieścić wiele kopii bezpieczeństwa na pojedynczym nośniku archiwizacyjnym. Za każdym razem, odwołując się do nośnika archiwizacyjnego, należy określić nazwę pliku zamiast polecenia BACKUP. Kopie bezpieczeństwa na pojedynczym nośniku archiwizującym (single-device) Kopia na pojedynczym nośniku jest domyślnym i najczęstszym sposobem archiwizacji. Jeżeli każda baza danych jest archiwizowana na odrębnym nośniku, można przeprowadzić strategię kopiowania jeden-do-jednego. Jeżeli kopia bezpieczeństwa ma być na dyskach, podejście to jest zalecane. Jeżeli z pewnych przyczyn został utracony plik, została w związku z tym utracona pojedyncza kopia bezpieczeństwa pojedynczej bazy danych a nie wiele kopii bezpieczeństwa zawartych w pojedynczym pliku. Jeżeli kopia bezpieczeństwa jest na taśmie, tworzenie kopii wielu baz danych na pojedynczej taśmie jest bardziej akceptowalne (i mniej kosztowne). Kopie bezpieczeństwa równolegle rozproszone (parallel striped) Kopie bezpieczeństwa równolegle rozproszone pozwalają na tworzenie kopii pojedynczej bazy danych na wielu nośnikach archiwizacyjnych. Wystarczy podać więcej niż jeden nośnik archiwizacyjny w poleceniu BACKUP. SQL Server 2000 inicjuje wątek dla każdego wybranego nośnika w kopii równolegle rozproszonej. Istnieje możliwość używania w tym przypadku do 24 nośników (oraz wynikających z tego wątków). Silnym argumentem za używaniem kopii bezpieczeństwa równolegle rozproszonych są kopie na taśmach. Można podłączyć wiele taśm w tym samym czasie. Jeżeli tworzenie kopii bazy danych zajmuje trzy godziny, a zakupi się dwa dodatkowe napędy taśmowe (czyli w sumie trzy), można z dużym prawdopodobieństwem przyjąć, że tworzenie kopii bezpieczeństwa zakończy się w godzinę. Istotną sprawą jest to, że nie potrzeba tej samej ilości napędów taśmowych do odtworzenia bazy danych z kopii bezpieczeństwa. Jest to szczególnie istotne w przypadku odtwarzania po awarii. Nie ma gwarancji, że posiada się taką samą ilość napędów taśmowych na serwerze odtwarzającym. Jednak, nadal potrzeba posiadać wszystkie taśmy aby odtworzyć bazę danych. Wiele kopii bezpieczeństwa na pojedynczym nośniku Można również umieścić wiele kopii bezpieczeństwa na pojedynczym nośniku archiwizacyjnym. Jest to domyślna konfiguracja w przypadku korzystania z taśm. Należy się spodziewać, ze użytkownik będzie chciał umieścić tak wiele kopii bezpieczeństwa na pojedynczej taśmie jak to jest możliwe. Można również zastosować tę metodę w przypadku dysków; jednak to podejście nie jest polecane dla dysków — jeżeli pojedynczy plik zostanie utracony lub ulegnie uszkodzeniu, wszystkie kopie bezpieczeństwa na tym nośniku są stracone. Polecenie BACKUP DATABASE dla całej bazy danych Tworzenie bazy danych jest następnym logicznym krokiem (końcowym). Można utworzyć kopię bezpieczeństwa przy pomocy polecenia BACKUP: BACKUP DATABASE {database_name | @database_var} TO backup_device [, ...n] [WITH [BLOCKSIZE = {blocksize | @blocksize_variable}] [[,] DESCRIPTION = {text | @text_variable}] [[,] DIFFERENTIAL] [[,] EXPIREDATE = {date | @date_var} 6 | RETAINDAYS = {days | @days_var}] [[,] PASSWORD = {pwd | @pwd_var} [[,] FORMAT | NOFORMAT] [[,] {INIT | NOINIT}] [[,] MEDIADESCRIPTION = {text | @text_variable}] [[,] MEDIANAME = {media_name | @media_name_variable}] [[,] MEDIAPASSWORD = {media_pwd | @media_pwd_variable}] [[,] [NAME = {backup_set_name | @backup_set_name_var}] [[,] {NOSKIP | SKIP}] [[,] {NOUNLOAD | UNLOAD}] [[,] {NOREWIND | REWIND}] [[,] [RESTART] [[,] STATS [= percentage]] gdzie backup_device :: = { { backup_device_name | @backup_device_name_var} | { DISK | TAPE | PIPE} = {'temp_backpup_device' | @temp_backup_device_var} } Poniżej przedstawiono znaczenie poszczególnych opcji. Opisy nie są powtarzane, chyba że są specyficzne dla jednego z poleceń, przedstawionych później. Może zachodzić potrzeba odwołania się do opisu opcji BACKUP LOG i BACKUP FILE/FILEGROUP. database_name jest nazwą bazy danych, której kopia ma zostać wykonana @database_var jest nazwą bazy danych, której kopia ma być wykonana, z tym wyjątkiem, że jest przedstawiona w postaci zmiennej. backup_device jest albo nazwą nośnika archiwizacyjnego albo określeniem zmiennej dla urządzenia archiwizacyjnego. Można również określić nazwę pliku, taśmy lub Named Pipe, które mają zostać wykorzystane do tworzenia kopii bezpieczeństwa. Ponownie, można określić ten parametr jako zmienną. blocksize określa rozmiar bloku, jaki ma być używany w przypadku taśmy lub Named Pipe. Należy sprawdzić w dokumentacji Windows 2000 lub instrukcji obsługi napędu taśmowego, jakie rozmiary bloku są zalecane. DESCRIPTION jest to opis kopii bezpieczeństwa, zawierający do 255 znaków. Ponownie, można określić zmienną dla tego parametru. DIFFERENTIAL zasługuje na własną sekcję dla pełnego opisu. Zobacz kolejną sekcję. EXPIREDATE jest datą ważności taśmy (terminem, po którym zapis na taśmie powinna być usunięty). Nie można dokonać zapisu na taśmę przed upływem terminu EXPIREDATE bez określenia parametrów nadpisywania. RETAINDAYS przynosi ten sam efekt co EXPIREDATE, z wyjątkiem tego, że należy określić liczbę dni a nie konkretną datę. PASSWORD jest hasłem, jakie ma być wprowadzone aby było możliwe odtworzenie z tej kopii bezpieczeństwa. Kopia bezpieczeństwa jest zabezpieczona jedynie hasłem. Nie jest w żaden sposób szyfrowana. FORMAT | NOFORMAT pozwala żądać, aby taśma była ponownie sformatowana. Wszelkie zabezpieczenia hasłem lub istniejące dane są ignorowane. Używanie tego parametru jest odpowiednikiem obydwu opcji INIT i SKIP. INIT | NOINIT określa, czy inicjalizować nośnik archiwizujący przed zapisem kopii bezpieczeństwa. NOINIT jest opcją domyślną, oznaczającą, że jeżeli na danym nośniku archiwizującym jest inna kopia bezpieczeństwa, bieżąca kopia zostanie dołączona (dopisana) na taśmę lub do pliku dyskowego. Jeżeli urządzenie nie zawiera żadnej kopii, jest inicjalizowane a następnie kopia jest zapisywana. INIT powoduje nadpisanie istniejącej zawartości taśmy lub pliku dyskowego. Dla taśm, jeżeli minęła ich data ważności lub parametr MEDIANAME nie jest zgodny, taśma nie jest inicjalizowana. Należy określić opcję SKIP jeżeli to było zamierzeniem (jeżeli było to zamierzeniem, można również skorzystać z opcji FORMAT). MEDIADESCRIPTION jest innym polem opisu dla kopii bezpieczeństwa, o długości 255 znaków. MEDIANAME jest opisem zbioru kopii bezpieczeństwa, o długości 128 znaków. Nazwa ta jest używana do porównań w przypadku nadpisywania. Jeżeli planuje się używanie pojedynczej taśmy do przetrzymywania kopii bezpieczeństwa systemu Windows 2000 i SQL Servera należy określić MEDIANAME. 7 MEDIAPASSWORD jest hasłem, jakie ma być używane przy tworzeniu kopii bezpieczeństwa jako część zestawu nośników, jak również hasłem, jakie będzie wymagane przy odtwarzaniu z tego zestawu nośników. NAME jest kolejną nazwą dla zestawu kopii bezpieczeństwa. Ponownie, parametr ten może być określony jako zmienna. NOSKIP | SKIP określa czy opuścić czytanie nagłówka taśmy podczas zapisywania na taśmę. Jeżeli została wybrana opcja NOSKIP (domyślna), nagłówek taśmy jest czytany i sprawdzane są parametry EXPIREDATE i MEDIANAME aby nie spowodować przypadkowego nadpisania taśmy. NOUNLOAD | UNLOAD określa, czy taśma ma zostać wyjęta po zakończeniu tworzenia kopii bezpieczeństwa. NOREWIND |REWIND określa czy taśma na zostać przewinięta po zakończeniu tworzenia kopii bezpieczeństwa. RESTART pozwana na ponowne uruchomienie tworzenia kopii bezpieczeństwa jeżeli zostało przerwane i ma być kontynuowane od punku przerwania. RESTART jest poprawny jedynie gdy tworzy się kopie bezpieczeństwa na wielu taśmach. STATS = percentage określa jak często użytkownik będzie powiadamiany o postępie w tworzeniu kopii bezpieczeństwa. Domyślną wartością jest 10, oznaczające, że po ukończeniu każdego kolejnego 10 % tworzenia kopii SQL Server zwróci komunikat określający postęp archiwizacji. Polecenie BACKUP ma wiele opcji dlatego przyda się przykład. Czasem próbka kodu bardzo pomaga w wyjaśnieniu znaczenia polecenia. Następujący skrypt tworzy nowy nośnik archiwizacyjny dla bazy danych pubs, sprawdza integralność bazy a następnie tworzy kopię bezpieczeństwa tej bazy. exec sp_addumpdevice 'disk', 'pubs_backup', 'd:\program files\Microsoft SQL Server\mssql\backup\pubs_backup.bak' go use pubs dbcc checkdb ('pubs') With NO_INFOMSGS BACKUP DTABASE pubs to pubs_backup WITH INIT Polecenie DIFFERENTIAL BACKUP DATABASE Jak zostało powiedziane wcześniej, kopia różnicowa kopiuje wszystkie zmodyfikowane strony z bazy danych — co oznacza — wszystkie strony, które zmieniły się od czasu wykonania ostatniej pełnej kopii bazy danych. Jeżeli wykonywana jest kopia różnicowa, a następnie kolejna kopia różnicowa, ta druga kopia różnicowa zawiera wszystkie zmiany te same co pierwsza plus wszelkie zmienione strony, które zmieniły się od czasu wykonania pierwszej kopii. Warto zauważyć, że kopia różnicowa ma sens jedynie jako kolejna po wykonaniu pełnej kopii bezpieczeństwa bazy danych. Teraz należy wykonać kopię różnicową bazy danych pubs. Po pierwsze, należy stworzyć tabelę i dodać do niej jeden wiersz (czyli jest to coś nowego do archiwizowania). Nie będzie tworzone nowe urządzenie archiwizacyjnego, kopia różnicowa zostanie dodana do urządzenia zawierającego kopię bezpieczeństwa bazy danych. Można określić parametr NOINIT (jak w przykładzie) dla przejrzystości, nawet jeśli jest on domyślny. use pubs Create table backuptest (col1 int not null) Insert backuptest values (1) Go BACKUP DATABASE pubs to pubs_backup WITH differential, NOINIT Polecenie BACKUP LOG Można utworzyć kopię jedynie dziennika transakcji bazy danych przy pomocy polecenia BACKUP LOG: BACKUP LOG {database_name | @database_name_var} {[WITH { NO_LOG | TRUNCATE_ONLY}]} | {TO backup_device [, ...n] [WITH [BLOCKSIZE = {blocksize | @blocksize_variable}] [[,] DESCRIPTION = {text | @text_variable}] [[,] EXPIREDATE = {date | @date_var} | RETAINDAYS = {days | @days_var}] [[,] PASSWORD = {pwd | @pwd_var} [[,] FORMAT | NOFORMAT] [[,] {INIT | NOINIT}] [[,] MEDIADESCRIPTION = {text | @text_variable}] 8 [[,] [[,] [[,] [[,] [[,] [[,] [[,] [[,] [[,] MEDIANAME = {media_name | @media_name_variable}] MEDIAPASSWORD = {mediapwd | @mediapwd}] [NAME = {backup_set_name | @backup_set_name_var}] NO_TRUNCATE] {NOSKIP | SKIP}] {NOUNLOAD | UNLOAD}] {NOREWIND | REWIND}] [RESTART] STATS [= percentage]] W tej składni większość opcje zostało omówionych, z wyjątkiem następujących: Parametry TRUNCATE_ONLY i NO_LOG są identyczne. Usuwają one wykonane (zakończone) transakcje z dziennika ale nie robią kopii wpisów. Przykładowo, po wykonaniu kopii bezpieczeństwa bazy, w której były wykonywane nie rejestrowane operacje, dziennik transakcji jest przydatny. Można uruchomić polecenie BACKUP LOG WITH TRUNCATE_ONLY, a następnie utworzyć pełną kopię bezpieczeństwa bazy danych. Okrojenie dziennika transakcji jest rejestrowaną operacją samą w sobie. Warto również zauważyć, że opcja ta wykonuje faktycznie archiwizację, ale nazwa nośnika archiwizacyjnego jest nie potrzebna. Oczywiście, jeżeli chce się wykonywać tę operację należy przełączyć bazę danych w tryb odzyskiwania SIMPLE. NO_TRUNCATE wykonuje kopię bezpieczeństwa dziennika transakcji (tak jak polecenie BACKUP LOG bez żadnych specjalnych opcji). Jednak, opcja ta wykonuje działanie, którego nie wykonuje zwykłe tworzenie kopii: może utworzyć kopię dziennika transakcji nawet jeśli baza danych jest włączona (dostępna). Można przyjąć, że w bazie danych jest plik danych na jednym fizycznym dysku i dziennik transakcji na osobnym dysku. Jeżeli plik danych został z jakiegoś powodu uszkodzony, można uruchomić polecenie BACKUP LOG z opcją NO_TRUNCATE aby zachować wszystkie transakcje, które wystąpiły od czasu tworzenia ostatniej kopii dziennika transakcji. Tym sposobem, można odtworzyć bazę danych do punktu w czasie, w którym nastąpiło uszkodzenie dysku. Można utworzyć kopię dziennika transakcji bazy danych jedynie w przypadku, gdy wcześniej została wykonana pełna kopia bazy danych. Nie można wykonać kopii dziennika transakcji jeżeli ustawione są opcje Truncate Log On Checkpoint lub Select Into/Bulkcopy Database. Kopie dziennika transakcji są sekwencjami kopii bezpieczeństwa. W przypadku tych kopii, podobnie jak w przypadku kopii różnicowych, nie pojawia się żadne duplikowanie danych pomiędzy poszczególnymi kolejnymi kopiami dziennika transakcji. Kiedy zachodzi konieczność odtwarzania dzienników transakcji, potrzeba do tego wszystkich kopii utworzonych od czasu wykonania ostatniej pełnej kopii bazy danych. Kolejny rozdział prezentuje szczegóły odtwarzania bazy danych przy pomocy dzienników transakcji. Przebieg ćwiczenia. Uwaga: wszystkie kody wykonywane w programie Query Analizer zapisywać do plików, gdyż ułatwi to sporządzanie sprawozdania. 1. Sprawdzenie i zmiana modelu odtwarzania bazy danych: Aby zobaczyć jaki model odtwarzania danej bazy jest uruchomiony należy wpisać kod: Select DATABASEPROPERTYEX ('mydb', 'recovery') W odpowiedzi system określi nazwę używanego modelu: FULL, BULK_LOGGED lub SIMPLE. Aby zmienić model odtwarzania, należy skorzystać z polecenia ALTER DATABASE. Można uruchomić następujące polecenie aby zmienić model bazy danych pubs na wartość FULL: Alter database pubs SET RECOVERY FULL - wykorzystując Query Analizer sprawdzić model odtwarzania dla baz master,model, tempdb i Northwind - wykorzystując Query Analizer zmienić model odtwarzania bazy Northwind na Full - wykorzystując Enterprise Manager ustawić ponownie model odtwarzania dla bazy Northwind na Simple 1. Kontrolowanie urządzeń archiwizacyjnych: - wykorzystując program Enterprise Manager dodać następujące urządzenia archiwizacyjne (Backup Devices ) 9 Nazwa logiczna urządzenia kopiowania danych NazwiskoSt_1 NazwiskoSt_1log Nazwa pliku na dysku C:\Backup\ NazwiskoSt_1.bak C:\Backup\ NazwiskoSt_1log.bak W programie Enterprise Manager z menu kontekstowego dla serwera SQL rozszerzyć katalog „Management”, wybrać podkatalog „Backup”. Kliknąć prawą myszą, wybrać tryb „New Backup Device”. W oknie „Backup Device Properties – New Device” uzupełnić pola dla każdego Backup Devices. Przekonać się że stworzone Backup Devices są widoczne w podkatalogu „Backup”, odczytać właściwości nowych Backup Devices - wykorzystując procedurę sp_addumpdevice stworzyć dwa urządzenia archiwizacyjne (Backup Devices ) z następującymi parametrami: Nazwa logiczna urządzenia kopiowania danych NazwiskoSt_2 NazwiskoSt_3 Nazwa pliku na dysku C:\Backup\ NazwiskoSt_2.bak C:\Backup\ NazwiskoSt_3.bak -wykorzystując procedurę sp_helpdevice sprawdzić istniejące urządzenia archiwizacyjne i ich listę umieścić w sprawozdaniu 3. Sprawdzanie spojności bazy danych: wykorzystując narzędzie Database Consistency Checker (DBCC) sprawdzić różne aspekty integralności bazy danych W tym punkcie będą wykorzystane procedury systemowe, instrukcji Transact_SQL w programie Query Analyzer dla odczytania listy Backup Devices, sprawdzenia poprawności oraz integralności bazy danych przed kopiowaniem do Backup Devices. Kompletna poprawność zawiera sprawdzenie poprawności indeksów, integralności odwołań, alokacji tabel. - uruchomić Query Analyzer; - wykorzystując instrukcję DBCC CHECKDB sprawdzić całkowitą poprawność bazy danych ”Northwind” w trybach: a) formowania wszystkich komunikatów diagnostycznych dla obiektów bazy danych b) bez szczególnych komunikatów -Wykorzystując instrukcję DBCC CHECKCATALOG sprawdzić integralność tabel systemowych bazy danych „Pubs” -Wykorzystując instrukcję DBCC CHECKALLOC sprawdzić poprawność alokacji tabel bazy danych „Pubs” - Wykorzystując instrukcję DBCC CHECKTABLE sprawdzić poprawność jednej z tabel użytkownika bazy danych „Northwind” - zachować wyniki i umieścić w sprawozdaniu 4. Realizacja kopiowania bazy danych z wykorzystaniem Enterprise Manager. 10 W tym punkcie baza danych Northwind będzie skopiowana do wcześniej stworzonego w p.1 urządzenia „NazwiskoSt_1”. - wykorzystując program Enterprise Manager odtworzyć listę właściwości bazy danych Northwind, wybrać zakładkę „Option”. Ustalić pole „Read only = False”, oraz „Model = Full”. - w programie Enterprise Manager z menu kontekstowego dla serwera SQL rozszerzyć katalog „Management” oraz wybrać podkatalog „Backup”. Kliknąć prawą myszą oraz wybrać tryb „Backup a Database”. W oknie „SQL Server Backup” ustalić następujące wartości pól: Pole Database Name Description Backup type Destination Overwrite Wartość Northwind NorthwindFull Pierwsza kopia bazy Northwind Database-complete NazwiskoSt_1 Overwrite existing media - zapisać czas stworzenia kopii, kliknąć OK., sprawdzić czy stworzona kopia znajduje się w Backup Device o nazwie „NazwiskoSt_1”. 5. Dodawanie nowej kopii bazy danych do stworzonego wcześniej urządzenia archiwizacyjnego (Backup Device) z wykorzystanieminstrukcji TransactSQL. W tym punkcie do urządzenia archiwizacyjnego (Backup Device) „NazwiskoSt_1” będzie dodana jeszcze jedna kopia bazy danych Northwind z wykorzystaniem instrukcji SQL w programie Query Analyzer. - wykorzystując instrukcję BACKUP DATABASE w Query Analyzer dodać nową kopię bazy danych Northwind do urządzenia „NazwiskoSt_1” . Zanotować czas tworzenia drugiej kopii. Opcje instrukcji BACKUP DATABASE ustalić jak zamieszczono poniżej: Opcja Database name Backup file(logical device) Append,overwrite,or initialize Description Wartość Northwind NazwiskoSt_1 Append (NOINIT) Druga kopia bazy Northwind - uruchomić program Enterprise Manager, przekonać się że druga stworzona kopia znajduje się w Backup Device „NazwiskoSt_1” razem z kopią pierwszą. 6. Tworzenie nowej kopii bazy danych, która będzie nadpisywać (overwrite) w urządzeniu archiwizacyjnym(Backup Device) wszystkie kopie poprzednie. W tym punkcie wykorzystując instrukcje SQL w programie Query Analyzer będzie tworzona nowa kopia bazy danych Northwind w Backup Device „NazwiskoSt_1”, która zastąpi kopie poprzednie. 11 - wykorzystując instrukcję BACKUP DATABASE stworzyć nową kopię bazy danych Northwind w Backup Device „NazwiskoSt_1”, która zastępuje utworzone kopie w p.3. Opcje instrukcji BACKUP DATABASE ustalić jak podano w tabeli: Opcja Database name Backup file(logical device) Append,overwrite,or initialize Description Wartość Northwind NazwiskoSt_1 Owerwrite (INIT) Trzecia kopia bazy Northwind zastępuje inne - zapisać czas stworzenia trzeciej kopii, ruchomić program Enterprise Manager i sprawdzić czy trzecia kopia została zastąpiona w Backup Device „NazwiskoSt_1” kopią pierwszą oraz drugą. 7. Równoległe tworzenie rozproszonych kopii w dwóch różnych urządzeniach archiwizacyjnych(Backup Device). Kopiowanie rzeczywistych baz danych może trwać wiele godzin, np. kiedy jako urządzeniearchiwizujące (Backup Device) wykorzystuje się taśmy magnetyczne.Dla przyspieszenia tego procesu można zastosować równoległe kopiowanie bazy danych na różne urządzenia archiwizacyjne(Backup Device). W tym punkcie wykorzystując program Enterprise Manager będą tworzone dwie rozproszone kopie na Backup Devices NazwiskoSt_2 oraz NazwiskoSt_3 stworzonych w p.2. - uruchomić program Enterprise Manager, rozszerzyć katalog „Management” oraz wybrać podkatalog „Backup”, kliknąć prawym przyciskiem myszy oraz wybrać tryb „Backup a Database”. W oknie „SQL Server Backup” ustawić następujące parametry: Pole Database Name Description Backup type Destination Overwrite Wartość Northwind Northwind striped Paralelne kopiowanie bazy Northwind Database-complete NazwiskoSt_2 and NazwiskoSt_3 Overwrite existing media - zanotować czas stworzenia kopii, kliknąć OK., upewnić się że stworzone kopie znajdują się w Backup Device „NazwiskoSt_2” oraz w Backup Device „NazwiskoSt_3” 8. Tworzenie kopii bazy danych na tymczasowym (temporary) urządzeniu Backup Device. Temporary Backup Device nie jest widoczne w katalogu Backup serwera SQL i może być stworzone przy bezpośrednim kopiowaniu bazy danych. Temporary Backup Device tworzone jest przez administratora BD jednorazowo dla tego niema sensu zapamiętywać go na serwerze. W tym punkcie będzie stworzone Temporary Backup Device z 12 wykorzystaniem programu Enterprise Manager. - uruchomić program Enterprise Manager, rozszerzyć katalog „Management” oraz wybrać podkatalog „Backup”, kliknąć prawym przyciskiem myszy oraz wybrać tryb „Backup a Database”, w oknie „SQL Server Backup” ustalić następujące parametry: Pole Database Name Description Backup type Destination Overwrite Wartość Northwind Northwind temporary Northwind temporary beckup device nie odwzorowuje się w tabelach systemowych Database-complete C:\BACKUP\MyNewBackup.bak Overwrite existing media - zanotować czas stworzenia kopii, kliknąć OK., upewnić się że stworzona kopia znajduje się w Temporary Backup Device C:\BACKUP\MyNewBackup.bak . 9. Kopiowanie dziennika transakcji (transaction log) z wykorzystaniem programu Enterprise Manager. W typ punkcie będzie skopiowany dziennik transakcji bazy danych Northwind do Backup Device NazwiskoSt_1log które zostało stworzone w p.1. - uruchomić program Enterprise Manager, rozszerzyć katalog Databases, odtworzyć okno Properties bazy Northwind, w zakładce „Option” ustalić wartość w polu „Model” na tryb „Full”, kliknąć OK (dzięki tej operacji mamy możliwość kopiowania dziennika transakcji bazy danych, ponieważ w trybie „Simple” kopiowanie dziennika transakcji jest niemożliwe) - rozszerzyć katalog „Management” oraz wybrać podkatalog „Backup”, kliknąć prawym przyciskiem myszy oraz wybrać tryb „Backup a Database”, w oknie „SQL Server Backup” ustawić następujące parametry: Pole Database Name Description Backup type Destination Overwrite Wartość Northwind Northwind Log Northwind transaction Log Transaction Log NazwiskoSt_1log Overwrite existing media - zanotować czas tworzenia kopii, kliknąć OK, upewnić się że stworzona kopia znajduje się w Backup Device NazwiskoSt_1log. 13 10.Dodanie nowego plik „transaction log” do urządzenia archiwizacyjnego NazwiskoSt_1log z wykorzystaniem kodu SQL w programie Query Analyzer. - uruchomić Query Analyzer, wykorzystując instrukcję BACKUP LOG dodać nową kopię pliku „transaction log” do Backup Device NazwiskoSt_1log bazy danych Northwind, zanotować czas tworzenia nowej kopii, opcje instrukcji BACKUP LOG ustalić następująco: Opcja Database name Backup file(logical device) Append,overwrite,or initialize Wartość Northwind NazwiskoSt_1log Append (NOINIT) - uruchomić program Enterprise Manager, upewnić się, że stworzona kopia transaction log znajduje się w Backup Device „NazwiskoSt_1log” 11.Tworzona nowej kopii bazy danych, następnie oczyszczenie dziennika transakcji. Ta operacja zrealizuje się po utworzeniu kopii bazy danych w Backup Device i pozwoli na usunięcie nieaktywnej część rekordów dziennika transakcji. - uruchomić Query Analyzer, wykorzystując instrukcje BACKUP DATABASE z opcją WITH NOINIT stworzyć nową kopię bazy danych Northwind w Backup Device „NazwiskoSt_1” - zanotować czas tworzenia kopii, upewnić się że stworzona kopia znajduje się w Backup Device „NazwiskoSt_1”. - uruchomić Query Analyzer, wykorzystując instrukcję BACKUP LOG (z opcją WITH TRUNCATE_ONLY) oczyścić dziennik transakcji bazy danych Northwind (instrukcja ta nie potrzebuje wyznaczenia Backup Device) 12.Tworzone kopii róznicowych „differential backup”, które zachowają zmiany od momentu ostatniego stworzenia kopii „Full backup”. - uruchomić program Enterprise Manager, rozszerzyć katalog „Management” oraz wybrać podkatalog „Backup”, kliknąć prawym przyciskiem myszy oraz wybrać tryb „Backup a Database”, w oknie „SQL Server Backup” ustalić następujące parametry: Pole Database Name Description Backup type Destination Overwrite Wartość Northwind Northwind differential Zmiany po ostatnim kopiowaniu Full Database-differential C:\BACKUP\Nwdiff.bak Append to media 14 - zapisać czas stworzenia kopii, kliknąć OK, upewnić się że stworzona kopia znajduje się w Backup Device C:\BACKUP\ Nwdiff.bak Treść sprawozdania. 1. Odnośnie do każdego punktu ćwiczenia umieścić kod Transact-SQl oraz wyniki . 2. Do kilku wybranych punktów zademonstrować własne przykłady Przykładowe pytania kontrolne. 1. Jakie role użytkowników mają uprawnienia do realizacji operacji kopiowania (Backing) w SQL serwerze? 2. Jakie istnieją typy kopiowania (Backing) w SQL serwerze? 3. Jakie istnieją modele odtwarzania(Using Recowery Models) w SQL serwerze? 4. Dlaczego jest przeznaczony dziennik transakcji? 5. Jaka definicja pojęcia „Backup Device”? 15