Bazy danych 1
1 Transakcje
Transakcja bazodanowa [13] jest grupą instrukcji SQL, która wykonuje logiczną jednostkę pracy. Możemy
ją sobie wyobrazić jako nierozłączny zbiór instrukcji SQL, których wyniki powinny być zapisane w bazie
danych w całości (lub zostać w całości wycofane).
ACID [2, 6]:
" niepodzielność (ang. atomicity) wszystkie części transakcji powinny zostać przeprowadzone albo żadna,
" spójność (ang. consistency) przed i po zatwierdzeniu transakcji wszystkie dane w bazie są spójne,
spójność oznacza, że dane nie naruszają ograniczeń nałożonych na bazę danych,
" izolacja (ang. isolation) gdy dwie transakcje są przetwarzane jednocześnie, ich działania nie mogą na
siebie wzajemnie wpływać,
" trwałość (ang. durability) jeśli transakcja się zakończy, to jej wynik nie może zostać utracony z powodu
awarii systemu.
Instrukcje dotyczÄ…ce transakcji [5]:
" SET TRANSACTION jawne nazwanie transakcji,
" COMMIT jawne zatwierdzenie transakcji,
" ROLLBACK jawne wycofanie transakcji,
" SAVEPOINT punkt kontrolny,
" ROLLBACK TO SAVEPOINT wycofanie wszystkich poleceń do punktu kontrolnego,
" LOCK TABLE ręczne blokowanie relacji.
Odroczone ograniczenia integralnościowe [5]:
" ograniczenia atrybutów
NOT DEFERRABLE sprawdzane wszystkich ograniczeń natychmiast po modyfikacji (domyśl-
nie),
DEFERRABLE sprawdzane po zatwierdzaniu transakcji,
" INITIALLY DEFERRED sprawdzane po zatwierdzaniu transakcji,
" INITIALLY IMMEDIATE sprawdzane wszystkich ograniczeń natychmiast po modyfikacji
(tak jak dla zachowania domyślnego),
" SET CONSTRAINTS:
SET CONSTRAINTS nazwa ograniczenia DEFERRED;
SET CONSTRAINTS nazwa ograniczenia IMMEDIATE;
Anomalie współbieżnego dostępu [13]:
" Fantomy (ang. Phantom) ponowne wykonanie tego samego zapytania zwraca nowe wiersze (fantomy),
" Niepowtarzalny odczyt (ang. Non-repeatable read) ponowne odczytanie tego samego wiersza zwraca
nowy wynik,
" Brudny odczyt (ang. Dirty read) odczytanie niezatwierdzonych zmian, które pózniej zostały wycofane.
1
Poziomy izolacji transakcji standard SQL [13]
Fantomy Niepowtarzalny odczyt Brudny odczyt
READ UNCOMMITTED TAK TAK TAK
READ COMMITTED TAK TAK NIE
REPEATABLE READ TAK NIE NIE
SERAILIZABLE NIE NIE NIE
Poziomy izolacji transakcji Oracle [5]:
" SET TRANSACTION ISOLATION LEVEL ustawienie poziomu izolacji transakcji.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
Transakcja rozpoczyna się, gdy miało miejsca jedno ze zdarzeń [13]:
" połączenie z bazą danych i wykonanie instrukcji DML,
" wcześniejsza transakcja kończy się i wprowadzamy kolejną instrukcję DML.
Transakcja kończy się, gdy [13]:
" ZostanÄ… wykonane instrukcje COMMIT (zatwierdzenie) lub ROLLBACK (wycofanie).
" Zostanie wykonana instrukcja DDL, taka jak CREATE TABLE (zatwierdzenie).
" Zostanie wykonana instrukcja DCL, taka jak GRANT (zatwierdzenie).
" Nastąpi rozłączenie z bazą danych (wycofanie lub zatwierdzenie zależnie od sposobu rozłączenia).
" Wykonanie instrukcji DML siÄ™ nie powiedzie w tym przypadku instrukcja ROLLBACK jest wykony-
wana jedynie dla tej konkretnej instrukcji DML.
Program SQL*PLUS
" SHOW AUTOCOMMIT wyświetla ustawienia automatycznego zatwierdzania,
" SET AUTOCOMMIT OFF wyłącza automatyczne zatwierdzanie,
" SET AUTOCOMMIT ON (SET AUTOCOMMIT IMMEDIATE) włącza automatyczne zatwierdzanie
po każdej instrukcji DML SQL: UPDATE, INSERT, DELETE lub bloku PL/SQL,
" SET AUTOCOMMIT n zatwierdza automatycznie po n instrukcjach SQL DML.
Zgłoszenie wyjątku [6] nie kończy transakcji, podobnie jak nie powoduje tego zamknięcie bloku. Jednak
jeśli blok najwyższego poziomu zakończy działanie bez obsłużenia wyjątku, który zostanie przekazany do
środowiska wywołania, transakcja zostanie automatycznie wycofana przez serwer.
Zakleszczenia [1] (ang. deadlocks): Może się zdarzyć, gdy transakcje muszą czekać na blokadę założoną
przez inną transakcję. Zagrożenie jest takie, że bez właściwego planowania może pojawić się cykl oczekiwań
i wówczas żadna transakcja w cyklu nie może się wykonać.
2 Przykładowa treść laboratorium
Na podany temat każda grupa 2 osobowa powinna przygotować następujące skrypty (*.sql):
1. Tworzący widoki (co najmniej 3-5) oraz sekwencje (dla każdego klucza głównego).
2. UsuwajÄ…cy wszystkie widoki oraz sekwencje.
3. UsuwajÄ…cy wszystkie wiersze ze wszystkich tabel.
2
4. Zawierający co najmniej 5-10 poleceń INSERT dla każdej tabeli.
5. Zawierający po jednej instrukcji INSERT naruszającej każdy z typów ograniczeń (np. UNIQUE, NOT
NULL, CHECK, klucza głównego, klucza obcego, itp) dla dowolnej tabeli.
6. ModyfikujÄ…cy dowolnie wybranÄ… tabelÄ™:
" dodajÄ…cy kolumnÄ™ (np. test VARCHAR2(20)),
" dodajÄ…cy ograniczenia do dodanej kolumny (np. NOT NULL),
" usuwajÄ…cy ograniczenia dotyczÄ…ce dodanej kolumny,
" usuwajÄ…cy dodanÄ… kolumnÄ™.
7. ZawierajÄ…cy co najmniej 10 15 zaawansowanych instrukcji SELECT wykorzystujÄ…cych np.:
" MIN, MAX, SUM, AVG, COUNT,
" GROUP BY,
" HAVING,
" ORDER BY,
" UNION, INTERSECT, MINUS,
" EXISTS, IN, ALL, ANY,
" CASE,
" złączenie,
" podzapytania,
" funkcje np. do obsługi dat, testów, liczb, itd.,
" zapytania z parametrem,
" itp.
Instrukcje bardzo proste (np. dotyczące tylko jednej tabeli: SELECT * FROM dual;) nie będą oceniane.
Instrukcje skopiowane z wykładu lub instrukcji laboratoryjnych (ze zmienionymi nazwami tabel np. SELECT
* FROM pracownik WHERE wynagrodzenia > (SELECT AVG(wynagrodzenie) FROM pracownik)) nie będą
oceniane.
Proszę przynieść wszystkie materiały stworzone podczas laboratorium nr 11.
Literatura
[1] Thomas Connolly, Carolyn Begg, Systemy baz danych , Wydawnictwo RM, 2004
[2] Jeffrey D. Ullman, Jennifer Widom, Podstawowy wykad z systemłw baz danych , WNT, 2001
[3] Jeffrey D. Ullman, Jennifer Widom, Systemy baz danych Peny wykad , WNT, 2006
[4] Kevin Loney, Bob Bryla, Oracle Database 10g Podrcznik administratora baz danych , Helion, 2008
[5] Scott Urman, Ron Hardman, Michael McLaughlin, Oracle Database 10g Programowanie w jzyku
PL/SQL , Helion, 2008
[6] Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemłw baz danych , Helion, 2005
[7] Jose A. Ramalho, Oracle 8i , Mikom, 2001
[8] Oracle®Database SQL Language Reference 11g Release 1 (11.1) B28286-02 (b28286.pdf)
[9] Oracle®Database SQL Language Quick Reference 11g Release 1 (11.1) B28285-02 (b28285.pdf)
[10] Joe Celko, SQL Zaawansowane techniki programowania , PWN, 2008
[11] Jason Price, Oracle Database 11g i SQL Programowanie , Helion, 2009
[12] Oracle®Database PL/SQL Language Reference 11g Release 1 (11.1) B28370-02 (B28370.pdf)
[13] Jason Price, Oracle Database 11g i SQL Programowanie, Helion, 2009
[14] Oracle®Database PL/SQL Language Reference 11g Release 1 (11.1) B28370-02 (B28370.pdf)
3
Wyszukiwarka
Podobne podstrony:
BD1BD1bd1BD1BD1BD1BD1bd1bd1BD1BD1bd1więcej podobnych podstron