Praktyczny kurs SQL pksql


Praktyczny kurs SQL
Autor: Danuta Mendrala, Marcin Szeliga
ISBN: 978-83-246-1604-6
Format: 158x235, stron: 304
Wykorzystaj pełnię możliwoSci baz danych
" Na czym polega model relacyjny?
" W jaki sposób pobierać dane z bazy?
" Jak projektować bazy danych i tabele?
Systemy zarządzania bazami danych to aplikacje, które spotkać można praktycznie
w każdej firmie.
Na rynku dostępnych jest wiele takich narzędzi, różniących się od siebie wydajnoScią,
wymaganiami sprzętowymi, potencjalnymi zastosowaniami i  przede wszystkim
 ceną. Użytkownicy mogą wybierać zarówno wSród rozwiązań komercyjnych,
jak i nieustępujących im rozwiązań bezpłatnych. Cechą łączącą wszystkie systemy
zarządzania bazami danych jest język, na którym opiera się praca z nimi  SQL.
To ustandaryzowany zbiór poleceń pozwalających na niemal dowolne manipulacje
danymi zgromadzonymi w bazach, tworzenie nowych baz oraz administrowanie
serwerami baz danych. Bez jego znajomoSci wykorzystanie pełni możliwoSci bazy
danych jest praktycznie niemożliwe.
 Praktyczny kurs SQL to książka, dzięki której poznasz ten język. Czytając ją,
dowiesz się, czym jest relacyjnoSć w bazach danych, jak skonstruowane są takie bazy
i czym są postaci normalne. Nauczysz się pobierać dane w oparciu o różne kryteria,
przetwarzać uzyskane wyniki i wySwietlać je na ekranie w odpowiedni sposób. Poznasz
funkcje pozwalające na modyfikację istniejących i dodawanie nowych danych,
zastosujesz zapytania złożone i podzapytania oraz wykorzystasz mechanizmy
transakcji. Przeczytasz także o projektowaniu baz danych oraz definiowaniu
i nadawaniu uprawnień do korzystania z nich.
" Modele baz danych
" Postaci normalne w modelu relacyjnym
" Historia języka SQL
" Pobieranie danych za pomocą instrukcji SELECT
Wydawnictwo Helion
" Dobór kryteriów wybierania
ul. KoSciuszki 1c
" Przetwarzanie wyników zapytań
44-100 Gliwice
" Zapytania złożone i podzapytania
tel. 032 230 98 63
" Transakcje
e-mail: helion@helion.pl
" Modyfikowanie i dodawanie danych
" Projektowanie baz danych
" Uprawnienia
Poznaj w praktyce język będący podstawą
wszystkich nowoczesnych systemów zarządzania bazami danych
Spis tre ci
Wst p .............................................................................................. 9
Cz I Troch teorii, czyli modele i standardy .......................... 17
Rozdzia 1. Relacyjny model baz danych ........................................................... 19
Tabele jako zbiory danych .............................................................................................. 19
Kolumny maj niepowtarzalne nazwy i zawieraj okre lone typy danych ............... 20
Wiersze powinny by unikalne ................................................................................ 21
Kolejno kolumn jest bez znaczenia ....................................................................... 21
Kolejno wierszy jest bez znaczenia ....................................................................... 22
Bazy danych ................................................................................................................... 22
Trzy modele baz danych: relacyjny, obiektowy i jednorodny ........................................ 23
Model jednorodny .................................................................................................... 23
Model relacyjny ....................................................................................................... 24
Model obiektowy ..................................................................................................... 25
Za o enia relacyjnego modelu baz danych ..................................................................... 27
Postulaty Codda dotycz ce struktury danych ........................................................... 27
Postulaty Codda dotycz ce przetwarzania danych ................................................... 28
Postulaty Codda dotycz ce integralno ci danych ..................................................... 28
Normalizacja ............................................................................................................ 29
Podsumowanie ................................................................................................................ 30
Zadania ........................................................................................................................... 31
Rozdzia 2. Standardy j zyka SQL ..................................................................... 33
Strukturalny j zyk zapyta ............................................................................................. 33
Przetwarzanie zbiorów a przetwarzanie pojedynczych danych ................................ 34
J zyk deklaratywny a j zyk proceduralny ................................................................ 35
J zyk interpretowany a j zyk kompilowany ............................................................. 36
Sk adnia j zyka SQL ................................................................................................ 37
Dialekty j zyka SQL ................................................................................................ 39
Standardy ANSI .............................................................................................................. 40
Historia ..................................................................................................................... 40
SQL3 ........................................................................................................................ 41
Podsumowanie ................................................................................................................ 44
Zadania ........................................................................................................................... 44
4 Praktyczny kurs SQL
Cz II Pobieranie danych, czyli instrukcja SELECT ................... 47
Rozdzia 3. Odczytywanie danych z wybranej tabeli ........................................... 49
Klauzula FROM ............................................................................................................. 49
W pe ni kwalifikowane nazwy obiektów ................................................................. 50
Wybieranie kolumn ........................................................................................................ 51
Eliminowanie duplikatów ............................................................................................... 52
Wyra enia ....................................................................................................................... 53
Operatory arytmetyczne ........................................................................................... 54
czenie danych tekstowych .................................................................................... 55
Funkcje systemowe .................................................................................................. 55
Formatowanie wyników ................................................................................................. 58
Aliasy ....................................................................................................................... 59
Sta e (litera y) ........................................................................................................... 60
Sortowanie wyników ...................................................................................................... 60
Sortowanie danych tekstowych ................................................................................ 63
Podsumowanie ................................................................................................................ 64
Zadania ........................................................................................................................... 65
Rozdzia 4. Wybieranie wierszy ......................................................................... 67
Logika trójwarto ciowa .................................................................................................. 67
Warto NULL ......................................................................................................... 68
Operatory logiczne ................................................................................................... 68
Klauzula WHERE .......................................................................................................... 70
Standardowe operatory porównania ......................................................................... 71
Operatory SQL ......................................................................................................... 72
Z o one warunki logiczne ........................................................................................ 75
Klauzula TOP ................................................................................................................. 78
Wydajne wyszukiwanie danych ...................................................................................... 80
W jaki sposób serwery bazodanowe odczytuj dane? .............................................. 80
W jakiej kolejno ci serwery bazodanowe wykonuj poszczególne
klauzule zapyta ? ................................................................................................... 83
Argumenty SARG .................................................................................................... 84
Podsumowanie ................................................................................................................ 86
Zadania ........................................................................................................................... 87
Rozdzia 5. czenie tabel i wyników zapyta ................................................... 89
Z czenia naturalne i nienaturalne .................................................................................. 89
Klucze obce .............................................................................................................. 90
Aliasy ....................................................................................................................... 93
Z czenia równo ciowe i nierówno ciowe ..................................................................... 94
Z czenia zewn trzne ..................................................................................................... 95
Z czenie lewostronne .............................................................................................. 96
Z czenie prawostronne ............................................................................................ 97
Z czenie obustronne ................................................................................................ 97
Z czenie krzy owe (iloczyn kartezja ski) ..................................................................... 98
Z czenia wielokrotne ..................................................................................................... 99
Okre lanie kolejno ci z cze ................................................................................ 102
Z czenie tabeli z ni sam ........................................................................................... 103
Eliminacja duplikatów ............................................................................................ 105
Klucze obce w obr bie jednej tabeli ....................................................................... 106
czenie wyników zapyta ........................................................................................... 107
Suma ....................................................................................................................... 107
Cz wspólna ........................................................................................................ 110
Ró nica ................................................................................................................... 110
Spis tre ci 5
czenie wierszy i wyników funkcji tabelarycznych ................................................... 111
Operator APPLY .................................................................................................... 112
Podsumowanie .............................................................................................................. 114
Zadania ......................................................................................................................... 114
Rozdzia 6. Grupowanie wierszy ...................................................................... 117
Funkcje grupuj ce ........................................................................................................ 117
Funkcja COUNT() .................................................................................................. 118
Funkcje SUM() i AVG() ........................................................................................ 119
Funkcje MIN() i MAX() ......................................................................................... 120
Inne funkcje grupuj ce ........................................................................................... 121
Wyra enia .............................................................................................................. 121
Klauzula GROUP BY ................................................................................................... 122
Kolejno wykonywania klauzuli GROUP BY ...................................................... 125
Operatory CUBE i ROLLUP .................................................................................. 126
Operator GROUPING SETS .................................................................................. 129
Wydajne grupowanie danych ....................................................................................... 131
Niestandardowa klauzula OVER .................................................................................. 132
Partycje ................................................................................................................... 134
Funkcje rankingu .................................................................................................... 135
Niestandardowe operatory PIVOT i UNPIVOT ........................................................... 137
PIVOT .................................................................................................................... 137
UNPIVOT .............................................................................................................. 139
Klauzula HAVING ....................................................................................................... 140
Podsumowanie .............................................................................................................. 142
Zadania ......................................................................................................................... 143
Rozdzia 7. Podzapytania ............................................................................... 145
Czym s podzapytania? ................................................................................................ 145
Podzapytania jako zmienne .......................................................................................... 146
Podzapytania niepowi zane .................................................................................... 146
Podzapytania powi zane ........................................................................................ 151
Podzapytania jako ród a danych ................................................................................. 157
Tabele pochodne .................................................................................................... 157
CTE ........................................................................................................................ 160
Wyznaczanie trendów ............................................................................................ 165
Operatory ...................................................................................................................... 169
Operator EXISTS ................................................................................................... 170
Operator ANY lub SOME ...................................................................................... 173
Operator ALL ......................................................................................................... 176
Podsumowanie .............................................................................................................. 178
Zadania ......................................................................................................................... 179
Cz III Modyfikowanie danych, czyli instrukcje INSERT,
UPDATE, DELETE oraz MERGE .................................... 181
Rozdzia 8. Modyfikowanie danych ................................................................. 183
Wstawianie danych ....................................................................................................... 183
Klucze podstawowe ................................................................................................ 184
Warto ci domy lne ................................................................................................. 185
Warto NULL ....................................................................................................... 185
Konstruktor wierszy ............................................................................................... 186
Wstawianie wyników zapyta ................................................................................ 186
6 Praktyczny kurs SQL
Usuwanie danych .......................................................................................................... 188
Instrukcja DELETE ................................................................................................ 189
Instrukcja TRUNCATE TABLE ............................................................................ 191
Aktualizowanie danych ................................................................................................ 191
Jednoczesne aktualizowanie wielu kolumn ............................................................ 192
Wyra enia .............................................................................................................. 192
Aktualizowanie danych wybranych na podstawie danych z innych tabel .............. 193
Aktualizowanie danych za pomoc wyra e odwo uj cych si do innych tabel .... 193
Instrukcja MERGE ....................................................................................................... 194
Podsumowanie .............................................................................................................. 196
Zadania ......................................................................................................................... 196
Rozdzia 9. Transakcje i wspó bie no .......................................................... 197
W a ciwo ci transakcji ................................................................................................. 197
Transakcyjne przetwarzanie danych ............................................................................. 199
Tryb jawnego zatwierdzania transakcji .................................................................. 200
Rozpoczynanie transakcji ....................................................................................... 201
Wycofywanie transakcji ......................................................................................... 202
Zatwierdzanie transakcji ......................................................................................... 203
Zagnie d anie transakcji ........................................................................................ 203
Punkty przywracania .............................................................................................. 204
Wspó bie no .............................................................................................................. 205
Blokady .................................................................................................................. 205
Zakleszczenia ......................................................................................................... 206
Poziomy izolowania transakcji ............................................................................... 207
Model optymistyczny ............................................................................................. 211
Model pesymistyczny ............................................................................................. 212
Podsumowanie .............................................................................................................. 213
Zadania ......................................................................................................................... 213
Cz IV Tworzenie baz danych, czyli instrukcje CREATE,
ALTER i DROP ............................................................ 215
Rozdzia 10. Bazy danych i tabele .................................................................... 217
Tworzenie i usuwanie baz danych ................................................................................ 217
Tworzenie i usuwanie tabel .......................................................................................... 220
Schematy ................................................................................................................ 221
Zmiana struktury tabeli ................................................................................................. 221
Ograniczenia ................................................................................................................. 222
NOT NULL ............................................................................................................ 222
Klucz podstawowy ................................................................................................. 223
Niepowtarzalno ................................................................................................... 224
Warto domy lna .................................................................................................. 225
Warunek logiczny .................................................................................................. 225
Klucz obcy ............................................................................................................. 226
Ograniczenia a wydajno instrukcji modyfikuj cych i odczytuj cych dane ......... 229
Podsumowanie .............................................................................................................. 231
Zadania ......................................................................................................................... 231
Rozdzia 11. Widoki i indeksy ........................................................................... 233
Widoki .......................................................................................................................... 233
Tworzenie i usuwanie widoków ............................................................................. 234
Modyfikowanie widoków ....................................................................................... 236
Korzystanie z widoków .......................................................................................... 236
Zalety widoków ...................................................................................................... 241
Spis tre ci 7
Indeksy ......................................................................................................................... 241
Tworzenie, modyfikowanie i usuwanie indeksów .................................................. 243
Porz dkowanie indeksów ....................................................................................... 245
Podsumowanie .............................................................................................................. 246
Zadania ......................................................................................................................... 247
Cz V Uprawnienia u ytkowników, czyli instrukcje
GRANT i REVOKE ....................................................... 249
Rozdzia 12. Nadawanie i odbieranie uprawnie ................................................ 251
Konta u ytkowników .................................................................................................... 251
Zak adanie i usuwanie kont u ytkowników ............................................................ 252
Role .............................................................................................................................. 253
Tworzenie i usuwanie ról ....................................................................................... 253
Przypisywanie ról do u ytkowników ..................................................................... 254
Specjalna rola Public .............................................................................................. 254
Uprawnienia ................................................................................................................. 254
Nadawanie i odbieranie uprawnie ........................................................................ 255
Dziedziczenie uprawnie ....................................................................................... 256
Przekazywanie uprawnie ...................................................................................... 258
Zasada minimalnych uprawnie ............................................................................. 259
Podsumowanie .............................................................................................................. 259
Zadania ......................................................................................................................... 260
Dodatki ..................................................................................... 261
Dodatek A Rozwi zania zada ....................................................................... 263
Skorowidz .................................................................................... 295
Rozdzia 9.
Transakcje
i wspó bie no
Czym s transakcje?
Co oznacza skrót ACID?
Jakie s zalety transakcyjnego przetwarzania danych?
Na czym polega ró nica pomi dzy transakcjami zagnie d onymi
a zagnie d aniem transakcji?
Co oznacza termin  wspó bie no  ?
Po co serwery bazodanowe zak adaj blokady?
Kiedy dochodzi do zakleszcze ?
Czy warto zmienia domy lny poziom izolowania transakcji?
W jakich sytuacjach optymistyczny model wspó bie no ci jest lepszy
ni pesymistyczny?
W a ciwo ci transakcji
Transakcje gwarantuj spójno modyfikowanych informacji. Typowym przyk a-
dem transakcyjnego przetwarzania danych jest przeniesienie pieni dzy z jednego konta
na drugie. Taka operacja przebiega w dwóch etapach:
1. zmniejszenie o pewn sum stanu konta X,
2. dodanie tej sumy do stanu konta Y.
198 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

Gdyby po wykonaniu pierwszej operacji wyst pi b d uniemo liwiaj cy wykonanie
drugiej, z systemu znikn aby pewna suma pieni dzy. Równie nieprzyjemnym zasko-
czeniem dla w a ciciela by oby sprawdzenie przez niego stanu obu jego kont ju po
odj ciu danej sumy z pierwszego konta, ale przed jej dodaniem do drugiego konta.
eby temu zapobiec, transakcje musz by :
1. Niepodzielne (ang. Atomicity). Niepodzielno oznacza, e zatwierdzane s
wszystkie wchodz ce w sk ad transakcji instrukcje albo nie jest zatwierdzana
adna z nich. Innymi s owy, wszystkie wchodz ce w sk ad transakcji instrukcje
musz by wykonane poprawnie  je eli cho jedna z nich zg osi b d,
wszystkie przeprowadzone w ramach transakcji zmiany zostan wycofane.
2. Spójne (ang. Consistency). Ta cecha transakcji gwarantuje, e ich wykonanie
nie doprowadzi, nawet w przypadku awarii serwera, do utraty spójno ci danych.
Poniewa wszystkie zmiany danych wykonywane s w ramach transakcji,
przechowywane w bazach informacje zawsze b d spójne1.
3. Izolowane (ang. Isolation). Izolowanie transakcji wymaga albo zablokowania
modyfikowanych w ramach jednej z nich danych, albo utworzenia ich dodatkowej
wersji. W zale no ci od obowi zuj cego w ramach serwera lub sesji klienckiej
poziomu izolowania transakcji, mo e doj do nast puj cych sytuacji:
a) Utrata aktualizacji (ang. lost update) ma miejsce, gdy dwa procesy
modyfikuj jednocze nie te same dane. Przyk adowo jeden u ytkownik
zmienia cen towaru na 100 z , a drugi  na 200. W takim przypadku
jedna ze zmian zostanie utracona (zast piona drug modyfikacj ).
Domy lnie skonfigurowane serwery bazodanowe nie dopuszczaj
do utraty aktualizacji.
b) Brudne odczyty (ang. dirty read)  do takiej sytuacji dochodzi, gdy mo liwe
jest odczytanie zmian niezatwierdzonych jeszcze przez inny proces.
Je eli proces odczytuj cy nie za da za o enia blokady na odczytywanych
danych, uzyska do nich dost p nawet wtedy, kiedy w a nie b d
modyfikowane. Gdyby proces modyfikuj cy wycofa wprowadzone zmiany,
odczytane dane okaza yby si niespójne. Domy lnie skonfigurowane
serwery bazodanowe nie dopuszczaj brudnych odczytów.
c) Niepowtarzalne odczyty (ang. non-repeatable reads) maj miejsce, gdy
powtórzenie w ramach transakcji tego samego odczytu daje inny wynik.
Ró nice w wynikach s spowodowane tym, e natychmiast po zako czeniu
odczytu (a nie po zako czeniu ca ej transakcji) proces odczytuj cy zdejmuje
blokady za o one na odczytywane dane. Niezablokowane dane mog by
zmienione przez inny proces, a wi c ich powtórne odczytanie da inny
(niespójny) wynik. Domy lnie skonfigurowane serwery bazodanowe
dopuszczaj niepowtarzalne odczyty.
1
Przynajmniej w teorii. W praktyce bazy danych ulegaj uszkodzeniu, cho bardzo rzadko z winy
serwerów bazodanowych.
Rozdzia 9. Transakcje i wspó bie no 199

d) Odczyty widma (ang. phantom reads)  sytuacja taka ma miejsce, je eli
pomi dzy dwoma wykonanymi w ramach transakcji odczytami zmieni si
liczba odczytywanych wierszy. Je eli np. podczas pierwszego odczytu
w tabeli Produkty znajdowa o si 100 produktów o cenach ni szych ni 10 z ,
instrukcja SELECT * FROM Produkty WHERE Cena <10 zwróci aby 100 wierszy.
W trakcie trwania transakcji mo liwa jest jednak zmiana pozosta ych
wierszy tabeli, w tym obni enie ceny jakiego produktu poni ej 10 z .
Mo liwe jest równie wstawienie do tej tabeli nowego produktu o cenie
np. 7 z . Z tego powodu drugie wykonanie tego samego zapytania zwróci oby
ju 102 wiersze. Domy lnie skonfigurowane serwery bazodanowe
dopuszczaj odczyty widma.
4. Trwa e (ang. Durability). Trwa o transakcji gwarantuje, e efekty
zatwierdzonych transakcji b d zapisane w bazie, nawet w przypadku awarii
serwera SQL 2005. Do przywrócenia spójno ci danych serwery bazodanowe
z regu y u ywaj jakiej formy dziennika transakcyjnego.
Pierwsze litery cech transakcji (A  Atomicity, C  Consistency, I  Isolation,
D  Durability) tworz skrót ACID, powszechnie u ywany do opisywania regu
przetwarzania danych, których musz przestrzega serwery bazodanowe, eby mog y
zosta nazwane transakcyjnymi lub relacyjnymi.
Transakcyjne przetwarzanie danych
Serwery bazodanowe mog dzia a w trybie niejawnego zatwierdzania transakcji (w ser-
werze SQL 2008 taki tryb jest trybem domy lnym). Oznacza to, e u ytkownicy nie
musz samodzielnie rozpoczyna transakcji, bo serwer robi to za nich.
W trybie niejawnego zatwierdzania transakcji wykonanie ka dej instrukcji j zyka SQL
sk ada si z trzech etapów:
1. Serwer bazodanowy automatycznie rozpoczyna now transakcj .
2. Wykonywana jest pojedyncza instrukcja SQL.
3. Je eli instrukcja zosta a wykonana z powodzeniem, transakcja jest zatwierdzana,
w przeciwnym przypadku jest wycofywana.
Taki sposób dzia ania oznacza, e u ytkownicy nie mog samodzielnie zatwierdza
lub wycofywa automatycznie rozpocz tych transakcji. Dlatego nazywa si on trybem
niejawnego zatwierdzania transakcji.
Poni szy przyk ad ilustruje dzia anie trybu niejawnego zatwierdzania transakcji za po-
moc funkcji systemowej @@TRANCOUNT zwracaj cej liczb otwartych, aktywnych w danym
momencie transakcji:
200 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

SELECT @@TRANCOUNT;
UPDATE Production.Product
SET Color='Red'
WHERE ProductID=1;
SELECT @@TRANCOUNT;
------------------------------------------------------------
0
0
Przed rozpocz ciem i po zako czeniu wykonywania instrukcji UPDATE nie by o adnych
otwartych transakcji.
Tryb jawnego zatwierdzania transakcji
W niektórych serwerach bazodanowych (np. w serwerze Oracle) domy lnym trybem
transakcyjnego przetwarzania danych jest tryb ich jawnego zatwierdzania. W tym trybie
wykonanie ka dej instrukcji j zyka SQL przebiega nast puj co:
1. Serwer bazodanowy automatycznie rozpoczyna now transakcj .
2. Wykonywana jest pojedyncza instrukcja SQL.
3. U ytkownik samodzielnie musi zatwierdzi lub wycofa otwart przez serwer
transakcj .
Dzia anie tego trybu mo na zasymulowa w serwerze SQL 2008, ustawiaj c opcj sesji
IMPLICIT_TRANSACTIONS:
SET IMPLICIT_TRANSACTIONS ON;
SELECT @@TRANCOUNT;
UPDATE Production.Product
SET Color='Red'
WHERE ProductID=1;
SELECT @@TRANCOUNT;
------------------------------------------------------------
0
1
Tym razem przed rozpocz ciem instrukcji UPDATE równie nie by o otwartych trans-
akcji, ale niejawnie rozpocz ta transakcja nie zosta a po jej wykonaniu automatycznie
zamkni ta. Musi to zrobi sam u ytkownik  albo zatwierdzaj c wprowadzone zmiany,
albo je wycofuj c.
Przed przej ciem do dalszych wicze zako cz transakcj i wy cz omawiany tryb:
COMMIT TRAN;
SET IMPLICIT_TRANSACTIONS OFF;
Tryb jawnego zatwierdzania transakcji pozwala wycofywa przypadkowe lub b dne
modyfikacje, ale zatwierdzanie transakcji, której samemu si nie rozpocz o, jest
ma o intuicyjne.
Rozdzia 9. Transakcje i wspó bie no 201

Rozpoczynanie transakcji
Mechanizm transakcyjnego przetwarzania danych poka emy, jawnie rozpoczynaj c
i ko cz c transakcje. Pozwoli nam to wykona w ramach poszczególnych transakcji
dowoln liczb instrukcji oraz samodzielnie sterowa czasem rozpocz cia i zako czenia
poszczególnych transakcji.
eby rozpocz transakcj , nale y wykona instrukcj BEGIN TRAN2:
BEGIN TRAN;
SELECT @@TRANCOUNT;
------------------------------------------------------------
1
Je eli teraz w ramach tej samej sesji (czyli w tym samym oknie edytora SQL) zaktu-
alizujemy ceny wybranych towarów i sprawdzimy liczb aktywnych transakcji, dowie-
my si , e rozpocz ta przez nas transakcja nadal jest otwarta:
UPDATE Production.Product
SET ListPrice=1
WHERE ProductSubcategoryID=1;
SELECT @@TRANCOUNT;
------------------------------------------------------------
1
Dopóki transakcja, w ramach której przeprowadzili my dowolne zmiany, jest otwarta,
mo emy je albo wycofa , albo zatwierdzi . Poniewa serwer bazodanowy nie jest w sta-
nie przewidzie naszej decyzji, a jedn z cech transakcji jest jej odizolowanie, próba
odczytania danych z tabeli Production.Product w ramach tej samej sesji sko czy si
zupe nie inaczej ni ta sama próba wykonana przez innego u ytkownika.
eby si o tym przekona :
1. W tym samym oknie kodu SQL wykonaj zapytanie:
SELECT Name,ListPrice,ProductSubcategoryID
FROM Production.Product
WHERE ProductSubcategoryID<3
ORDER BY ProductSubcategoryID;
------------------------------------------------------------
Mountain-100 Silver, 38 1,0000 1
Mountain-100 Silver, 42 1,0000 1
Mountain-100 Silver, 44 1,0000 1
Mountain-100 Silver, 48 1,0000 1
&
2. Zosta o ono natychmiast wykonane, a cena ka dego produktu z podkategorii
1 wynosi 1.
3. eby wykona to samo zapytanie jako inny u ytkownik, otwórz nowe okno
edytora SQL3 i skopiuj do niego powy sz instrukcj SELECT (rysunek 9.1).
2
W niektórych serwerach bazodanowych transakcje rozpoczyna si instrukcjami BEGIN TRANSACTION
lub BEGIN WORK.
3
Mo na to zrobi , naciskaj c kombinacj klawiszy Ctrl+N lub klikaj c przycisk New Query.
202 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

Rysunek 9.1. Zapytanie wykonuje si ju prawie dwie minuty, ale wci nie zwróci o adnych danych
Transakcyjne przetwarzanie danych polega na takim realizowaniu da klientów
przez serwery bazodanowe, eby ka dy z nich mia wra enie, e jest jedynym u yt-
kownikiem serwera. Wymaga to opisanego w dalszej cz ci rozdzia u blokowania
obiektów, do których w danym momencie odwo uj si inni u ytkownicy serwera.
Wycofywanie transakcji
Wycofanie transakcji oznacza przywrócenie danych do stanu sprzed jej rozpo-
cz cia i zdj cie wszystkich za o onych na potrzeby transakcji blokad. Je eli wrócimy
do pierwszego okna edytora SQL (tego, w którym zapytanie zwróci o wyniki) i wyko-
namy w nim instrukcj ROLLBACK TRAN4, a nast pnie prze czymy si do drugiego okna
edytora SQL, przekonamy si , e zapytanie wreszcie zosta o wykonane i w dodatku
ceny produktów z pierwszej podkategorii wcale nie wynosz 1. Spowodowane jest to
wycofaniem transakcji, w ramach której ceny by y zmienione, i zdj ciem za o onych
na jej potrzeby blokad:
4
W niektórych serwerach bazodanowych transakcje wycofuje si instrukcjami ROLLBACK TRANSACTION
lub ROLLBACK WORK.
Rozdzia 9. Transakcje i wspó bie no 203

SELECT Name,ListPrice,ProductSubcategoryID
FROM Production.Product
WHERE ProductSubcategoryID<3
ORDER BY ProductSubcategoryID;
------------------------------------------------------------
Mountain-100 Silver, 38 3399,9900 1
Mountain-100 Silver, 42 3399,9900 1
Mountain-100 Silver, 44 3399,9900 1
Mountain-100 Silver, 48 3399,9900 1
Mountain-100 Black, 38 3374,9900 1
Zatwierdzanie transakcji
Zatwierdzenie transakcji oznacza utrwalenie wprowadzonych w jej trakcie zmian
i zdj cie wszystkich za o onych na potrzeby transakcji blokad. Wspomniany na
pocz tku rozdzia u przyk ad przelania pieni dzy z jednego konta na drugie móg by
by zaimplementowany w poni szy sposób:
BEGIN TRAN;
EXEC uspDodajDoKonta '123-456-78-90', 500;
EXEC uspOdejmijOdKonta '231-645-87-09', 500;
IF @@ERROR=0
COMMIT TRAN;
ELSE
ROLLBACK TRAN;
Po jawnym rozpocz ciu transakcji nast puje wywo anie dwóch (nieistniej cych w bazie
AdventureWorks) procedur. Je eli adna z nich nie zg osi b du, ca a transakcja b dzie
zatwierdzona (zatwierdzi transakcj mo emy, wykonuj c instrukcj COMMIT TRAN5),
w przeciwnym przypadku zostanie ona wycofana.
Zagnie d anie transakcji
Wi kszo serwerów bazodanowych pozwala zagnie d a transakcje, czyli wykona
instrukcj BEGIN TRAN w ramach wcze niej rozpocz tej transakcji. Wynikiem takiej ope-
racji jest zwi kszenie licznika otwartych transakcji, a nie rozpocz cie nowej (atomowej,
niepodzielnej, trwa ej i spójnej) transakcji.
Dzia anie mechanizmu zagnie d ania transakcji ilustruje poni szy przyk ad: wykona-
nie instrukcji BEGIN TRAN powoduje zwi kszenie o jeden licznika otwartych transakcji,
wykonie instrukcji COMMIT TRAN zmniejsza warto tego licznika o jeden, ale wykonanie
instrukcji ROLLBACK zamyka transakcje i zeruje licznik otwartych transakcji:
5
W niektórych serwerach bazodanowych transakcje zatwierdza si instrukcjami COMMIT TRANSACTION
lub COMMIT WORK.
204 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

BEGIN TRAN;
SELECT @@TRANCOUNT;
BEGIN TRAN;
SELECT @@TRANCOUNT;
BEGIN TRAN;
SELECT @@TRANCOUNT;
COMMIT TRAN;
SELECT @@TRANCOUNT;
ROLLBACK TRAN;
SELECT @@TRANCOUNT;
------------------------------------------------------------
1
2
3
2
0
Punkty przywracania
Wi kszo serwerów bazodanowych pozwala wycofa nie tylko ca transakcj , ale
te jej cz . W tym celu nale y w trakcie transakcji wykona instrukcj SAVE TRAN6,
a nast pnie przywróci j do danego punktu:
BEGIN TRAN;
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES ('TEST1', 'G1');
SAVE TRAN PP1;
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES ('TEST2', 'G1');
SELECT @@TRANCOUNT;
ROLLBACK TRAN PP1;
SELECT @@TRANCOUNT;
------------------------------------------------------------
1
1
Poniewa przywrócenie stanu transakcji do okre lonego punktu nie powoduje jej za-
ko czenia (liczba otwartych transakcji nadal wynosi 1), musimy j zatwierdzi lub
wycofa :
COMMIT TRAN;
SELECT *
FROM HumanResources.Department
WHERE Name LIKE 'TEST_';
------------------------------------------------------------
26 TEST1 G1 2008-01-27 10:02:34.690
Poniewa druga instrukcja INSERT zosta a wykonana po zdefiniowaniu punktu przy-
wracania PP1, instrukcja ROLLBACK TRAN PP1 przywróci a stan danych do momentu sprzed
jej wykonania, i w rezultacie tyko pierwszy wiersz zosta na trwa e wstawiony do tabeli.
6
W niektórych serwerach bazodanowych punkty przywracania tworzy si instrukcjami SAVE TRANSACTION
lub SAVE WORK.
Rozdzia 9. Transakcje i wspó bie no 205

Wspó bie no
Wspó bie no to zdolno systemu do jednoczesnego realizowania wielu operacji,
z regu y uzyskiwana poprzez uruchomienie osobnych procesów (robotników) na po-
trzeby obs ugi poszczególnych da .
Wspó bie no ma ogromny wp yw na skalowalno serwerów bazodanowych, czyli
ich zdolno do coraz szybszego wykonywania transakcji dzi ki rozbudowywaniu
komputerów, na przyk ad zwi kszaniu ich mocy obliczeniowej czy przepustowo ci
dysków twardych.
eby ka dy z kilkuset czy nawet kilku tysi cy jednoczesnych u ytkowników serwera
bazodanowego móg pracowa tak, jakby by jego jedynym u ytkownikiem, konieczne
jest odizolowanie od siebie poszczególnych transakcji. Umo liwiaj to automatycznie
zak adane blokady.
Blokady
Pomijaj c analizy wewn trznych mechanizmów dzia ania ró nych serwerów bazoda-
nowych, blokady mo na podzieli ze wzgl du na ich tryb (sposób blokowania) i zakres
(typ blokowanych zasobów).
Tryby blokad
Tryb blokady decyduje o tym, czy mo liwe b dzie jej za o enie na zasobie wcze niej
zablokowanym przez inny proces:
1. Blokady wspó dzielone S (ang. Shared) s domy lnie zak adane na odczytywanych
obiektach, takich jak tabele czy wiersze. Na obiekt zablokowany w trybie S
inne procesy te mog za o y blokad S, czyli odczytuj cy nie blokuj
innych odczytuj cych. Blokady S domy lnie zak adane s tylko na czas
wykonywania zapytania, a nie ca ej transakcji.
2. Blokady wy czne X (ang. eXclusive) s zak adane na modyfikowanych
obiektach. Blokady X s niekompatybilne z innymi blokadami, czyli modyfikuj cy
blokuj innych u ytkowników. W przeciwie stwie do blokad wspó dzielonych,
blokady wy czne domy lnie utrzymywane s do zako czenia ca ej transakcji,
a nie pojedynczej operacji.
Zakresy blokad
Blokady mog by zak adane na poziomie poszczególnych wierszy, kluczy indeksów,
stron, zakresów lub ca ych tabel. Te obiekty tworz naturaln hierarchi : tabela sk ada
si z wielu stron, na ka dej stronie zapisanych jest wiele wierszy itd. Z tego powodu
serwery bazodanowe musz analizowa wszystkie istniej ce blokady, zanim za o now
 je eli cho jeden wiersz tabeli jest zablokowany w trybie X, nie mo na na ca ej tabeli
za o y innej blokady.
206 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

Im wi ksze obiekty s blokowane, tym mniejsza wspó bie no (bo u ytkownicy
musz d u ej czeka na dost p do zablokowanych zasobów), ale równie tym mniej-
sza liczba blokad, którymi musi zarz dza serwer bazodanowy (za o y jedn blokad
na ca ej tabeli zamiast miliona blokad na poszczególnych wierszach).
Zakleszczenia
Zakleszczenie (ang. DeadLock) ma miejsce, gdy ró ne procesy blokuj si nawzajem
w taki sposób, e aden z nich nie jest w stanie za o y wymaganych do uko czenia
ju rozpocz tych operacji blokad.
Najcz ciej wyst puj dwa typy zakleszcze :
1. Zakleszczenia cykliczne, wynikaj ce z tego, e dwa procesy w ró nych
kolejno ciach próbuj uzyska dost p do tych samych zasobów.
2. Zakleszczenia konwersji blokad, zwi zane ze zmian wcze niej za o onej
blokady wspó dzielonej (wiele procesów mo e jednocze nie zablokowa ten
sam zasób w trybie S) na blokad wy czn (tylko jeden proces mo e za o y
na tym samym obiekcie blokad X).
Serwery bazodanowe automatycznie wykrywaj zakleszczenia i przerywaj dzia anie
jednego procesu. Na ofiar zakleszczenia wybierany jest proces o ni szym prioryte-
cie, a je eli oba procesy maj ten sam priorytet, ofiar zakleszczenia zostaje ten, którego
wycofanie jest mniej kosztowne.
Mechanizm wykrywania i usuwania zakleszcze pokazuje poni szy przyk ad:
Pierwszy u ytkownik w ramach jawnie rozpocz tej transakcji modyfikuje kilka danych
w tabeli HumanResources.Department:
BEGIN TRAN;
UPDATE HumanResources.Department
SET Name = UPPER(Name)
WHERE DepartmentID>5;
------------------------------------------------------------
(18 row(s) affected)
Nast pnie inny u ytkownik w ramach jawnie rozpocz tej przez siebie transakcji mo-
dyfikuje znacznie wi cej danych w tabeli Production.Product7:
BEGIN TRAN;
UPDATE Production.Product
SET Name = UPPER(Name)
WHERE ProductID >300;
------------------------------------------------------------
(500 row(s) affected)
7
Zasymulowa jednoczesn prac dwóch u ytkowników mo emy, otwieraj c nowe okno edytora SQL
 ka de z okien nawi zuje w asn sesj z baz danych.
Rozdzia 9. Transakcje i wspó bie no 207

Nast pnie pierwszy u ytkownik próbuje odczyta zawarto tabeli zablokowanej ju
przez 2. sesj (okno wyników mo e pokaza pierwszych kilkadziesi t wierszy, ale i tak
u ytkownik b dzie musia czeka na mo liwo zablokowania w trybie S pozosta ych
wierszy tabeli Production.Product):
SELECT *
FROM Production.Product;
W tym momencie nie wyst pi o jeszcze zakleszczenie  wystarczy oby, eby drugi
u ytkownik zako czy swoj transakcj . Ale je eli w ramach 2. sesji u ytkownik spró-
buje odczyta zawarto tabeli zmodyfikowanej przez pierwszego u ytkownika, oba
procesy si zakleszcz :
SELECT *
FROM HumanResources.Department;
------------------------------------------------------------
1 Engineering Research and Development 1998-06-01 00:00:00.000
2 Tool Design Research and Development 1998-06-01 00:00:00.000
3 Sales Sales and Marketing 1998-06-01 00:00:00.000
&
Po chwili drugie zapytanie zosta o jednak wykonane, co wi cej, nazwy departamentów
nie zosta y przekonwertowane na du e litery. eby przekona si , dlaczego tak si
sta o, wystarczy prze czy si do okienka 1. sesji. Znajdziemy w nim poni szy ko-
munikat b du:
Msg 1205, Level 13, State 51, Line 2
Transaction (Process ID 57) was deadlocked on lock resources with another process
and has been chosen as the deadlock victim. Rerun the transaction.
Je eli sprawdzimy liczb otwartych w ramach 1. sesji transakcji, oka e si , e jawnie
rozpocz ta przez pierwszego u ytkownika transakcja zosta a  zgodnie z komunikatem
b du  wycofana:
SELECT @@TRANCOUNT;
------------------------------------------------------------
0
Poniewa wycofanie transakcji wi e si ze zdj ciem za o onych na jej potrzeby blokad,
druga sesja mog a z powodzeniem zako czy operacje i odczyta tabel HumanResources.
Department. Liczba transakcji otwartych w ramach 2. sesji nadal wynosi 1  eby
zako czy wiczenie i wycofa zmiany, nale y wykona w tym oknie edytora SQL
instrukcj ROLLBACK TRAN.
Poziomy izolowania transakcji
Mo emy wp ywa na sposób zak adania blokad przez serwery bazodanowe, zmieniaj c
poziom izolowania transakcji. Wi kszo serwerów pozwala ustawi (na poziomie
serwera, bazy danych lub poszczególnych sesji) jeden z czterech poziomów izolo-
wania transakcji, przedstawionych przez nas od najmniej restrykcyjnego, w którym
208 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

maksymalna wspó bie no okupiona jest wyst powaniem najwi kszej liczby typów nie-
spójno ci danych, do najbardziej restrykcyjnego, który kosztem ograniczenia wspó bie -
no ci gwarantuje najwy szy poziom spójno ci danych.
Read Uncommitted
W trybie niezatwierdzonego odczytu (ang. Read Uncommitted) odczyt danych nie po-
woduje za o enia blokady wspó dzielonej. Na tym poziomie wyst puj brudne od-
czyty, niepowtarzalne odczyty i odczyty widma (jedynym niekorzystnym zjawi-
skiem niewyst puj cym na tym poziomie jest utrata aktualizacji).
eby si o tym przekona :
1. W jednej sesji (oknie edytora SQL) rozpoczniemy transakcj i zaktualizujemy
nazw dzia u:
BEGIN TRAN;
UPDATE HumanResources.Department
SET Name = 'ZmianaWToku'
WHERE DepartmentID=5;
------------------------------------------------------------
(1 row(s) affected)
2. W drugiej sesji zmienimy poziom izolowania transakcji na Read Uncommitted
i spróbujemy odczyta modyfikowane przez innego u ytkownika dane:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT Name
FROM HumanResources.Department
WHERE DepartmentID = 5;
------------------------------------------------------------
ZmianaWToku
Uda o nam si odczyta dane, pomimo e osoba, która je zmienia a, nie zatwierdzi a
jeszcze transakcji, a wi c w ka dej chwili mo e j wycofa . W tym trybie (cz sto
wymuszanym na poziomie poszczególnych instrukcji za pomoc specyficznych dla
danego serwera bazodanowego dyrektyw optymalizatora) mo na odczytywa dane,
o których wiemy, e nie b d w tym samym czasie modyfikowane.
Ko cz c wiczenie, zamknij bez zatwierdzania otwartej transakcji i na nowo otwórz
oba okna edytora SQL  w ten sposób kolejne wiczenie rozpoczniemy, pracuj c
w domy lnym trybie izolowania transakcji.
Read Committed
Tryb odczytu zatwierdzonego (ang. Read Committed) jest domy lnym poziomem
izolowania transakcji. Na tym poziomie odczyt danych wymaga za o enia na nich
blokady wspó dzielonej. Poniewa zak adana na czas zmiany blokada X jest niekom-
patybilna z innymi blokadami, w tym z blokad S, eliminuje to brudne odczyty. Jednak
na tym poziomie nadal wyst puj niepowtarzalne odczyty i odczyty widma.
Rozdzia 9. Transakcje i wspó bie no 209

Zjawisko niepowtarzalnego odczytu pokazuje poni szy przyk ad:
1. W pierwszym oknie edytora SQL ustawiamy tryb odczytów zatwierdzonych8,
jawnie rozpoczynamy transakcj i odczytujemy nazw wybranego departamentu:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRAN;
SELECT Name
FROM HumanResources.Department
WHERE DepartmentID = 5;
------------------------------------------------------------
Purchasing
2. W tym momencie transakcja jest nadal otwarta, a my w drugim oknie
edytora SQL zmienimy nazw tego departamentu:
UPDATE HumanResources.Department
SET Name = 'OdczytWToku'
WHERE DepartmentID=5;
------------------------------------------------------------
(1 row(s) affected)
3. Je eli pierwszy u ytkownik w ramach tej samej transakcji ponownie odczyta
nazw departamentu, uzyska inny wynik:
SELECT Name
FROM HumanResources.Department
WHERE DepartmentID = 5;
COMMIT TRAN;
------------------------------------------------------------
OdczytWToku
Repeatable Read
W trybie powtarzalnego odczytu (ang. Repeatable Read) blokady wspó dzielone S
utrzymywane s do czasu zako czenia ca ej transakcji. Dzi ki temu inny proces nie
mo e zmodyfikowa odczytywanych w jej ramach danych, co eliminuje niepowtarzalne
odczyty. Na tym poziomie wyst puj tylko odczyty widma.
Zjawisko odczytu widma pokazuje poni szy przyk ad:
1. W ramach pierwszej sesji zmienimy poziom izolowania transakcji na Repeatable
Read i w ramach jawnie rozpocz tej transakcji odczytamy nazwy towarów
o cenach pomi dzy 10 a 15 dolarów:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRAN;
SELECT Name
FROM Production.Product
WHERE ListPrice BETWEEN 10 AND 15;
------------------------------------------------------------
Taillights - Battery-Powered
8
Poniewa ten tryb jest trybem domy lnym, instrukcja SET dodana jest tylko w celach demonstracyjnych.
210 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

2. Podczas gdy pierwsza transakcja jest wci otwarta, w drugim oknie
edytora SQL zmienimy cen jednego towaru na 12 dolarów:
UPDATE Production.Product
SET ListPrice = 12
WHERE ProductID =2;
------------------------------------------------------------
(1 row(s) affected)
3. Je eli pierwszy u ytkownik raz jeszcze wykona, w ramach tej samej transakcji,
to samo zapytanie, tym razem jego wynik b dzie liczy dwa wiersze
 pojawi si w nim wiersz widmo:
SELECT Name
FROM Production.Product
WHERE ListPrice BETWEEN 10 AND 15;
------------------------------------------------------------
Bearing Ball
Taillights - Battery-Powered
4. Je eli jednak w ramach drugiej sesji spróbujemy zmieni dane odczytywane
w ramach nadal otwartej pierwszej transakcji (czyli doprowadzi
do niepowtarzalnego odczytu), instrukcja b dzie oczekiwa , a pierwsza
transakcja zostanie zako czona, a za o one dla niej blokady zdj te:
UPDATE Production.Product
SET ListPrice = 8
WHERE Name = 'Taillights - Battery-Powered';
5. eby powy sza aktualizacja zosta a wykonana, w pierwszym oknie edytora SQL
wykonaj instrukcj COMMIT TRAN.
W trybie Repeatable Read nale y odczytywa te dane, które w ramach transakcji
odczytywane s kilkukrotnie i mog by zmieniane w tym samym czasie przez
innych u ytkowników. Sytuacja taka ma miejsce np. w ró nego rodzaju zestawieniach
i raportach zbiorczych, w których odczytuj c te same dane, za ka dym razem musimy
otrzyma te same wyniki, inaczej zestawienie lub raport b d niespójne.
Serializable
W trybie szeregowania transakcje odwo uj ce si do tych samych tabel wykonywane
s jedna po drugiej. Blokowanie ca ych obiektów, a nie tylko odczytywanych danych,
na czas trwania transakcji pozwala wyeliminowa odczyty widma, ale powoduje, e
odczytuj c nawet jeden wiersz tabeli, mo emy uniemo liwi pozosta ym u ytkownikom
zmodyfikowanie przechowywanych w niej danych.
eby si o tym przekona :
1. W pierwszym oknie edytora SQL prze czymy si do trybu szeregowania,
jawnie rozpoczniemy transakcj i odczytamy informacje o wybranym towarze:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRAN;
SELECT ProductID, Name
FROM Production.Product
Rozdzia 9. Transakcje i wspó bie no 211

WHERE ListPrice BETWEEN 10 AND 15;
------------------------------------------------------------
2 Bearing Ball
2. Je eli teraz w drugim oknie edytora SQL spróbujemy zmieni cen innego
towaru, oka e si , e aktualizacja zosta a zablokowana i b dzie wykonana
dopiero po zako czeniu pierwszej transakcji:
UPDATE Production.Product
SET ListPrice = 120
WHERE ProductID =3;
3. Ko cz c wiczenie, zamknij oba okna edytora SQL bez zatwierdzania
rozpocz tej w jednym z nich transakcji.
W trybie Serializable mamy gwarancj , e odczytywane w ramach transakcji dane
zawsze b d takie same  serwer bazodanowy nie dopu ci nie tylko do ich zmiany,
ale równie do pojawienia si nowych danych. Jednak przez ten czas pozostali u yt-
kownicy nie b d mogli modyfikowa zablokowanych tabel. W wi kszo ci przypad-
ków powoduje to tak znaczne wyd u enie czasu reakcji serwera, e lepiej jest skopio-
wa odczytywane dane9, a je eli zmian nie jest zbyt du o, prze czy si do modelu
optymistycznego.
Model optymistyczny
W modelu optymistycznym tylko modyfikuj cy blokuj innych modyfikuj cych,
czyli ró ni u ytkownicy mog jednocze nie modyfikowa i odczytywa te same dane.
Serwery bazodanowe zapewniaj spójno modyfikowanych w tym modelu danych
poprzez ich wersjonowanie. Zak adaj c (optymistycznie), e w czasie gdy jeden u yt-
kownik odczytuje dane, inni raczej nie b d ich modyfikowa , s one w stanie na bie co
zarz dza dodatkowymi wersjami danych.
Je eli to za o enie jest prawdziwe, czyli je eli jednoczesne modyfikacje i odczyty
tych samych danych nie zachodz zbyt cz sto, mo emy znacznie skróci czas reak-
cji serwera10, prze czaj c baz do optymistycznego modelu wspó bie no ci. eby
si o tym przekona :
1. W pierwszym oknie edytora SQL wykonamy poni sze instrukcje, prze czaj c
baz AdventureWorks do modelu optymistycznego:
USE master;
ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
------------------------------------------------------------
Command(s) completed successfully.
9
Niektóre serwery bazodanowe pozwalaj utworzy migawk (ang. Snapshot) danych.
10
Niektóre serwery bazodanowe, np. serwer Oracle, domy lnie dzia aj w optymistycznym modelu
wspó bie no ci.
212 Cz III Modyfikowanie danych, czyli instrukcje INSERT, UPDATE, DELETE oraz MERGE

2. W tym samym oknie edytora SQL po czymy si z baz AdventureWorks
i w ramach jawnie rozpocz tej transakcji zmienimy dane dwóch pracowników:
USE AdventureWorks;
BEGIN TRAN;
UPDATE HumanResources.Employee
SET Title = 'X'
WHERE EmployeeID <3;
------------------------------------------------------------
(2 row(s) affected)
3. W nowym oknie edytora SQL odczytamy dane o kilku pracownikach:
SELECT EmployeeID, Title
FROM HumanResources.Employee
WHERE EmployeeID <5;
------------------------------------------------------------
1 Production Technician - WC60
2 Marketing Assistant
3 Engineering Manager
4 Senior Tool Designer
4. Okazuje si , e tym razem zapytanie zosta o wykonane natychmiast,
ale z zachowaniem wymogów domy lnego trybu izolowania transakcji,
czyli trybu Read Committed  pozostali u ytkownicy serwera odczytaj
ostatni zatwierdzon wersj danych. Gdyby rozpocz ta w ramach pierwszej
sesji transakcja zosta a zatwierdzona, to ponowne wykonanie tego samego
zapytania zwróci oby najnowsz , zatwierdzon wersj , ze zmienionymi
tytu ami dwóch pierwszych pracowników.
Model pesymistyczny
W modelu pesymistycznym odczytuj cy s blokowani przez modyfikuj cych
(serwer b dzie czeka z za o eniem blokady S, a zdj ta zostanie blokada X), a mody-
fikuj cy przez odczytuj cych (za o enie blokady X wymaga zdj cia blokady S).
Poniewa koszt zarz dzania wieloma wersjami tych samych danych ro nie wraz ze wzro-
stem wersjonowanych danych, w tym modelu zak ada si (pesymistycznie), e odczy-
tywane dane b d w tym samym czasie regularnie modyfikowane.
eby przywróci pesymistyczny (domy lny) model wspó bie no ci bazy AdventureWorks,
nale y wykona poni sze instrukcje:
USE master;
ALTER DATABASE AdventureWorks
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
------------------------------------------------------------
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Rozdzia 9. Transakcje i wspó bie no 213

Podsumowanie
Serwery bazodanowe przeprowadzaj wszystkie zmiany danych w ramach
jawnie lub niejawnie rozpocz tych transakcji.
Transakcje powinny by otwierane jak najpó niej i zamykane jak najwcze niej.
Transakcje powinny zawiera tylko powi zane ze sob instrukcje.
Przerwane, czy to z powodu awarii klienta, czy te serwera, transakcje b d
wycofane.
Na czas trwania transakcji pewne obiekty bazy danych s automatycznie
blokowane.
Serwery bazodanowe automatycznie wykrywaj zakleszczenia i usuwaj je
poprzez wycofanie jednej z zakleszczonych transakcji.
Odizolowanie, jedn z czterech cech ACID transakcji, uzyskuje si za pomoc
automatycznie zak adanych i zwalnianych blokad.
Mo na sterowa sposobem zak adania i czasem trwania blokad, zmieniaj c
poziom izolowania transakcji.
W modelu optymistycznym serwery bazodanowe wersjonuj dane, co poprawia
wspó bie no kosztem wi kszego obci enia serwera.
Zadania
1. Twoim zadaniem jest przygotowanie raportu podsumowuj cego roczn sprzeda .
Wyliczaj c sumy i rednie warto ci sprzeda y produktów, kilkukrotnie musisz
odczyta tabel Production.Product. Jak zagwarantujesz poprawno
wyników raportu?
2. Po przerwie na lunch u ytkownicy zg aszaj , e próby dalszej pracy z baz
danych ko cz si chwilowym  zawieszeniem programu i wreszcie
komunikatem b du mówi cym, e serwer bazodanowy jest niedost pny.
Po sprawdzeniu okazuje si , e serwer i sie dzia aj normalnie, a baza nie
zosta a uszkodzona. Co jest najbardziej prawdopodobn przyczyn problemu?
3. W ramach tworzonej procedury modyfikujesz du e ilo ci danych zapisanych
w kilkunastu tabelach oraz wstawiasz jeden wiersz, informuj cy o wykonaniu
wszystkich operacji, do tabeli znajduj cej si w bazie danych na zdalnym
serwerze. Po czenie pomi dzy serwerami jest mocno obci one i zdarza si ,
e czas nawi zywania sesji i przesy ania danych mi dzy serwerami wielokrotnie
si wyd u a. Co zrobi , eby w przypadku zg oszenia przez procedur b du
braku po czenia ze zdalnym serwerem nie trzeba by o ponownie wykonywa
kosztownych modyfikacji danych?


Wyszukiwarka

Podobne podstrony:
Krzan Katarzyna Praktyczny kurs pisarstwa
Suworin Aleksiej Praktyczny kurs leczenia głodem
Praktyczny kurs pisarstwa
Praktyczny kurs programowania w Delphi
Praktyczny Kurs Pisarstwa
Praktyczny Kurs Pisarstwa (pisanie, twórczość, proza)
praktyczny kurs szybkiego czytania
Praktyczny kurs pisarstwa
Praktyczny kurs asemblera

więcej podobnych podstron