Informatyka (7-8) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro katpalik@pg.gda.pl katarzyna.palikowska@wilis.pg.gda.pl
Powtórzenie Tabela, rekord, krotka, wiersz Atrybut, kolumna, pole Atomowość atrybutu Klucz główny, alternatywny, obcy, sztuczny Integralność danych, integralność referencyjna Normalizacja Pierwsza postać normalna, Druga postać normalna, Trzecia postać normalna Redundancja danych Anomalia Indeks Hurtownia danych
Nowe pojęcia Identyfikacja, Uwierzytelnienie, Autoryzacja T-SQL: Kursor, Trigger, Procedura składowana Transakcja, ACID Dziennik transakcji LOG, Poziom izolacji, Brudny wiersz, Fantom, Blokada, Zakleszczenie, Zagłodzenie, Szeregowalność
CASE WHEN THEN END
IIF(warunek, T, F)
PIVOT
Zadania DBMS System Zarządzania Bazą Danych (DataBase Management System) powinien zapewnić: 1. Autoryzację dostępu Poufność 2. Spójność bazy danych Wiarygodność 3. Współbieżny dostęp do danych 4. Odporność na awarie 5. Efektywne przetwarzanie danych Indeksy
Autoryzacja dostępu Identyfikacja (identification) podmiot deklaruje swoją tożsamość (identity) Uwierzytelnianie (authentication) strona ufająca stosuje odpowiednią technikę uwierzytelniania (authentication mechanism) w celu weryfikacji zadeklarowanej wcześniej tożsamości. Na przykład: serwer prosi użytkownika o wpisanie hasła i weryfikuje jego zgodność z wcześniej ustawioną wartością Autoryzacja (authorisation) potwierdzenie, czy dany podmiot jest uprawniony do uzyskania dostępu do żądanego zasobu / funkcjonalności / wykonania komendy. Mixed Mode
Role - służą do grupowania kont użytkowników.
USE master CREATE LOGIN Student WITH PASSWORD = Axyz98! SELECT * FROM sys.sql_logins Widok systemowy CREATE USER Student FROM LOGIN Student EXEC sp_addrolemember db_owner, Student Procedura składowana CREATE USER Niezalezny WITH PASSWORD = xxxx
Spójność bazy danych Wierne odzwierciedlenie danych rzeczywistych Poprawność modelu Autoryzacja dostępu Odporność na awarie / trwałość Spełnienie ograniczeń integralnościowych Foreign Key ALTER TABLE Zaliczenie ADD CHECK (Ocena in (2,3,4,5)) Nazwisko varchar(30) NOT NULL ON UPDATE/DELETE CASCADE ON UPDATE/DELETE RESTRICT ON UPDATE/DELETE SET NULL Brak anomalii wynikających ze współbieżnego dostępu do danych
Trigger (wyzwalacz) Paczka PK ID FK id_nadawcy FK id_odbiorcy Czy_zaplacono Kwota Klient PK ID Nazwisko Imie Konto PK ID FK id_klienta Warunek: Akcja: Jeżeli czy_zaplacono zmieni się z 0 na 1 to przelej Kwotę z konta odbiorcy na konto nadawcy
Trigger (wyzwalacz) Transact SQL T-SQL
T-SQL Kursor DECLARE @I INT declare kur SCROLL cursor for select lp from dane ORDER BY LP OPEN kur; FETCH NEXT FROM kur INTO @I; WHILE @@FETCH_STATUS=0 BEGIN PRINT @I; IF @I % 2 =0 UPDATE dane SET flaga=0 WHERE lp = @I FETCH NEXT FROM kur INTO @I; END CLOSE kur DEALLOCATE kur
Konto Transakcja Nr_konta Kwota 23000011110000 1000 34555512130101 300 BEGIN TRAN Operacja przelewu z konta na konto update Konto set kwota = kwota + 100 where nr_konta= 34555512130101 Awaria, odczyt niespójnych danych update Konto set kwota = kwota - 100 where nr_konta= 23000011110000 END TRAN COMMIT TRANSACTION ROLLBACK TRANSACTION Zatwierdzenie zmian Cofnięcie zmian
Transakcja to logiczna jednostka pracy, składa się z jednej lub wielu operacji dostępu do bazy danych (np. wstawiania, usuwania, modyfikacji czy pobierania), Transakcja przeprowadza bazę danych z jednego stanu spójnego w inny stan spójny. Zasada wszystko albo nic. Transakcja wykonywana jest w całości lub wcale. DBMS nie może dopuścić do częściowego wykonania transakcji.
Atomicity Atomowość Własność ACID Transakcje są niepodzielne. Consistency Spójność Transakcja przekształca bazę z jednego stanu spójnego w inny (bez konieczności zachowywania spójności bazy w punktach pośrednich), transakcja nie może naruszać ograniczeń integralnościowych. Isolation Durability Izolacja Trwałość Oznacza odizolowanie transakcji jednej od drugiej, jeśli mamy wiele transakcji przebiegających równocześnie ich wykonywanie nie powinno ze sobą kolidować, mimo współbieżnego wykonywania, transakcje widzą stan bazy danych tak, jak gdyby były wykonywane w sposób sekwencyjny. Zmiany dokonane w bazie przez zatwierdzone transakcje muszą być trwałe, niezmieniane nawet przez różnego rodzaju awarie (muszą być odtwarzalne)
Dziennik Transakcji (LOG) Zbiór informacji (przechowywany na dysku) w którym zapisywane są informacje o wszystkich operacjach aktualizacji, Zapamiętywane są wartości sprzed i po aktualizacji, Dziennik jest okresowo archiwizowany (uniknięcie awarii), Pozwala na cofnięcie aktualizacji w ramach transakcji lub ponowienie transakcji, jeśli aktualizacja dziennika nie była całkowita Przechowuje tzw. rekordy dziennika wraz z identyfikatorem transakcji T rozpoczęcie transakcji T zapisywanie elementu X: T, X, stara i nowa wartość zatwierdzenie T anulowanie T
Problemy współbieżnego dostępu Utrata modyfikacji Lost updates
Odczyt niezatwierdzonej wartości Dirty reads
Odczyt niespójnych danych Non-repeatable reads Inconsistent Analysis id 1 2 3 Saldo 40 50 30 Przelew kwoty 10 z konta id=3 na konto id=1
Rekordy fantomowe Phantoms Reads Zależność wyniku od kolejności wykonania
Problem czytelników i pisarzy Procesy współbieżne Czytelnik 1 Czytelnik 2 Czytelnik n Czytelnia Pisarz 1 Pisarz 2 Pisarz n Dowolna liczba czytelników może czytać dane. Pisarz musi przebywać w czytelni sam. Problem pięciu filozofów Filozof myśli. Gdy zgłodnieje pobiera 2 widelce i posila się.
Blokady Blokowanie jest techniką kontroli współbieżności, Polega na nakładaniu blokad na obiekty, które mają nie ulec zmianie w czasie gdy dana transakcja się nimi nie zajmuje, Efektem nałożenia blokady jest brak możliwości dostępu (a szczególnie modyfikacji) do tego obiektu przez inne transakcje Blokady S (shared), X (exclusive) i inne Transakcja która chce posiadać dostęp do wiersza musi najpierw uzyskać blokadę S na tym wierszu, Transakcja która chce zmodyfikować wiersz musi najpierw uzyskać blokadę X na tym wierszu lub zwiększyć poziom blokady z S na X
Cechy transakcji Tryb dostępu READ ONLY i READ WRITE Poziom izloacji ISOLATION LEVEL READ UNCOMMITTED (najniższy poziom izolacji) READ COMMITTED REPEATABLE READ SNAPSHOT SERIALIZABLE (najwyższy poziom izolacji) Szeregowalność
Protokół ścisłego blokowania dwufazowego (Strict 2PL): Każda transakcja musi uzyskać blokadę S (współdzieloną) na obiekcie zanim odczyta ten obiekt oraz blokadę X (wyłączną) na obiekcie przed zapisaniem go. Jeśli transakcja trzyma blokadę X na obiekcie, żadna inna transakcja nie ma prawa założyć żadnej blokady (ani typu S ani X) na tym obiekcie. Jeśli transakcja trzyma blokadę S na obiekcie, żadna inna transakcja nie ma prawa założyć blokady X na tym obiekcie. Gdy transakcja nie może założyć blokady na obiekcie, może ustawić się w kolejce oczekujących transakcji stowarzyszonej z tym obiektem albo może zostać wycofana. Wszystkie blokady trzymane przez transakcję są zwalniane jednocześnie, w chwili gdy transakcja kończy się (wycofaniem lub zatwierdzeniem). Protokół Strict 2PL nazywa się dwufazowym, ponieważ determinuje dwie fazy działania każdej transakcji związane z blokadami: transakcja zakłada blokady i dokonuje wymaganych odczytów i zapisów na obiektach, na których założyła blokadę; transakcja wykonuje COMMIT/ROLLBACK jednocześnie zwalniając wszystkie blokady. Zakładanie blokad i ich zwalnianie są oddzielonymi w czasie fazami.
Zakleszczeniemnazywamy stan w którym dwie lub więcej transakcji znajduje się w stanie wzajemnego oczekiwania na zwolnienie blokady w celu wykonywania dalszych operacji, System powinien wykrywać i likwidować blokady, co może być realizowane za pomocą grafu oczekiwań (wait-for-graph), Usuwanie zakleszczenia polega na wybraniu jednej z dwóch transakcji zablokowanych i cofnięcie jej, tak aby druga mogła się wykonywać.
Zagłodzenie - transakcja nie może być kontynuowana przez określony czas, a inne transakcje są normalnie wykonywane Taka sytuacja wystąpi gdy nie ma mechanizmu obsługiwania transakcji i jedne mają pierwszeństwo w stosunku do drugich, Rozwiązaniem problemu jest kolejkowanie: obsługa transakcji na zasadzie pierwsza zgłoszona pierwsza obsłużona, Należy także nadawać transakcjom priorytety, zwiększające się w miarę upływu czasu lub w przypadku częstego cofania transakcji, im wyższy priorytet tym szybciej będzie wykonana
DECLARE @zmienna INT T-SQL
CREATE PROCEDURE <Nazwa> ( IN OUT INOUT nazwa_parametru TYP, ) BEGIN END;
IF <warunek> THEN <lista instrukcji> ELSEIF <warunek> THEN <lista instrukcji> ELSE <lista instrukcji> END IF; WHILE <warunek> DO <lista instrukcji> END WHILE; <etykieta>: LOOP <lista instrukcji> LEAVE <etykieta>; END LOOP; REPEAT <lista instrukcji> UNTIL <warunek>;
Procedura składowana (ang. stored procedure) jest nazwanym zbiorem zapytań w języku SQL, który jest przechowywany na serwerze (w SZBD) i jest kompilowany przy pierwszym wykonaniu. Procedury wnoszą do środowiska serwera baz danych przetwarzanie warunkowe i możliwości programistyczne. W SZBD wykonanie dowolnego fragmentu kodu języka SQL wiąże się z pewnym ciągiem procesów - począwszy od sprawdzenia składni aż do kompilacji i wykonania.
1. Kod musi zostać sprawdzony pod względem poprawności składni (kontrola poprawności semantycznej - czyli czy kod nie odwołuje się do nieistniejących obiektów lub używa nieistniejących poleceń oraz kontrola poprawności syntaktycznej - czy użyta składnia jest poprawna). 2. Następnie kod jest rozdzielany na fragmenty (często nazywane znacznikami) interpretowane przez ZSBD. Proces ten nazywamy parsowaniem (ang. parsing). 3. Następnie SZBD standaryzuje wyodrębnione części kodu, tzn. zapisuje je w jednoznacznej postaci (usuwając niepotrzebne znaczniki). 4. Kolejnym etapem jest optymalizacja - każde zapytanie może posiadać wiele przygotowanych tzw. planów wykonania (ang. execution plan). MS SQL Server posiada wewnętrzny proces (Query Optimizer), który wybiera optymalny sposób dostępu do danych - tzn. taki plan wykonania zapytania, w którym serwer będzie skanował (przeszukiwał) najmniejszą ilość stron danych. Na optymalizację szczególny wpływ mają struktura indeksów oraz sposób łączenia tabel. 5. Następuje kompilacja zapytania wg optymalnego planu wykonania i wykonanie skompilowanego zapytania. 6. Wyniki działania zapytania są zwracane do klienta.
Procedury składowane dzięki temu, że są zapisane na serwerze oraz dzięki skompilowanemu planowi wykonania przechowywanemu w cahe'u procedur posiadają dwie zasadnicze zalety: zwiększają wydajność bazy danych, ograniczają ruch w sieci (przesyłane są tylko nazwy procedur i wartości parametrów). zapewniają jedną logikę biznesową dla wszystkich aplikacji klienckich, przesłaniają szczegóły tabel w bazie danych (przezroczystość struktury dla zwykłego użytkownika aplikacji), umożliwiają modyfikację danych bez bezpośredniego dostępu do tabel bazy danych, dostarczają mechanizmów bezpieczeństwa (można nadawać uprawnienia do wykonywania procedur poszczególnym użytkownikom bazy danych).