Wykład 2
Transkrypt
Wykład 2
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 – 2005-10-24 07:40p – 2005-10-24 07:40p 1,032,192 S0000000.LOG 1,032,192 S0000001.LOG 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 Nr katalogu węzła Instancja Miesiąc Godzina Sekunda DBALIAS.0\DB2INST\NODE0000\CATN0000\20051023\201050.001 Typ Węzeł Rok Dzień Minuta Nr kolejny • Unix/Linux DBALIAS.0.DB2INST.NODE0000.CATN0000.20051023201050.001 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 Typy numeryczne • Integer: – 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