Wykład V Indeksy
Transkrypt
Wykład V Indeksy
Wykład V Indeksy • • • • dodatkowe struktury służące przyśpieszeniu dostępu do danych o użyciu indeksu podczas realizacji poleceń decyduje SZBD niektóre systemy bazodanowe automatycznie tworzą indeksy dla kolumn o wartościach unikatowych zalety i wady Struktura indeksu – składa się z rekordów o dwóch polach • • klucz - zawiera wartości występujące w atrybutach relacji, na których założono indeks wskaźnik – określa blok zawierający rekordy, których wartości atrybutów indeksowych są równe wartościom klucza Podział indeksów ze względu na • strukturę – B-drzewa, bitmapowe • liczbę atrybutów indeksowych w kluczu - indeksy proste, złożone • zastosowanie – funkcyjne, bitmapowe, bitmapowe połączeniowe składnia tworzenia CREATE [ UNIQUE | BITMAP ] INDEX <Nazwa_indeksu> ON <Nazwa_tabeli> ( <wyrażenie_indeksowe> ) [ COMPRESS ] [ REVERSE ] ; usunięcia DROP INDEX <Nazwa_indeksu> ; modyfikacji ALTER INDEX <Nazwa_indeksu> . . . ; przykłady: CREATE INDEX Ind_pra ON Pracownicy (Upper( Nazwisko ) ) ; CREATE UNIQUE INDEX Ind_dzial ON Dzialy ( Nazwa ) ; CREATE BITMAP INDEX Ind_pl ON Studenci ( Plec ) ; CREATE BITMAP INDEX Ind_sprz ON Sprzedaz ( p.nazwa , k.miasto ) FROM Sprzedaz s , Sklepy k , Produkty p WHERE s.id_sklepu = k.id_sklepu AND s.id_produktu = p.id_produktu ; 1 Wykład V Strategia indeksowania • • • • indeksy zajmują miejsce i wymagają aktualizacji najczęściej stosuje się indeksy proste ( klucz indeksowy – jedna kolumna ) indeksy o strukturze B-drzewa zaleca się tworzyć dla: • kolumn zawierających mało duplikatów • zapytań wybierających mały podzbiór wierszy tabeli • kolumn często wykorzystywanych w warunkach selekcji • kolumn pełniących rolę kluczy głównych indeksy bitmapowe mogą być alternatywą dla tradycyjnych indeksów gdy • tabele są bardzo duże (miliony wierszy ) • kolumny zawierają wartości często powtarzające się ( płeć, wykształcenie ) Inne obiekty bazy danych tworzone w PL/SQL PL/SQL – (ang. Procedural Language/Structured Query Language) Proceduralne rozszerzenie języka SQL do pisania aplikacji w Oracle • język proceduralny; kompilowany • wykorzystuje typowe konstrukcje programistyczne; pętle, decyzje • ma strukturę blokową • każda instrukcja bloku PL/SQL jest zakończona średnikiem /* przykładowy kod źródłowy funkcji */ CREATE OR REPLACE FUNCTION Dwa_imiona ( p_Nr_albumu IN Studenci.Nr_albumu%TYPE ) RETURN BOOLEAN AS v_Robo NUMBER:=0; BEGIN SELECT instr(imiona,',') INTO v_Robo FROM Studenci WHERE Nr_albumu = p_Nr_albumu; IF v_Robo <> 0 THEN RETURN FALSE; ELSE RETURN TRUE; END IF; END Dwa_imiona; 2 Wykład V /* przykładowy kod źródłowy wyzwalacza */ CREATE OR REPLACE TRIGGER Kontrola_plac BEFORE INSERT ON Pracownicy FOR EACH ROW DECLARE V_min NUMBER; V_max NUMBER; BEGIN SELECT placa_min, placa_max INTO V_min, V_max FROM Stanowiska WHERE stanowisko=:new.stanowisko; IF :new.placa NOT BETWEEN V_min AND V_max THEN RAISE_APPLICATION_ERROR( -20001,' Wynagrodzenie niezgodne z stanowiskiem'); END IF; END; TRANSAKCJE zestaw operacji pod szczególną kontrolą • pojęcie transakcji jest podstawą wszelkich mechanizmów odpowiedzialnych za niezawodne działanie systemu z wieloma użytkownikami • transakcja to sekwencja operacji, która musi zakończyć się sukcesem w całości - w przeciwnym wypadku musi powrócić stan początkowy (wyjściowy ) • przykłady transakcji: • operacja przelewu kwoty X z konta A na konto B • rezerwacja biletów lotniczych z uwzględnieniem połączeń • sprzedaż internetowa Transakcja jest zdarzeniem lub sekwencją zdarzeń, w wyniku których baza danych przechodzi od jednego spójnego stanu do następnego. W przypadku niepowodzenia dowolnego ze zdarzeń lub nie zakończenia sekwencji system powraca do stanu początkowego. Zakończenie transakcji gwarantuje zachowanie spójnego stanu bazy danych, aż do jego zmiany w wyniku kolejnej transakcji. ( Integralność danych ) Jest to grupa operacji w bazie danych, które jako całość charakteryzuje się zbiorem gwarantowanych właściwości- znanych jako ACID • niepodzielność ( z ang. Atomicity ) - wykonują się wszystkie operacje, albo żadna • spójność ( z ang. Consistency ) - wszystkie operacje składające się na transakcję działają na spójnym zbiorze danych, a po jej zakończeniu baza danych pozostaje w spójnym stanie • izolacyjność ( z ang. Isolation ) - transakcja nie wie nic o innych transakcjach i nie musi uwzględniać ich działania • trwałość ( z ang. Durability ) - po zatwierdzeniu transakcji zmiany dokonane w jej wyniku są trwałe, nawet w przypadku awarii systemu 3 Wykład V Użytkownik realizuje swoje transakcje poprzez • polecenia języka SQL kierowane bezpośrednio, • pośrednio przy użyciu wcześniej przygotowanych aplikacji bazodanowych. Rozpoczęcie transakcji niejawne: • pierwsza poprawna instrukcja w sesji użytkownika • koniec poprzedniej transakcji jawne: • w niektórych systemach bazodanowych polecenie • BEGIN TRANSACTION • lub START TRANSACTION Zakończenie transakcji jawne: • • polecenie COMMIT – zatwierdzenie zmian polecenie ROLLBACK – wycofanie zmian niejawne: • poprawne zamknięcie sesji użytkownika ( wylogowanie ) - zatwierdzenie zmian • polecenia z grupy DDL lub DCL – zatwierdzenie zmian • awaria systemu – wycofanie zmian Współbieżność - równoczesny dostęp wielu transakcji do jednych i tych samych danych Anomalie współbieżnego dostępu: • brudne odczyty ( ang. dirty read )– gdy transakcja odczytuje dane, zmienione przez inną transakcję, która potem zostaje wycofana. ( Pierwsza transakcja odczytała dane, które już nie istnieją ). • utracona modyfikacja ( ang. lost update ) - dwie transakcje równolegle przystępują do aktualizacji tych samych danych i zmiany, wprowadzone przez jedną transakcji, zostają nadpisane przez zmiany z drugiej transakcji. • niepowtarzalne odczyty ( ang. nonrepeatable read/fuzzy read)– wynik tego samego zapytania wykonywanego kilka razy w tej samej transakcji za każdym razem jest inny; jest to rezultat zmian wprowadzonych przez drugą transakcję w czasie działania pierwszej. • fantomy ( ang. phantom read )– dotyczy zmian zachodzących w innych transakcjach, które powodują, że klauzulę WHERE transakcji zaczynają spełniać nowe wiersze. ( Dzieje się tak dlatego, że równolegle inna transakcja wstawia nowe rekordy czy też modyfikuje istniejące w ten sposób, że zbiór odpowiedzi, spełniających kryteria zapytania pierwszej transakcji, wciąż się powiększa ). 4 Wykład V Standard języka SQL – definiuje różne poziomy izolacji dla transakcji • SERIALIZABLE ( uszeregowalny ) • READ COMMITTED ( odczyt zatwierdzonych danych ) • REPEATABLE READ ( powtarzalny odczyt ) • READ UNCOMMITTED ( odczyt niezatwierdzonych danych ) Możliwe błędy występujące na danym poziomie izolacji brudne odczyty niepowtarzalne fantomy odczyty READ UNCOMMITTED tak tak tak READ COMMITTED nie tak tak REPEATABLE READ nie nie tak SERIALIZABLE nie nie nie Zasadniczo domyślnym poziomem izolacji powinien być SERIALIZABLE ale niektóre systemy używają READ COMMITTED System zarządzania bazą danych stosuje odpowiednie algorytmy zarządzania współbieżnym zbiorem transakcji. ( najczęściej blokowanie dwufazowe ) Blokada – przydzielenie zasobu do zadania ( dla transakcji ). ( ang. lock ) - technika kontroli współbieżnego dostępu do danych polegająca na nałożeniu blokady na obiekt, który jest modyfikowany przez transakcję ( w szczególności inne transakcje nie mogą go zmieniać ). Blokady zakładane są automatycznie w momencie wydawania przez użytkownika poleceń modyfikacji danych lub ręcznie poprzez odpowiednie polecenie. Rodzaj blokowanego zasobu jest określany jako „ziarnistość - granulacja „ elementów danych, może to być: • pojedynczy atrybut • wiersz tabeli • blok danych • tabela a nawet cała baza Rodzaje blokad: • Wyłączne ( ang. exclusive lock ) - zasób może być przydzielony tylko do jednego zadania • Współdzielone ( ang. shared lock ) - zasób może zostać przydzielony jednocześnie wielu zadaniom 5 Wykład V Zakleszczenia ( ang. deadlock ) - stan, w którym dwie lub więcej równoległych transakcji znajduje się w stanie wzajemnego oczekiwania na uwolnienie blokady z potrzebnych zasobów, aby móc kontynuować działanie. System powinien wykryć blokadę i ją zlikwidować wyszukując cykl w grafie oczekiwań (ang. wait-for-graph) i wycofując jedną z należących do cyklu transakcji. przykłady: transakcja1 (użytkownik OLA) transakcja2 (użytkownik ANNA) UPDATE ANNA.pracownicy UPDATE OLA.dzialy SET placa=placa*1.5 SET siedziba=’ Dąbrowskiego ‘ WHERE numer = 8130; WHERE nazwa = ‘Administracja’; UPDATE dzialy DELETE pracownicy SET siedziba = ‘Dąbrowskiego ‘ WHERE numer = 8130; WHERE nazwa = ‘Administracja’; desc Towary SELECT * FROM Towary ; INSERT INTO Towary ( Symbol , Nazwa , Cena )VALUES ( '125/a' , ' Monitor ' , 1780 ) ; SAVEPOINT Po_Wstawieniu ; UPDATE Towary SET Cena = Cena * 1.01 WHERE Symbol = '127/a' ; ALTER TABLE Dostawcy ADD Opis VARCHAR2(250) ; DELETE FROM Towary WHERE Symbol = '101/a' ; ROLLBACK TO SAVEPOINT Po_Wstawieniu ; 1 wiersz został utworzony. Punkt zachowania został utworzony. 1 wiersz został zmodyfikowany. Tabela została zmieniona. 0 wierszy zostało usuniętych. ROLLBACK TO SAVEPOINT Po_Wstawieniu * BŁĄD w linii 1: ORA-01086: punkt zachowania 'PO_WSTAWIENIU' nigdy nie został ustanowiony 6 Wykład V zakładamy, że tabela A ma 25 wierszy i nie było automatycznego „komitowania”; wykonujemy następujące czynności: SELECT * FROM A; DELETE FROM A ; CREATE TABLE Robocza( kol NUMBER(3)) ; INSERT INTO A VALUES ( . . . ); ALTER USER . . . ; INSERT INTO A VALUES( . . . ); SELECT * FROM A ; Po tym poleceniu występuje awaria brak połączenia z serwerem ile wierszy ma obecnie tabela A ? czy tabela Robocza została utworzona ? Użytkownicy baz danych i ich uprawnienia użytkownik jest właścicielem utworzonych obiektów, które znajdują się wewnątrz jego schematu noszącego tą samą nazwę, co użytkownik. Możliwości użytkownika są ograniczane za pomocą uprawnień Definiowanie użytkowników składnia: CREATE USER <nazwa_konta> IDENTIFIED BY <hasło> . . . ; Modyfikowanie definicji użytkownika składnia: ALTER USER <nazwa_konta> ACCOUNT LOCK ; Zmiana hasła dla użytkownika składnia: ALTER USER <nazwa_konta> IDENTIFIED BY <hasło> ; Usunięcie użytkownika składnia: DROP USER <nazwa_konta> CASCADE ; Uprawnienia • systemowe – prawo do wykonywania operacji na bazie danych np. połączenia • obiektowe – prawo dostępu do obiektu z określoną możliwością SELECT, UPDATE, . 7 Wykład V Role - grupa uprawnień (zarówno systemowych jak i obiektowych ) w ramach jednego nazwanego zbioru. • predefiniowane ( CONNECT, RESOURCE, DBA ) • zdefiniowane przez administratora (np. student2 ) przykłady: CREATE USER adept IDENTIFIED BY nowicjusz DEFAULT TABLESPACE student TEMPORARY TABLESPACE temp QUOTA 10M ON student; GRANT student2 TO adept; GRANT SELECT ON Studenci TO PUBLIC ; GRANT INSERT ON Towary TO SZEF ; GRANT UPDATE ( Rok, Kierunek ) ON Studenci TO GURU ; Niektóre uprawnienia systemowe to: CREATE TABLE CREATE ANY VIEW CREATE ANY INDEX ALTER ANY TABLE DROP ANY TABLE SELECT ANY TABLE INSERT ANY TABLE CREATE TRIGGER EXECUTE ANY PROCEDURE 8