System zarzadzania bazami danych IBM DB2
Transkrypt
System zarzadzania bazami danych IBM DB2
Transakcje Transakcja: ciag ˛ zawierajacy ˛ jedno lub wiele poleceń SQL, zgrupowanych razem jako jedna logiczna jednostka działań, której nie można podzielić. Logiczna jednostka działań to zbiór logicznych zmian w bazie danych, które należy albo wprowadzić wszystkie albo nie wprowadzać żadnej. Mechanizm transakcji zapewnia pozostawanie bazy w spójnym (poprawnym) stanie pomimo wystapienia ˛ bł˛edu gdziekolwiek w systemie (np. przerwa w zasilaniu) lub w samej transakcji. Reguła ACID opisuje, jakie cechy powinna mieć transakcja: I Niepodzielna (Atomic) I Spójna (Consistent) I Odizolowana (Isolated) I Trwała (Durable) DB2 zamiast nazwy "transakcja" używa poj˛ecia "jednostka pracy" (unit of work). Na wykładzie b˛edziemy tradycyjnie używali poj˛ecia transakcji. DB2 zamiast nazwy "transakcja" używa poj˛ecia "jednostka pracy" (unit of work). Na wykładzie b˛edziemy tradycyjnie używali poj˛ecia transakcji. W DB2 transakcja jest rozpoczynana niejawnie, w momencie wykonania pierwszego polecenia SQL. Transakcja jest zatwierdzana i kończy si˛e w chwili wykonania instrukcji COMMIT. Wówczas wszystkie modyfikacje danych zostaja˛ zapisane w bazie. Uwaga. Edytory SQL maja˛ cz˛esto ustawiona˛ domyślnie opcj˛e autocommit. Transakcje w takim wypadku zatwiedzane sa˛ bez wykonania przez nas instrukcji COMMIT, tylko automatycznie po wykonaniu każdej instrukcji SQL. Instrukcja ROLLBACK wycofuje wszystkie modyfikacje danych w ramach jednej transakcji. Możemy ja˛ zastosować jeśli si˛e np. pomylimy. Ta instrukcja nie zadziała, jeśli wcześniej wykonamy COMMIT. Transakcja w takim wypadku została już zakończona. I Dowolna transakcja w bazie danych powinna być odizolowana od wszystkich pozostałych transakcji, które sa˛ wykonywane w tym samym czasie. I W idealnej sytuacji każda transakcja zachowuje si˛e tak, jakby posiadała wyłaczny ˛ dost˛ep do bazy danych. I Niestety, realia zwiazane ˛ z wymaganiem osiagni˛ ˛ ecia dobrej wydajności wymuszaja˛ poszukiwanie kompromisów (pomi˛edzy izolowaniem transakcji a wydajnościa˛ bazy). Dane zatwierdzone (committed) i niezatwierdzone (uncommitted) Dane zatwierdzone (committed data) charakteryzuja˛ si˛e tym, że I sa˛ spójne w bazie danych; I zostały zatwierdzone za pomoca˛ polecenia COMMIT (wydanego w sposób jawny lub nie); I zatwierdzone zmiany moga˛ zostać wycofane (usuni˛ ete) jedynie za pomoca kolejnego polecenia (lub kilku poleceń) SQL, w nowej transakcji; I sa˛ widoczne i dost˛ epne dla wszystkich użytkowników i aplikacji. Dane niezatwierdzone (uncommitted data) charakteryzuja˛ si˛e tym, że I moga˛ nie być spójne w bazie danych; I sa to zmiany, które zostały wprowadzone w bieżacej ˛ transakcji, zanim zostało wydane polecenie COMMIT; I moga˛ zostać wycofane za pomoca kolejnego polecenia ROLLBACK; I nie sa˛ widoczne ani dost˛ epne dla innych użytkowników i aplikacji (od tej zasady sa˛ wyjatki). Współbieżność w DB2 W sytuacji, gdy wielu użytkowników (aplikacji) jednocześnie uzyskuje dost˛ep do tych samych zasobów, mówimy o współbieżnym dost˛epie. Jeżeli w danym momencie dost˛ep do danych uzyskuje wiele transakcji, może to prowadzić do niepożadanych ˛ zjawisk, wśród których wyróżniamy: I Utracone aktualizacje (Lost Update); I Brudny odczyt (Uncommitted Read); I Odczyty nie dajace ˛ si˛e powtórzyć (Non-repeatable Read); I Odczyty widmo (Phantom Read). Wynika stad ˛ konieczność kontroli nad stopniem współbieżności danych, aby zachować I odpowiednia˛ stabilność danych; I nie tracac ˛ wymaganej wydajności. Niepożadane ˛ zjawiska zwiazane ˛ z problemem współbieżnego dost˛epu: I Utracone aktualizacje (Lost Update) - zachodzi gdy dwie transakcje odczytuja˛ te same dane i obie próbuja˛ je zmodyfikować, co skutkuje utrata˛ zmian wprowadzonych przez jedna˛ z nich, np. transakcja nr 1 i transakcja nr 2 odczytuja˛ ten sam wiersz danych i obliczaja˛ nowe wartości danych, na podstawie tego, jakie wartości aktualnie si˛e w tym wierszu znajduja; ˛ transakcja nr 1 aktualizuje wiersz za pomoca˛ wyliczonej wartości, nast˛epnie to samo robi transakcja nr 2; zmiana wprowadzona przez transakcj˛e nr 1 jest utracona. Niepożadane ˛ zjawiska zwiazane ˛ z problemem współbieżnego dost˛epu: I Utracone aktualizacje (Lost Update) - zachodzi gdy dwie transakcje odczytuja˛ te same dane i obie próbuja˛ je zmodyfikować, co skutkuje utrata˛ zmian wprowadzonych przez jedna˛ z nich, np. transakcja nr 1 i transakcja nr 2 odczytuja˛ ten sam wiersz danych i obliczaja˛ nowe wartości danych, na podstawie tego, jakie wartości aktualnie si˛e w tym wierszu znajduja; ˛ transakcja nr 1 aktualizuje wiersz za pomoca˛ wyliczonej wartości, nast˛epnie to samo robi transakcja nr 2; zmiana wprowadzona przez transakcj˛e nr 1 jest utracona. I Brudny odczyt (Uncommitted Read) - ma miejsce wtedy, gdy pewne instrukcje SQL wewnatrz ˛ jednej transakcji odczytuja˛ dane, które zostały zmienione przez inna˛ transakcj˛e, ale nie zatwierdzone jeszcze poleceniem COMMIT; jeżeli pierwsza transakcja zostanie wycofana poleceniem ROLLBACK, druga transakcja odczytała dane, które nigdy tak naprawd˛e nie były zapisane w bazie. I Odczyty nie dajace ˛ si˛e powtórzyć (Non-repeatable Read) zachodzi wtedy, gdy transakcja odczytuje zbiór danych, nast˛epnie czyta dane ponownie i okazuje si˛e, że dane nie sa˛ identyczne, np. transakcja nr 1 odczytuje wiersz danych, potem transakcja nr 2 zmienia albo usuwa ten wiersz i zatwierdza zmiany COMMIT; kiedy transakcja nr 1 ponownie odczytuje ten sam wiersz, otrzymuje inne dane (jeżeli wiersz został zmodyfikowany) lub okazuje si˛e, że takiego wiersza nie ma (został usuni˛ety). I Odczyty nie dajace ˛ si˛e powtórzyć (Non-repeatable Read) zachodzi wtedy, gdy transakcja odczytuje zbiór danych, nast˛epnie czyta dane ponownie i okazuje si˛e, że dane nie sa˛ identyczne, np. transakcja nr 1 odczytuje wiersz danych, potem transakcja nr 2 zmienia albo usuwa ten wiersz i zatwierdza zmiany COMMIT; kiedy transakcja nr 1 ponownie odczytuje ten sam wiersz, otrzymuje inne dane (jeżeli wiersz został zmodyfikowany) lub okazuje si˛e, że takiego wiersza nie ma (został usuni˛ety). I Odczyty widmo (Phantom Read) - zachodzi, gdy wiersz danych spełnia kryteria wyszukiwania, ale nie zostaje poczatkowo ˛ znaleziony; np. transakcja nr 1 wybiera zbiór wierszy spełniajacych ˛ pewne kryterium, transakcja nr 2 dodaje nowy wiersz, spełniajacy ˛ to kryterium; nast˛epnie transakcja nr 1 ponownie wywołuje zapytanie, które teraz zwraca inny zbiór wierszy, niż poprzednio (nowy wiersz dodany przez transakcj˛e nr 2 zostanie uwzgl˛edniony). Poziomy izolacji transakcji BD2 rozwiazuje ˛ problem współbieżności za pomoca˛ poziomów izolacji transakcji i mechanizmu blokad. Na żadnym z poziomów izolacji DB2 nie wystapi ˛ zjawisko utraconych aktualizacji (Lost Update). Każdy zmieniany lub wstawiany rekord jest automatycznie blokowany. Poziom izolacji transakcji określa, jak dane sa˛ oddzielone od innych wspóbieżnych transakcji oraz jakie blokady zostały na nie nałożone. Ma znaczenie w trakcie trwania danej transakcji. Wyróżniamy cztery poziomy izolacji: I Repeatable Read (RR) I Read Stability (RS) I Cursor Stability (CS) I Uncommitted Read (UR) Poziomy izolacji Repeatable Read (RR) - najwyższy poziom izolacji. Nie dopuszcza żadnego z opisanych wcześniej niepożadanych ˛ zjawisk. Blokowana jest cała tabela lub widok, wykorzystywany w zapytaniu (dokładniej: blokowany jest cały zbiór rekordów, które były odczytane, aby stworzyć wynik zapytania, a nie tylko te rekordy, które rzeczywiście zostały przez zapytanie zwrócone). Zapewnia najmniejsza˛ współbieżność dost˛epu do danych. RR jest najmniej korzystny z punktu widzenia wydajności. Zalecany, gdy stabilność danych jest istotniejsza od wydajności, a zmiany w zwracanym przez zapytanie wyniku niedopuszczalne. Poziomy izolacji Read Stability (RS) - kolejny poziom izolacji. Nie wystapi ˛ brudny odczyt (Uncommitted Read) ani odczyty nie dajace ˛ si˛e powtórzyć (Non-repeatable Read). Może pojawić si˛e odczyt widmo (Phantom Read). Blokada jest nakładana tylko na wybierane lub modyfikowane wiersze, a nie na cała˛ tabel˛e. Zalecany, gdy wymagany jest współbieżny dost˛ep do danych; zwracany zbiór wierszy musi pozostać stabilny w czasie całej transakcji; moga˛ pojawić si˛e nowe wiersze (jeżeli zostały wstawione wiersze spełniajace ˛ kryterium wyboru). Poziomy izolacji Cursor Stability (CS) - domyślny poziom izolacji dla transakcji. Nie może pojawić si˛e zjawisko brudnego odczytu. Może zajść odczyt widmo lub odczyty nie dajace ˛ si˛e powtórzyć. Blokada jest nakładana tylko na aktualnie odczytywany wiersz. Używany, aby zmaksymalizować współbieżność dost˛epu do danych, ale uniemożliwić odczytanie niezatwierdzonych danych (uncommitted read). Poziomy izolacji Cursor Stability (CS) - domyślny poziom izolacji dla transakcji. Nie może pojawić si˛e zjawisko brudnego odczytu. Może zajść odczyt widmo lub odczyty nie dajace ˛ si˛e powtórzyć. Blokada jest nakładana tylko na aktualnie odczytywany wiersz. Używany, aby zmaksymalizować współbieżność dost˛epu do danych, ale uniemożliwić odczytanie niezatwierdzonych danych (uncommitted read). Uncommitted Read (UR) - najniższy poziom izolacji. Może zajść brudny odczyt, odczyt widmo lub odczyty nie dajace ˛ si˛e powtórzyć. Blokada dotyczy tylko zmienianych wierszy. Transakcja na tym poziomie izolacji może odczytywać zmiany danych wprowadzone przez inne transakcje, zanim zostana˛ one zatwierdzone poleceniem COMMIT. Zapewnia maksymalna˛ współbieżność. Używany, gdy: zadajemy tylko zapytania SELECT; dopuszczalny jest odczyt niezatwierdzonych danych. Dlaczego kopia zapasowa? Dlaczego warto tworzyć kopie zapasowe danych? Tworzenie kopii zapasowych danych jest istotne dla firm: Utracenie informacji może spowodować poważny kryzys lub gorzej, doprowadzić do upadłości przedsi˛ebiorstwa. Typowe problemy: I awaria systemu I awaria zasilania I uszkodzenie transakcji I użytkownicy moga˛ przypadkowo uszkodzić baz˛e I awaria dysku I serwer bazy może zostać uszkodzony w wyniku pożaru, powodzi lub innej katastrofy. DB2 udost˛epnia narz˛edzia tworzenia kopii zapasowych (backup) i odzyskiwania danych (recovery), aby zapewnić danym bezpieczeństwo. Mechanizm dzienników transakcji Zadanie dzienników (logów) transakcji: Śledzenie zmian wprowadzonych do obiektów bazy danych i ich danych. Podczas procesu odzyskiwania DB2 analizuje dzienniki i decyduje, które zmiany należy wprowadzić, a które odrzucić. Transakcje w buforze dziennika sa˛ rejestrowane w (pliku) dziennika transakcji, w poniższych sytuacjach: I Bufor dziennika jest pełny I Liczba zatwierdzeń osiagn ˛ ała ˛ wartość MINCOMMIT I Upłyn˛eła jedna sekunda. Statusy dzienników: I aktywne dzienniki informacje o transakcjach, które nie zostały jeszcze zatwierdzone ani wycofane; I dzienniki archiwalne dost˛epne online logi zakończonych transakcji, w aktywnym katalogu dzienników I dzienniki archiwalne dost˛epne offline logi zakończonych transakcji, przechowywane oddzielnie, cz˛esto na innym nośniku Metody archiwizacji dziennika Circular Logging I podstawowe pliki dziennika sa˛ używane do zapisania wszystkich transakcji; wykorzystywane ponownie, gdy transakcje zostaja˛ zakończone; I dodatkowe pliki dziennika sa˛ alokowane w razie potrzeby, gdy nie jest dost˛epny kolejny podstawowy plik dziennika (transakcje nadal sa˛ aktywne); I jeżeli zarówno podstawowe jak i dodatkowe pliki dziennika sa˛ pełne i nie moga˛ być ponownie wykorzystane, wyst˛epuje bład ˛ zapełnienia dziennika i jest zwracany komunikat o bł˛edzie SQL0964C; I dozwolone sa˛ tylko pełne, offlinowe backupy bazy danych; I nie ma możliwości odtworzenia danych z dzienników (mechanizm roll-forward nie jest dost˛epny). Metody archiwizacji dziennika Archival Logging I określane za pomoca˛ parametru konfiguracyjnego bazy LOGARCHMETH1; I wszystkie pliki dziennika sa˛ przechowywane, aby umożliwić odtwarzanie danych z dzienników i backupy w trybie online; I dzienniki moga˛ być opcjonalnie archiwizowane do innej lokalizacji (archiwum,) gdy nie sa˛ już aktywne, aby uniknać ˛ zapełnienia katalogu dziennika. Tworzenia kopii zapasowych Backup bazy danych: kopia bazy albo przestrzeni tablicowej; zawiera I dane użytkowników; I katalogi systemowe DB2; I wszystkie pliki kontrolne, np. pliki puli buforów, przestrzeni tablicowych, pliki konfiguracyjne bazy. Dwa tryby wykonywania backupów: I Offline Backup I I I w trakcie wykonywania kopii nie może być żadnego innego połaczenia ˛ z baza; ˛ jedyna możliwość wykonania kopii, jeżeli używamy metody archiwizacji dzienników circular logging. Online Backup I I I inne procesy lub aplikacje moga˛ mieć dost˛ep do bazy danych; dane sa˛ dostepne dla użytkowników podczas wykonywania backupu; wymaga aktywnej opcji archival logging. Instrukcja tworzenia backupów: składnia: db2 backup database <db_name> <online> to <dest_path> online backup: db2 backup database mydb online to c:/db2inst1/backups offline backup: db2 backup database mydb to c:/db2inst1/backups Kopia zapasowa bazy danych - konwecja nadawania nazwy pliku: SAMPLE.0.DB2INST.NODE0000.CATN0000.20100314131259.001 Alias bazy typ backupu instancja w˛ezeł w˛ezeł katalogu data i czas numer kolejny. Typ backupu: 0 = pełna kopia; 3 = kopia przestrzeni tablicowej. Kopia zapasowa przestrzeni tablicowej DB2 daje możliwość tworzenia kopii wybranych przestrzeni tablicowych. Mechanizm tworzenia kopii na poziomie przestrzenie tablicowych: I pozwala użytkownikom na stworzenie kopii tylko cz˛eści bazy; I kilka przestrzeni tablicowych może być wybranych jednocześnie; I tylko, jeżeli baza używa metody archival logging; I dost˛epny jako backup w trybie online i offline; I przestrzeń tablicowa może zostać odzyskana z pełnego backupu bazy danych lub z backupu danej przestrzeni tablicowej. Tworzenie backupu przestrzeni tablicowej (używamy słowa kluczowego TABLESPACE): db2 backup database mydb1 TABLESPACE (TBSP1) ONLINE to c:/db2inst1/backup Kopie przyrostowe bazy Zamiast tworzyć pełna˛ kopi˛e bazy, można tworzyć tylko kopi˛e tych danych, które zostały zmienione od czasu wykonania ostatniego pełnego backupu. W DB2 sa˛ dost˛epne dwa typy backupów przyrostowych: I backup przyrostowy (inaczej skumulowany) - kopia zapasowa wszystkich danych bazy, które zmieniły si˛e od momentu wykonania ostatniego, pomyślnego pełnego backupu bazy. I backup przyrostowy typu delta - kopia zapasowa wszystkich danych bazy, które zmieniły si˛e od momentu wykonania ostatniego, pomyślnego (pełnego, przyrostowego lub delta) backupu bazy. I parametr konfiguracyjny bazy TRACKMOD musi być ustawiony na ON; I pozwala na wykonywanie backupu bazy lub przestrzeni tablicowej; I metoda odpowiednia dla dużych baz, w których wyst˛ epuje znaczna oszcz˛edność miejsca przy tworzeniu kopii tylko tych danych, które zostały ostatnio zmienione. Tryby odzyskiwania bazy danych I odzyskiwanie po awarii lub restarcie chroni baz˛e przed utrata˛ spójności danych (np. w przypadku utraty zasilania); I odzyskiwanie wersji bazy danych odzyskuje zrzut bazy; I odtwarzanie zmian (roll forward) rozszerza możliwości odzyskiwania wersji bazy danych, poprzez połaczenie ˛ odzyskiwania danych z kopii zapasowej z odtwarzaniem danych z plików dziennika. Narz˛edzie przywracania w DB2 jest uzupełnieniem mechanizmu tworzenia kopii zapasowych. Pozwala przywrócić baz˛e danych lub przestrzeń tablicowa˛ na podstawie utworzonego wcześniej backupu. Parametr TAKEN AT pozwala określić, który z dost˛epnych plików zawierajacych ˛ kopie danej bazy należy wybrać do odzyskiwania danych - określa znacznik czasu wykonania kopii (który jest wyświetlany po pomyślnym wykonaniu backupu). Przykład: plik kopii bazy: SAMPLE.0.DB2INST.NODE0000.CATN0000. 20140418131210.001 instrukcja odzyskiwania danych z tego backupu: RESTORE DATABASE dbalias FROM <db_path> TAKEN AT 20140418131210 Po odzyskaniu danych baza może być w trybie roll forward pending (dzieje si˛e tak, gdy odtwarzamy dane z kopii przestrzeni tablicowej, mamy aktywna˛ metod˛e archiwizacji dziennika archival logging). Można teraz wykonać operacj˛e odtwarzania danych z plików dziennika (roll forward), która pozwala na odtworzenie zmian, które zostały wprowadzone po wykonaniu backupu. Można odtworzyć dane do końca dzienników lub do momentu w czasie. Jeżeli wybierzemy druga˛ opcj˛e, zmiany wprowadzone po podanym momencie w czasie nie zostana˛ uwzgl˛ednienione. Odtwarzanie danych do końca dzienników i wyjście z trybu roll forward pending: ROLLFORWARD DATABASE sample TO END OF LOGS AND COMPLETE; Narz˛edzia do przenoszenia danych Narz˛edzia do przenoszenia danych umożliwiaja: ˛ I przenoszenie danych pomi˛edzy tymi samymi bazami, I różnymi bazami, I na tej samej lub innej platformie sprz˛etowej. Narz˛edzia do przenoszenia danych: EXPORT IMPORT LOAD wraz z komenda˛ SET INTEGRITY Mechanizm przenoszenia danych Mamy dwie bazy danych: A i B. Używajac ˛ narz˛edzia EXPORT możemy wyeksportować tabel˛e do pliku, który ma jeden z poniższych formatów: DEL = Delimited ASCII, IXF = Integrated Exchange Format Po wyeksportowaniu danych do pliku, narz˛edzie IMPORT służy do ponownego zaimportowania tych danych do tabeli. Tabela musi istnieć w przypadku formatu: DEL, a nie jest to konieczne dla IXF. Innym sposobem na załadowanie danych jest narz˛edzie LOAD, a nast˛epnie wydanie polecenia SET INTEGRITY. Formaty plików Narz˛edzie EXPORT pozwala wyeksportować tabel˛e do pliku. Możliwe formaty: Pliki tekstowe: • DEL = Delimited ASCII Moga˛ być otwarte i przegladane ˛ w dowolnym edytorze tekstowym. • IXF = Integrated Exchange Format Przenosi nie tylko dane, ale rownież definicje obiektów w postaci instrukcji DDL. Wygodne, gdy potrzebujemy odtworzyć tabel˛e bezpośrednio z pliku IXF (to nie jest możliwe w przypadku innych formatów). Narz˛edzie EXPORT Narz˛edzie EXPORT jest wykorzystywane do eksportowania danych z tabeli do jednego z wcześniej podanych typów plików. Faktycznie przetwarzane jest tylko zapytanie SQL SELECT. Składnia polecenia: EXPORT TO <file-name> OF <file-type> <select-statement> Narz˛edzie EXPORT Narz˛edzie EXPORT jest wykorzystywane do eksportowania danych z tabeli do jednego z wcześniej podanych typów plików. Faktycznie przetwarzane jest tylko zapytanie SQL SELECT. Składnia polecenia: EXPORT TO <file-name> OF <file-type> <select-statement> Przykład: Eksport do pliku employee.ixf, w formacie IXF, 10 wierszy z tabeli employee: EXPORT TO employee.ixf OF IXF SELECT * FROM employee FETCH FIRST 10 ROWS ONLY Narz˛edzie EXPORT Narz˛edzie EXPORT jest wykorzystywane do eksportowania danych z tabeli do jednego z wcześniej podanych typów plików. Faktycznie przetwarzane jest tylko zapytanie SQL SELECT. Składnia polecenia: EXPORT TO <file-name> OF <file-type> <select-statement> Przykład: Eksport do pliku staff.del, w formacie DEL, wszystkich wierszy z tabeli STAFF, określajac ˛ znak pojedynczego cudzysłowu jako znak ograniczajacy ˛ dane tekstowe, średnik jako separator kolumny, przecinek jako separator miejsc dziesi˛etnych: export to staff.del of del modified by chardel" coldel; decpt, select * from staff Narz˛edzie EXPORT Narz˛edzie EXPORT jest wykorzystywane do eksportowania danych z tabeli do jednego z wcześniej podanych typów plików. Faktycznie przetwarzane jest tylko zapytanie SQL SELECT. Składnia polecenia: EXPORT TO <file-name> OF <file-type> <select-statement> Uwaga. Jeżeli nie podamy pełnej ścieżki dost˛epu do pliku wynikowego, zostanie on zapisany w bieżacym ˛ katalogu. Jeżeli plik o takiej nazwie już istnieje, zostanie nadpisany. Narz˛edzie IMPORT Narz˛edzie IMPORT używane jest do importowania danych z pliku do tabel. W rzeczywistości podczas operacji wykonywane jest polecenie SQL INSERT. Podczas operacji IMPORT aktywowane sa˛ wszystkie wyzwalacze i sprawdzane sa˛ wi˛ezy integralności. Może zostać wykorzystane do odtworzenia tabeli, dodania danych do istniejacej ˛ tabeli lub stworzenia nowej tabeli z danymi. Składnia polecenia: IMPORT FROM <file-name> OF <file-type> <import-mode> INTO <table-name> Narz˛edzie IMPORT Narz˛edzie IMPORT używane jest do importowania danych z pliku do tabel. W rzeczywistości podczas operacji wykonywane jest polecenie SQL INSERT. Podczas operacji IMPORT aktywowane sa˛ wszystkie wyzwalacze i sprawdzane sa˛ wi˛ezy integralności. Może zostać wykorzystane do odtworzenia tabeli, dodania danych do istniejacej ˛ tabeli lub stworzenia nowej tabeli z danymi. Składnia polecenia: IMPORT FROM <file-name> OF <file-type> <import-mode> INTO <table-name> Przykład: Import z pliku employee.ixf, w formacie IXF, do tabeli employee_copy (opcja REPLACE - zawartość tabeli zostanie nadpisana): IMPORT FROM employee.ixf OF IXF REPLACE INTO employee_copy Opcje narz˛edzia IMPORT Możliwe tryby (opcje) wywołania narz˛edzia IMPORT: I INSERT: dodaje dane do tabeli, bez zmiany istniejacych ˛ danych; I INSERT_UPDATE: dodaje nowe wiersze do tabeli lub modyfikuje już istniejace ˛ dane (dopasowuje wiersze na podstawie wartości klucza głównego); I REPLACE: usuwa wszystkie wiersze istniejace ˛ w tabeli, wstawia dane z pliku, nie zmienia tabeli ani definicji indeksów, I REPLACE_CREATE: działa tak samo jak REPLACE, jeżeli tabela istnieje, jeżeli tabela nie istnieje, tworzy tabel˛e i definiuje dla niej indeksy oraz wstawia dane (opcja dost˛epna tylko dla importu z plików IXF; oznaczona jako niezalecana); I CREATE: tworzy tabel˛e oraz wstawia do niej dane (tylko z plików IXF; oznaczona jako niezalecana); jeżeli eksport danych był z tabeli DB2, także tworzone sa˛ indeksy. Import z pliku tekstowego ASC Dane w pliku ASC sa˛ zorganizowane w postaci kolumn, umieszczonych na odpowiednich pozycjach w pliku. W takim pliku nie ma separatorów danych. Dla przykładu, pierwszych 10 wierszy tabeli employee zostało wyeksportowanych do pliku ASC (cztery pola z danymi (EMP_ID, DATE_OF_BIRTH, SALARY i EMP_NAME) zostały wyróżnione kolorami): Importujac ˛ dane z pliku ASC trzeba określić poczatkow ˛ a˛ i końcowa˛ pozycj˛e dla danych odpowiadajacych ˛ poszczególnym kolumnom wynikowej tabeli (opcja METHOD L ). Import z pliku tekstowego ASC Import danych z pliku EMP_DATA.ASC (poczatkow ˛ a˛ i końcowa˛ pozycj˛e dla danych odpowiadajacych ˛ poszczególnym kolumnom wynikowej tabeli określamy w opcji METHOD L ): IMPORT FROM EMP_DATA.ASC OF ASC METHOD L (1 7, 8 17, 18 23, 24 34) INSERT INTO NEW_EMP Import z pliku tekstowego DEL W pliku tekstowym zapisanym w formacie DEL, poszczególne dane sa˛ oddzielone separatorami (domyślny separator to przecinek), np. plik w którym zapisane sa˛ trzy wiersze danych o czterech kolumnach: "Smith, Bob",77,4973,15.46 "Jones, Bill",23,12345,16.34 "Williams, Sam",47,452,193.78 Import danych z pliku DEL do tabeli staff (nowe wiersze zostaja˛ dołaczone ˛ do istniejacych): ˛ IMPORT FROM staff.del OF DEL METHOD P(1, 3, 4) INSERT INTO staff(name, phone, bonus) Jeżeli w zapisanym pliku użyto innych opcji, niż domyślne, np. separator kolumny to średnik, należy użyć opcji modified, np. IMPORT FROM staff.del OF DEL MODIFIED BY coldel; METHOD P(1, 3, 4) INSERT INTO staff(name, phone, bonus) Import z pliku IXF Plik w formacie IXF zawiera nie tylko dane, ale rownież definicj˛e tabeli w postaci instrukcji DDL. Można odtworzyć tabel˛e bezpośrednio z pliku IXF. Przykład: eksportujemy pewne dane z tabeli employee do pliku IXF: EXPORT TO TOP_EARNERS.IXF OF IXF SELECT EMP_ID, EMP_NAME, DATE_OF_BIRTH, SALARY FROM EMP WHERE SALARY > 139990 ORDER BY EMP_ID Importujemy tworzac ˛ nowa˛ tabel˛e: IMPORT FROM TOP_EARNERS.IXF OF IXF CREATE INTO TOP_EMPLOYEES Narz˛edzie LOAD Narz˛edzie LOAD jest szybsza˛ niż IMPORT metoda˛ na załadowanie danych z pliku do tabeli. LOAD omija interakcj˛e z silnikiem DB2, wi˛ec wyzwalacze nie sa˛ aktywowane, nie sa˛ używane pule buforów, a wi˛ezy integralności sa˛ sprawdzane w osobnym kroku. LOAD jest szybszy niż IMPORT, gdyż działa na niższym poziomie, operujac ˛ bezpośrednio na stronach danych. Wyrożniamy 3 fazy ładowania danych: LOAD, BUILD i DELETE. Przykład: załadowanie danych z pliku IXF do tabeli employee_copy z opcja˛ REPLACE: LOAD FROM employee.ixf OF IXF REPLACE INTO employee_copy Po wykonaniu powyzszego polecenia przestrzeń tablicowa, w której znajduje si˛e tabela, zmienia status na CHECK PENDING. Nast˛epnie musimy wykonać polecenie SET INTEGRITY, aby sprawdzić integralność danych: SET INTEGRITY FOR employee_copy ALL IMMEDIATE UNCHECKED Narz˛edzie db2move Narz˛edzia EXPORT, IMPORT i LOAD moga˛ operować w danym momencie tylko na jednej tabeli. Zamiast przygotowywać dla każdej tabeli osobny skrypt, można wykorzystać narz˛edzie db2move, które zrobi to za nas. Wykorzystuje ono wyłacznie ˛ pliki typu IXF. Nazwy plików, do których sa˛ eksportowane (a potem importowane) tabele sa˛ generowane automatycznie. Przykład: eksport i import danych znajdujacych ˛ si˛e w bazie danych SAMPLE: db2move sample export db2move sample import Narz˛edzie db2look Narz˛edzia db2look możemy użyć do uzyskania pliku skryptowego, zawierajacego ˛ struktur˛e DDL bazy, statystyki bazy danych i opcje przestrzeni tablicowych. Plik ten można poźniej wykorzystać do odtworzenia bazy danych na innym systemie. Na przykład, jeśli chcemy sklonować baz˛e danych z serwera DB2 działajacego ˛ na systemie Linux na serwer działajacy ˛ na systemie Windows, uruchamiamy narz˛edzie db2look na serwerze Linux, otrzymujac ˛ struktur˛e bazy przechowywana˛ w pliku skryptowym. Uruchamiamy ten skrypt na systemie Windows, otrzymujac ˛ struktur˛e bazy danych. Teraz na systemie Linux uruchamiamy narz˛edzie db2move z opcja˛ export. Nast˛epnie kopiujemy otrzymane pliki na serwer DB2 działajacy ˛ na systemie Windows i uruchamiamy narz˛edzie db2move z opcja˛ import lub load. Po wykonaniu tych czynności otrzymamy pełna˛ kopi˛e bazy danych na nowej platformie. Narz˛edzie db2look Składnia polecenia: db2look <database-name> <option> Wybrane opcje: Opcja -e -u creator -z schema -t table-name -o file-name -x Opis generuje komendy DDL dla obiektów bazy (m.in. tabele, widoki, indeksy, wyzwalacze, sekwencje, funkcje, procedury, ograniczenia (klucze główne, obce, check)). generuje DDL tylko dla obiektów utworzonych przez użytkownika o podanym ID. generuje DDL tylko dla obiektów z danego schematu. tylko wybrana tabela (lub tabele). zapisuje wynik w podanym pliku. generuje instrukcje DCL (GRANT i REVOKE). db2look -d SAMPLE -z student -e -o sample.ddl Zadania konserwacyjne Aby baza danych była dobrze utrzymana, potrzeba przeprowadzać czynności konserwacyjne. Głównym kierunkiem w DB2 jest automatyzacja wi˛ekszości z tych zadań. Zarówno DB2 Express-C, jak i wszystkie inne aktualne wydania DB2 zawieraja˛ możliwości automatyzujace ˛ te czynności. REORG, RUNSTATS oraz REBIND to trzy główne zadania konserwacyjne DB2: Zadania konserwacyjne Aby baza danych była dobrze utrzymana, potrzeba przeprowadzać czynności konserwacyjne. Głównym kierunkiem w DB2 jest automatyzacja wi˛ekszości z tych zadań. Zarówno DB2 Express-C, jak i wszystkie inne aktualne wydania DB2 zawieraja˛ możliwości automatyzujace ˛ te czynności. REORG, RUNSTATS oraz REBIND to trzy główne zadania konserwacyjne DB2: Konserwacja bazy danych jest wykonywana w sposób cykliczny. Jeżeli wykonana zostanie komenda REORG, zalecane jest, aby również wywołać RUNSTATS, a potem REBIND. Zadania konserwacyjne Aby baza danych była dobrze utrzymana, potrzeba przeprowadzać czynności konserwacyjne. Głównym kierunkiem w DB2 jest automatyzacja wi˛ekszości z tych zadań. Zarówno DB2 Express-C, jak i wszystkie inne aktualne wydania DB2 zawieraja˛ możliwości automatyzujace ˛ te czynności. REORG, RUNSTATS oraz REBIND to trzy główne zadania konserwacyjne DB2: Wraz z upływem czasu tabele w bazie danych ulegaja˛ modyfikacji (w wyniku działania komend UPDATE, INSERT, DELETE). Należy wtedy wykonać cały cykl konserwacyjny, rozpoczynajac ˛ od REORG. Polecenie REORG Wykonywanie operacji INSERT, UPDATE, DELETE sprawia, że wraz z upływem czasu dane sa˛ porozrzucane po różnych stronach bazy danych. Komenda REORG odzyskuje niewykorzystane miejsca w pami˛eci oraz reorganizuje dane w taki sposób, aby zwracanie wyników było bardziej efektywne. Najwi˛ekszy zysk płynie ze stosowania komendy REORG na cz˛esto modyfikowanych tabelach. REORG można również stosować do reorganizacji indeksow. Reorganizacja może być w trybie online, lub off-line. Stosowanie REORG w trybie off-line jest bardziej efektywne, ale nie pozwala na dost˛ep do bazy danych. Tryb on-line pozwala na dost˛ep do bazy, ale wymaga wi˛ekszej ilości zasobów systemowych (dobry w przypadku mniejszych tabel). Składnia: REORG TABLE <tablename> Przykład: reorganizacja tabeli: REORG TABLE employee reorganizacja indeksów: REORG INDEXES ALL FOR TABLE employee Przed komenda˛ REORG można użyć REORGCHK w celu sprawdzenia, czy tabela lub indeks wymaga reorganizacji. reorgchk update statistics on table employee Polecenie RUNSTATS Optymalizator DB2 znajduje najbardziej efektywne ścieżki dost˛epu, aby zlokalizować i wydobyć dane. Optymalizator DB2 to zorientowany na koszty system, który poprzez użycie statystyk obiektów bazodanowych, przechowywanych w tabelach słownika systemowego, maksymalizuje wydajność bazy danych. Na przykład, tabele te zawieraja˛ statystki o ilości kolumn i wierszy w tabelach oraz ile i jakiego typu indeksy sa˛ dost˛epne dla określonej tabeli. Statystyki nie sa˛ aktualizowane dynamicznie. Takie ustawienie jest domyślne, ponieważ ciagła ˛ aktualizacja statystyk wraz z każda˛ operacja˛ przeprowadzana˛ na bazie danych może negatywnie wpłynać ˛ na jej wydajność. Zamiast tego do aktualizacji statystyk w DB2 dostarczona została komenda RUNSTATS. Statystyki bazy danych powinny być jak najbardziej aktualne. Jeżeli statystyki bazy danych sa˛ aktualne, DB2 wybierze najlepsza˛ drog˛e dost˛epu do danych. Cz˛estotliwość przeprowadzania aktualizacji statystyk jest zależna od tego, jak cz˛esto modyfikowane sa˛ dane w tabeli. Składnia: RUNSTATS ON TABLE <schema.tablename> Przykład: RUNSTATS ON TABLE myschema.employee BIND/REBIND Po pomyślnym wykonaniu komendy RUNSTATS, nie wszystkie zapytania użyja˛ najnowszych statystyk: Plany dost˛epu statycznego SQL-a sa˛ określane w momencie wykonania komendy BIND, wi˛ec nie zawsze statystyki używane w danym momencie sa˛ tymi najbardziej aktualnymi. Polecenie db2rbind: do ponownego wiazania ˛ wszystkich istniejacych ˛ pakietów z najbardziej aktualnymi statystykami. Składnia: db2rbind database_alias -l <logfile> Przykład: Aby ponownie zwiazać ˛ paczki bazy danych sample i zapisać dziennik do pliku mylog.txt należy użyć polecenia: db2rbind sample -l mylog.txt Sposoby konserwacji I Konserwacja r˛eczna Administrator przeprowadza wszystkie czynności konserwacyjne r˛ecznie wtedy, gdy istnieje taka potrzeba. I Stworzenie skryptów do przeprowadzania konserwacji Można stworzyć skrypty zawierajace ˛ komendy konserwacyjne oraz zaplanować ich regularne uruchamianie. I Konserwacja automatyczna DB2 może automatycznie dbać o konserwacj˛e bazy danych (REORG, RUNSTATS, BACKUP). Konserwacja automatyczna Konserwacja automatyczna składa si˛e z nast˛epujacych ˛ elementów: 1. Użytkownik definiuje okno konserwacyjne, czyli okres, w którym wykonywanie zadań nie zakłóci funkcjonowania systemu w dużym stopniu. (Na przykład, gdy wykorzystanie systemu w niedziele mi˛edzy godzina˛ 2:00 a 4:00 jest najmniejsze, to ten okres b˛edzie dobrym oknem konserwacyjnym.) 2. Istnieja˛ dwa okna konserwacyjne: jedno dla operacji w trybie on-line oraz drugie dla trybu off-line. 3. DB2 automatycznie przeprowadzi operacje konserwacyjne tylko wtedy, gdy sa˛ one potrzebne i tylko w trakcie okna konserwacyjnego.