Archiwizacja i odtwarzanie bazy
O czym będzie Metody odzyskiwania danych w DB2 Dzienniki transakcji Metody tworzenia kopii zapasowych Metody odtwarzania Operacje rollforward Odbudowa indeksów
Problemy... Nigdy nie wiadomo, kiedy awaria systemu może nastąpić Wiele powodów może być przyczyną utraty danych Czynniki zewnętrzne Czynniki wewnętrzne Pytania: Czy archiwizowaliśmy bazę? Czy jesteśmy w stanie odtworzyć wszystkie transakcje do ostatniego momentu z przed awarii
Strategia odtwarzania By minimalizować utratę danych musimy: opracować strategię odtwarzania upewnić się co do jej skuteczności ciągle przećwiczyć, testować i przystosować do zmian Mogą wystąpić takie scenariusze: Zatrzymanie systemu: brak zasilania, awaria sprzętu, błąd aplikacji mogą doprowadzić do niespójności bazy danych Błąd transakcji: nieumyślne umieszczenie błędnych danych przez użytkownika Awaria sprzętu: uszkodzenie nośnika danych (dysku(ów)) może powodować utratę części lub całej bazy danych Katastrofa: pożar, powódź i inne
Planowanie Aby zaplanować strategię odtwarzania i odzyskiwania danych należy sobie odpowiedzieć na następujące pytania Czy dane mogą być ponownie załadowane z innego źródła Na utratę jakiego rozmiaru danych możemy sobie pozwolić Ile czasu mamy na odzyskiwanie bazy danych Jakie zasoby (nośniki danych) posiadamy do przechowywania kopii zapasowych i pliki dziennika transakcji
Koncepcje odzyskiwania DB2 prowadzi następujące koncepcje odzyskiwania danych Crash recovery: pozwala na odtwarzanie bazy danych do stanu spójności poprzez wycofanie wszystkich nie zatwierdzonych transakcji Version recovery: pozwala na odtwarzanie bazy danych na podstawie ostatniego zachowanego obrazu bazy (komenda BACKUP). Wszystkie zmiany, które zachodziły w bazie od momentu wykonania komendy BACKUP do wystąpienia awarii są stracone! Rollforward recovery: Rozszerzenie version recovery o odzyskiwanie nie zapisanych zmian na podstawie zapisów w plikach dziennika transakcji Pozwala również na przywracanie bazy do określonej chwili czasu Wymaga zastosowania logów archiwalnych
Dziennik transakcji Jest decydującym czynnikiem w procesie odtwarzania bazy danych Przechowuje ścieżki wszystkich zmian zachodzących w obiektach i plikach bazy Dla zapewnienia integralności danych DB2 stosuje metodę uprzedni zapis (writeahead) Zapis do dziennika transakcji przed zapisaniem do plików bazy danych
Schemat zapisu danych
Wyjaśnienie Package cache: obszar pamięci do przechowywania przetwarzanych poleceń SQL Buffer pool: obszar pamięci do przechowywania danych Data page: strona pamięci (4kB może mieć do 32 kb) Log buffer: obszar pamięci do przechowywania zapisów dziennika transakcji Podczas przetwarzania poleceń SQL, zmiany są najpierw zachowane w buforze dziennika transakcji, następnie zapisane do pliku pliku dziennika (log buffer jest pełny lub zatwierdzenie transakcji commit-) Zapis do plików bazy danych nastąpi w momencie zapełnienia buffer pool (brak miejsca w pamięci na nowe strony) lub asynchroniczne (optymalizacja dostępu do danych)
Podstawowe i wtórne pliki dziennika transakcji Podstawowe pliki dziennika są tworzone natychmiast po połączeniu z bazą danych Wtórne pliki dziennika są tworzone dynamicznie w razie potrzeby Podstawowe parametry konfiguracji LOGPRIMARY: określa liczbę podstawowych plików dziennika do tworzenia LOGSECOND:określa maksymalną liczbę wtórnych plików dziennika do tworzenia LOGFILSIZ: rozmiar pliku dziennika (po 4kB)
Przykład konfiguracji LOGFILSIZ = 250 LOGPRIMARY= 3 LOGSECOND = 2 LOGPATH = C:\mylogs\ Zawartość c:\mylogs\ 2005-10-24 07:40p 1,032,192 S0000000.LOG 2005-10-24 07:40p 1,032,192 S0000001.LOG 2005-10-24 07:40p 1,032,192 S0000002.LOG
Typy plików dziennika Aktywny - wtedy gdy: Zawiera transakcje nie zatwierdzone (commited) lub nie wycofane (rolled back) Zawiera transakcje zatwierdzone ale jeszcze nie zapisane w plikach bazy danych Bieżący archiwalny plik dziennika: Zawiera informacje dot. transakcji zatwierdzonych zapisanych w plikach bazy danych Przechowywany w tym samym katalogu co aktywny plik dziennika Archiwalny plik dziennika: Plik dziennika przechowywany w innym katalogu lub urządzeniu
Rodzaje dzienników - Cykliczny Cykliczny dziennik (circular logging): domyślny rodzaj dziennika Jeśli zostało zdefiniowanych 4 podstawowe pliki dziennika (LOGPRIMARY=4) będą one użyte następująco: log#1, log#2, log#3, log#4, log#1, log#2... Plik dziennika może być ponownie użyty jeśli nie jest w stanie aktywnym Jeśli transakcja wymaga więcej plików dziennika niż zdefiniowano w LOGPRIMARY, DB2 wykorzysta wtórny plik dziennika (secondary log file)
Ilustracja Cykliczny plik dziennika
Rodzaje dzienników Przechowywany (retain) Plik dziennika nie może być użyty ponownie Po wykorzystaniu wszystkich plików dziennika są one archiwizowane do innego katalogu lub urządzeniu Należy inicjować taki rodzaj dziennika db2 update db cfg for database_name using LOGRETAIN ON db2 update db cfg for database_name using USEREXIT ON Userexits: programy pozwalające na przeniesienie archiwalnych plików dziennika do innego katalogu niż pliki aktywnego dziennika lub do innego urządzenia
Ilustracja Przechowywany plik dziennika (retain)
Archiwizacja bazy Sporządza kompletną kopię bazy danych Zawiera informacje dot. przestrzeni tablicowych, konfigurację bazy, dzienniki transakcji... Wymaga posiadania uprawnienia: SYSADM, SYSCTRL, SYSMAINT Składnia: BACKUP DATABASE database-alias [USER username [USING password]] [TABLESPACE (tblspace-name [ {,tblspace-name}... ])] [ONLINE] [INCREMENTAL [DELTA]] [USE {TSM XBSA} [OPEN num-sess SESSIONS]] TO dir/dev [ {,dir/dev}... ] LOAD lib-name [OPEN num-sess SESSIONS]] [WITH num-buff BUFFERS] [BUFFER buffer-size] [PARALLELISM n] [WITHOUT PROMPTING]
Przykład Archiwizacja bazy sample do katalogu mybackups BACKUP DATABASE sample TO d:\mybackups Archiwizacja z dodatkowymi parametrami BACKUP DATABASE sample TO /db2backup/dir1, /db2backup/dir2 WITH 4 BUFFERS BUFFER 4096 PARALLELISM 2 Archiwizacja w trybie online BACKUP DATABASE sample ONLINE TO /dev/rdir1, /dev/rdir2 //nazwa bazy //lokalizacja //liczba buforów //rozmiar bufora //liczba wątków
Archiwizacja przestrzeni tablicowych Jeśli w bazie danych większe zmiany dotyczą jedynie niektórych tablic można archiwizować tylko wybranych przestrzeni tablicowych Składnia: BACKUP DATABASE sample TABLESPACE ( syscatspace, userspace1, userspace2 ) ONLINE TO /db2tbsp/backup1, /db2tbsp/backup2
Archiwa przyrostowe Dzielą się na 2 rodzaje Przyrostowy: DB2 archiwizuje wszystkie dane, które zmieniły się od ostatniego pełnego archiwum Delta: DB2 archiwizuje dane, które zmieniły się od ostatniego pełnego, przerostowego lub delta archiwum Ilustracja
Wykorzystanie Control Center
Parametry backup u
Nazwy plików archiwum Windows: Alias Instancja Nr katalogu węzła Miesiąc GodzinaSekunda DBALIAS.0\DB2INST\NODE0000\CATN0000\20051023\201050.001 Typ Unix/Linux Węzeł Rok Dzień Minuta DBALIAS.0.DB2INST.NODE0000.CATN0000.20051023201050.001 Nr kolejny Typ: 0: pełne archiwum 3: archiwum przestrzeni tablicowej Dla nie partycjonowanej bazy zawsze NODE0000 i CATN0000
Odtwarzanie bazy Odtwarzanie bazy wykonuje się komendą RESTORE Składnia: RESTORE DATABASE source-database-alias { restore-options CONTINUE ABORT } Opcje: [USER username [USING password]] [{TABLESPACE [ONLINE] TABLESPACE (tblspace-name [ {,tblspace-name}... ]) [ONLINE] HISTORY FILE [ONLINE]}] [INCREMENTAL [AUTOMATIC ABORT]] [{USE {TSM XBSA} [OPEN num-sess SESSIONS] FROM dir/dev [ {,dir/dev}... ] LOAD shared-lib [OPEN num-sess SESSIONS]}] [TAKEN AT date-time] [TO target-directory] [INTO target-database-alias] [NEWLOGPATH directory] [WITH num-buff BUFFERS] [BUFFER buffer-size] [DLREPORT file-name] [REPLACE EXISTING] [REDIRECT] [PARALLELISM n] [WITHOUT ROLLING FORWARD] [WITHOUT DATALINK] [WITHOUT PROMPTING]
Przykład (1)RESTORE DATABASE sample (2) FROM C:\DBBACKUP (3) TAKEN AT 20051023201050 (4) WITHOUT ROLLING FORWARD (5) WITHOUT PROMPTING (1) nazwa bazy (2) źródło (miejsce archiwum) (3) data i czas wykonania archiwum (4) jeśli były wykorzystane archiwalne pliki dziennika, przy odtwarzanie bazy jest ona automatycznie ustawiona w trybie Rollforward recovery (rozszerzenie version recovery o odzyskiwanie nie zapisanych zmian na podstawie zapisów w plikach dziennika transakcji) Tu rezygnacja z ROLLFORWARD (5) bez potwierdzenia rozpoczęcia odtwarzania
Odtwarzanie przestrzeni tablicowych Można odtworzyć z archiwum bazy lub przestrzeni tablicowej Przykład: (1) RESTORE DATABASE sample (2) TABLESPACE ( mytblspace1 ) (3) ONLINE (4) FROM /db2tbsp/backup1, /db2tbsp/backup2 (3) online: umożliwia odtwarzania przestrzeni tablicowej podczas pracy innych użytkowników. W przypadku odtwarzania bazy opcja online jest niedozwolona
Wykorzystanie Control Center
Parametry odtwarzania
Odtwarzanie bazy - Rollforward Pozwala na odtwarzanie bazy do wybranego momentu czasu na podstawie zapisów dziennika transakcji Podczas odtwarzania DB2: Szuka pliki dziennika w odpowiednich katalogach Ponownie wykona wszystkie transakcje z pliku dziennika Wymaga uprawnienia: SYSADM, SYSCTRL, SYSMAINT ROLLFORWARD dla bazy wykonywany jest zawsze w trybie offline.
Przykłady (1)ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE (2)ROLLFORWARD DATABASE sample TO timestamp AND COMPLETE (3)ROLLFORWARD DATABASE sample TO timestamp USING LOCAL TIME AND COMPLETE (1) wykona odtwarzania bazy na podstawie archiwalnych i aktywnych plików dziennika, następnie wycofa wszystkich nie zatwierdzonych transakcji (2) odtwarza bazę do określonego momentu czasu (czas względem strefy czasowej) (3) jak (2) tylko dla lokalnego czasu
Odtwarzanie przestrzeni tablicowych ROLLFORWARD Może się odbywać zarówno w trybie online jak i offline za wyjątkiem tabeli systemowej SYSCATSPACE Przykład: ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE TABLESPACE ( userspace1 ) ONLINE
Wykorzystanie Control Center
Parametry odtwarzania
Obiekty w bazie DB2-UDB
Typy danych Poza standardowymi typami danych (INTEGER, CHAR, DATE) DB2 pozwala użytkownikom na definiowanie własnych typów Wbudowane kategorie typów danych: Numeryczny (Numeric) Łańcuch znaków (String) Data i czasu (Datetime) Datalinks: do obsługi plików poza bazą Typy danych użytkownika Odmienny: typ danych oparty o wbudowanych typach Strukturalny: składa się z wielu kolumn typu wbudowanego Referencyjny: wykorzystując typu strukturalnego można zdefiniować referencje do wierszy innej tabeli za pomocą typu referencyjnego
Integer: Typy numeryczne Smallint (2 bajty): -32,768 do 32,767 Integer (4 bajty): -2,147,483,648 do 2,147,483,647 Bigint (8 bajtów): -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 Decimal(p,s) (p/2 + 1 bajtów) Decimal(10, 2) wymaga 6 bajtów Floating point Real (4 bajty) Double (8 bajtów)
Typy znakowe CHAR (CHARACTER): łańcuch znaków o określonej długości (max. 254 bajty) VARCHAR: łańcuch znaków o zmiennej długości(max 32,672 bajty) GRAPHIC: łańcuchy znaków dwubajtowych o określonej długości (max. 127 znaków) VARCHARGRAPHIC: łańcuchy znaków dwubajtowych o zmiennej długości (max. 16,336 znaków) Dodatkowe typy danych: LONG VARCHAR, CLOB (character large object), LONG VARGRAPHIC, DBCLOB (double byte CLOB), BLOB (Binary large object)
Typ daty i czasu DATE: przechowuje datę TIME: przechowuje czas TIMESTAMP: przechowuje datę i czas Wszystkie te typy są przechowywane w bazie w formacie wewnętrznym, aplikacje mogą również operować na nie jako łańcuchy znaków Wbudowane funkcje: DAYOFWEEK, DAYNAME, DAYS, CURRENT DATE
Datalinks Typ DATALINK służy do obsługi plików zewnętrznych Kolumna tabeli typu DATALINK pozwala na przechowywanie referencji do pliku poza bazą danych Plik zewnętrzny może być zapisany w tym samym systemie plików co baza lub na zdalnej maszynie Operowanie na danych tego typu wymaga użycie wbudowanych funkcji (DLVALUE)
Typy danych użytkownika 1/3 Odmienny (distinct type): zdefiniowane na podstawie wbudowanych (standardowych) typów DB2 Przykład: CREATE DISTINCT TYPE CANDOL AS DECIMAL(10,2) WITH COMPARISONS CREATE TABLE ITEMS (ITEMID CHAR(5), PRICE CANDOL ) INSERT INTO ITEMS VALUES('ABC11',CANDOL(30.50) )
Typy danych użytkownika 2/3 Strukturalny: składa się z wielu kolumn typu standardowego Np. definiujemy strukturę ADRES która składa się z atrybutów: ulica, miasto, nr domu... Można tak zdefiniowaną strukturę użyć przy definiowaniu struktury tabel
Typy danych użytkownika 3/3 Referencyjny: wykorzystując typu strukturalnego można zdefiniować referencje do wierszy innej tabeli za pomocą typu referencyjnego
Tabele CREATE TABLE BOOKS ( BOOKID INTEGER, BOOKNAME VARCHAR(100), ISBN CHAR(10) ) CREATE TABLE MYBOOKS LIKE BOOKS CREATE TABLE MYBOOKS AS (SELECT * FROM BOOKS) DEFINITION ONLY DESCRIBE TABLE MYBOOKS Tabele są przechowywane w przestrzeniach tablicowych - Przestrzeń tablicowa musi być stworzona przed tworzeniem tabeli - Można określić jawnie w jakiej przestrzeni tablicowej ma być stworzona tabela CREATE TABLE BOOKS ( BOOKID INTEGER, BOOKNAME VARCHAR(100),ISBN CHAR(10) ) IN BOOKINFO
Zmiana,usuwanie, NOT NULL, DEFAULT, GENERATED ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) DROP TABLE BOOKS CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL,BOOKNAME VARCHAR(100) WITH DEFAULT 'TBD',ISBN CHAR(10) ) CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),BOOKNAME VARCHAR(100) WITH DEFAULT 'TBD',ISBN CHAR(10) ) CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY, LNAME VARCHAR(100), FNAME VARCHAR(100), FICTIONBOOKS INTEGER, NONFICTIONBOOKS INTEGER, TOTALBOOKS INTEGER GENERATED ALWAYS AS (FICTIONBOOKS + NONFICTIONBOOKS) )
Integralność (Constraints) Unikalność: zapewnia unikalność wartości kolumn w tabeli CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY, BOOKNAME VARCHAR(100), ISBN CHAR(10) NOT NULL CONSTRAINT BOOKSISBN UNIQUE ) Więzy referencyjne: CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY, LNAME VARCHAR(100), FNAME VARCHAR(100)) CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY, BOOKNAME VARCHAR(100), ISBN CHAR(10), AUTHORID INTEGER REFERENCES AUTHORS) RESTRICT, NO ACTION, CASCADE, SET NULL Dla tabeli (table check constraints) ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) CHECK (BOOKTYPE IN ('F','N') )
Widoki Wsparcie dla INSERT, UPDATE, DELETE Dodatkowy poziom kontroli dostępu Użyteczny przy obsłudze danych historycznych Są przechowywane w tabeli SYSIBM.SYSVIEWS, Tabela SYSIBM.SYSVIEWS ma zdefiniowany widok: SYSCAT.VIEWS CREATE VIEW NONFICTIONBOOKS AS SELECT * FROM BOOKS WHERE BOOKTYPE = 'N' Tworzenie widoków z inną nazwą kolumn niż w tabeli CREATE VIEW MYBOOKVIEW (TITLE,TYPE) AS SELECT BOOKNAME,BOOKTYPE FROM BOOKS Sprawdzenie poprawności danych CREATE VIEW NONFICTIONBOOKS AS SELECT * FROM BOOKS WHERE BOOKTYPE = 'N' WITH CHECK OPTION
Indeksy Zapewniają unikalność wartości w kolumnach Przyspieszają wykonanie zapytań Mogą być unikalne lub nieunikalne CREATE INDEX IBOOKNAME ON BOOKS (BOOKNAME) CREATE INDEX I2BOOKNAME ON BOOKS (AUTHOID DESC, BOOKNAME ASC) CREATE INDEX BIBOOKNAME ON BOOKS (BOOKNAME) ALLOW REVERSE SCANS
Wyzwalacze Wykonywane przed operacją Wykonywane po operacji Wykonywane zamiast operacji Operacje: INSERT, DELETE, UPDATE