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

Podobne dokumenty