Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).



Podobne dokumenty
Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

przykłady problemów; realizacja dostaw części od producenta do klienta:

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

Plan ćwiczenia. Rozdział 17. zarządzania współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Plan ćwiczenia. Rozdział 17 Zarządzanie współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

Oracle PL/SQL. Paweł Rajba.

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

Bazy danych 9. SQL Klucze obce Transakcje

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Transakcje jednocześnie ACID

Bazy danych wykład dziewiaty Transakcje. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

I. Techniki wielowersyjne sterowania współbieżnością

Administracja i programowanie pod Microsoft SQL Server 2000

Izolacje transakcji oraz anomalie. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Bazy danych 2. Wykład 6 Transakcje

Microsoft SQL Server Podstawy T-SQL

Paweł Rajba

Paweł Rajba

070 TRANSAKCJE. Prof. dr hab. Marek Wisła

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Wielowersyjne metody synchronizacji transakcji

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Bazy danych 9. Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

W SQL Serwerze 2008 wprowadzono parametry tablicowe (Table Valued Parameters - TVP).

Oracle PL/SQL. Paweł Rajba.

Administracja i programowanie pod Microsoft SQL Server 2000

Właściwości transakcji

SQL Server. Odtwarzanie baz danych.

Ćwiczenie 9 współbieŝność

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

Tadeusz Pankowski

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Programowanie w SQL. definicja bloku instrukcji BEGIN...END, warunkowe wykonanie instrukcji IF...ELSE, wyrażenie CASE,

Transakcje Wykład z bazy danych dla studen

System Oracle podstawowe czynności administracyjne

Algorytmy zarządzania współbieżnym wykonywaniem transakcji część II

OLTP Przetwarzanie Transakcyjne

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Bazy danych. Andrzej Łachwa, UJ, /15

Bazy danych Transakcje

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

SQL w języku PL/SQL. 2) Instrukcje języka definicji danych DDL DROP, CREATE, ALTER, GRANT, REVOKE

Internetowe bazy danych

Bazy danych 7. Klucze obce Transakcje. P. F. Góra

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Zarządzanie transakcjami

Administracja i programowanie pod Microsoft SQL Server 2000

Procedury składowane. Funkcje vs. procedury Funkcja. Procedura. zazwyczaj ma parametry tylko typu IN; można wywoływać z poziomu

Zarządzanie obiektami bazy danych Oracle11g

Wykład 8. SQL praca z tabelami 5

Obowiązuje od wersji

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Przechowywanie danych

Rozdział 17. Zarządzanie współbieżnością zadania

Bazy danych. Plan wykładu. Rozproszona baza danych. Fragmetaryzacja. Cechy bazy rozproszonej. Replikacje (zalety) Wykład 15: Rozproszone bazy danych

Bazy danych 6a. Transakcje. P. F. Góra

PODSTAWY BAZ DANYCH. 11. Transakcje. 2009/ Notatki do wykładu "Podstawy baz danych"

Oracle PL/SQL. Paweł Rajba.

Administracja i programowanie pod Microsoft SQL Server 2000

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Tadeusz Pankowski

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

SQL 4 Structured Query Lenguage

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Zbiór pytań nr 5. 2 Które stwierdzenie opisuje najlepiej zbiór uprawnień dostępny po wykonaniu

Archiwizacja i odtwarzanie bazy danych

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Aby stworzyć widok, należy mieć uprawnienia do wszystkich obiektów do których odnosi się widok.

Bazy danych. Dr inż. Paweł Kasprowski

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Język PL/SQL. Rozdział 2. Kursory

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Język SQL, zajęcia nr 1

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Ćwiczenie 3. Współbieżność i transakcje

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

1. Wyzwalacze BD (ang. triggers)

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Bazy danych i usługi sieciowe

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

Bazy Danych i Usługi Sieciowe

Podstawy języka SQL - dokończenie TRANSAKCJE 1

Bazy danych 6. Klucze obce. P. F. Góra

Informatyka (7-8) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Bazy danych - Materiały do laboratoriów VIII

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Transkrypt:

POZIOMY IZOLACJI TRANSAKCJI 1. Microsoft SQL Server 2012 (od SQL Server 2005) W systemie SQL Server można wybrać sposób sterowania współbieżnością. Podstawowy sposób to stosowanie blokad. Wykorzystywane są omawiane wcześniej blokady S, X, U, blokady intencjonalne IS, IX, SIX. Są również inne blokady, np. blokady zakresu klucza (stosowane w pewnych przypadkach do realizacji blokowania predykatowego) i blokady schematu (stosowane w celu uniemożliwienia zmiany struktury tabeli w trakcie wykonywania na niej operacji odczytu lub zapisu). SQL Server realizuje poziomy izolacji transakcji w wersji blokowania (locking READ UNCOMMITTED, locking READ COMMITTED, locking REPETEABLE READ, locking SERIALIZABLE). Można włączyć wielowersyjne sterowanie współbieżnością (takie jak w systemie Oracle). Dostępne są wówczas dwa dodatkowe poziomy izolacji transakcji: READ COMMITTED SNAPSHOT (READ CONSISTENCY) oraz SNAPSHOT (anomalny SERIALIZABLE). Sterowanie współbieżnością w oparciu o blokady. Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia). SET TRANSACTION ISOLATION LEVEL level gdzie level = READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Domyślnym poziomem izolacji transakcji jest READ COMMITTED. Sterowanie współbieżnością z wielowersyjnością i blokadami do zapisu (jak w Oracle). READ COMMITTED SNAPSHOT nie ma blokad przy odczycie. Transakcja czyta wersje danych zapisane i zatwierdzone przed instrukcją odczytu. SNAPSHOT ISOLATION nie ma blokad przy odczycie. Transakcja czyta wersje danych zapisane i zatwierdzone przed początkiem transakcji. Przy próbie zapisu danych przez transakcję A system sprawdza czy jest inna transakcja B, która zmodyfikowała ten sam element danych i została zatwierdzona w trakcie działania transakcji A. Jeśli taka transakcja (B) została znaleziona, wówczas A jest wycofywana. READ COMMITTED SNAPSHOT w systemie MS SLQ Server 2005/2008 = READ COMMITTED w systemie Oracle. 1

SNAPSHOT ISOLATION w systemie MS SLQ Server 2005/2008 = SERIALIZABLE w systemie Oracle (do wersji Oracle 10gr2 włącznie; w wersji Oracle 11g zmieniono sterowanie współbieżnością w poziomie izolacji SERIALIZABLE). Sposób włączenia READ COMMITTED SNAPSHOT w systemie MS SLQ Server 2005/2008: USE MASTER ALTER DATABASE nazwa_bazy_danych SET READ_COMMITTED_SNAPSHOT ON SET TRANSACTION ISOLATION LEVEL READ COMMMITTED Sposób włączenia SNAPSHOT ISOLATION w systemie MS SLQ Server 2005/2008: USE MASTER ALTER DATABASE nazwa_bazy_danych SET ALLOW_SNAPSHOT_ISOLATION ON SET TRANSACTION ISOLATION LEVEL SNAPSHOT W systemie Microsoft SQL Server niezależnie od ustawienie poziomu izolacji transakcji można zażądać różnych sposobów blokowania w pojedynczej instrukcji SQL, blokowanie może dotyczyć jednej tabeli. Robi się to przez podanie tzw. wskazówki (hint) w instrukcji SQL. Dodatkowe informacje o blokowaniu na poziomie pojedynczych instrukcji SQL można znaleźć w pomocy do systemu SQL Server (Books Online) pod hasłem Table hints. Wybrane fragmenty zamieszczone są w pliku tsql_hints.pdf (zamieszczam również wersję.doc w formacie Word 2003). Dodatkowe informacje o transakcjach w języku Transact SQL (tryb jawny i niejawny, XACT_ABORT, zagnieżdżanie transakcji) wraz z propozycjami ćwiczeń można znaleźć w pliku tsql_transakcje.pdf (zamieszczam również wersję.doc w formacie Word 2003). Sterowanie współbieżnością transakcji w kursorach. Pozycjonowane zmiany: UPDATE WHERE CURRENT OF nazwakursora DELETE FROM Tabela WHERE CURRENT OF nazwakursora Opcje przy otwieraniu kursora: Typ kursora READ_ONLY: nie można wykonywać pozycjonowanych zmian wierszy przez kursor, blokady nie są zakładane. SCROLL LOCKS: jeśli kursor jest otwarty w transakcji jawnej (BEGIN TRAN COMMIT), to są zakładane normalne blokady U update (długotrwałe, do końca transakcji) i blokady kursora (scroll locks), zwalniane w momencie przejścia do innego wiersza. Jeśli jest otwarty poza transakcją, to są zakładane tylko blokady kursora. Blokady typu scroll lock są niezależne od transakcji i są zwalniane przy przejściu do nowego wiersza lub zamknięciu kursora. 2

Przy niewłączonej opcji automatycznego zamykania kursorów na końcu transakcji może się zdarzyć, że blokady są trzymane nadal po zakończeniu transakcji. SET CURSOR_CLOSE_ON_COMMIT ON ALTER DATABASE SET CURSOR_CLOSE_ON_COMMIT OPTIMISTIC (WITH VALUES): przy odczycie wiersza nie są zakładane blokady. Przy próbie zmodyfikowania wiersza następuje sprawdzenie, czy inna transakcja tego nie zrobiła (już po odczycie wiersza przez kursor, ale przed próbą jego zmodyfikowania). Wiersz wczytywany jest jeszcze raz i porównywane są wartości w kolumnach. Jeśli się nie zmieniły, to aktualizacja następuje, jeśli nie, wówczas zgłaszany jest błąd. OPTIMISTIC (WITH ROW VERSIONING): podobnie, ale w tabeli musi być kolumna typu rowversion (w SQL Server 2008, w starszych wersjach SQL Server 2000 i 2005 był to typ timestamp). Wartość w takiej kolumnie jest zawsze automatycznie modyfikowana przy modyfikacji wiersza, nawet jeśli jest to modyfikacja typu pole1 = pole1 (czyli nie ma zmiany wartości). Dodatkowe informacje o blokowaniu i kursorach w języku Transact SQL wraz z propozycjami ćwiczeń można znaleźć w pliku tsql_poziomy_izolacji.pdf. 2. Oracle Ustawienie dla bieżącej sesji: ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED lub ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE Ustawienia poziomu izolacji tylko dla jednej transakcji: SET TRANSACTION ISOLATION_LEVEL READ COMMITTED; SET TRANSACTION ISOLATION_LEVEL SERIALIZABLE; SET TRANSACTION READ ONLY; Domyślnym poziomem izolacji transakcji jest READ COMMITTED. READ COMMITTED nie ma blokad przy odczycie. Są długie blokady do zapisu zakładane na poziomie wierszy. Transakcja czyta wersje danych zapisane i zatwierdzone przed instrukcją odczytu. SERIALIZABLE nie ma blokad przy odczycie. Transakcja czyta wersje danych zapisane i zatwierdzone przed początkiem transakcji. Są długie blokady do zapisu zakładane na poziomie wierszy. Przy próbie zapisu danych przez transakcję A system sprawdza czy jest 3

inna transakcja B, która zmodyfikowała ten sam element danych i została zatwierdzona w trakcie działania transakcji A. Jeśli jest taka transakcja (B), wówczas instrukcja zapisu jest wycofana i jest generowany wyjątek, który można obsłużyć i w obsłudze wyjątku wycofać transakcję. W Oracle do wersji 10gr2 włącznie poziom SERIALIZABLE był równoważny poziomowi SNAPSHOT w systemie Microsoft SQL Server, zatem np. problem skrzywionego zapisu A5B (write skew) był możliwy. Podobnie problem Read- Only transaction anomaly (patrz materiały uzupełniające do wykładu) był możliwy. W wersji Oracle 11g zmieniono sterowanie współbieżnością w poziomie SERIALIZABLE. Skrzywiony zapis nie jest już możliwy. Problem Read- Only transaction anomaly też już nie występuje. Jednak problem P3 może wystąpić (ale A3 nie występuje). Transakcje rozpoczynają się niejawnie pierwszą instrukcją operująca na danych (SELECT, INSERT, UPDATE, DELETE). Transakcję należy zatwierdzić (COMMIT) lub wycofać (ROLLBACK). Przy każdej zatwierdzonej zmianie danych w bloku zapisywany jest tzw. SCN (System Change Number). Poprzednia postać bloku wraz z poprzednią wartością SCN jest umieszczana w tzw. segmencie wycofania. Instrukcjom także przypisywane są unikalne SCN. W poziomie izolacji transakcji READ COMMITTED instrukcja SELECT o pewnym numerze SCN czyta najnowsze bloki (najpóźniej zmodyfikowane) ale o mniejszym numerze SCN. Ilustruje to poniższy rysunek: SELECT (SCN = 10203) 10200 10200 10205 10201 10197 Segmenty wycofania (Rollback segments) 10205 10202 10190 10202 4

W celu zabezpieczenia się przed problemem A5B (Write Skew) w wersjach Oracle do 10gr2 włącznie można zastosować jawne żądanie zablokowania tabeli przez instrukcję LOCK TABLE lub stosując opcję zdania SELECT: SELECT FOR UPDATE. W celu zabezpieczenia się przed problemem P3 należy stosować jawne blokowanie tabel przez instrukcje LOCK TABLE (patrz poniższa tabela). Typy blokad w systemie Oracle (terminologia Oracle): Blokady wierszy, row locks (TX), wyłączne. Oracle blokuje wiersze w trybie wyłącznym (exclusive row lock) przy wykonywaniu instrukcji INSERT, UPADTE, DELETE oraz SELECT FOR UPDATE. Blokady trwają do końca transakcji. Blokady tabel, table locks (TM) Założenie blokady wierszowej powoduje jednocześnie założenie pewnego typu blokady na całą tabelę. Blokady te określane są wspólnym mianem blokady tabelowe, table locks (TM). Niektóre z tych blokad odpowiadają blokadom intencjonalnym w systemie Microsoft SQL Server i mają podobne znaczenie (RS- - IS, RX- - IX, SRX- - SIX). Blokady S, X oraz SRX są zakładane jawnie poleceniem LOCK TABLE (RS i RX też można założyć tym poleceniem). RS i RX zakładane są automatycznie zgodnie z poniższą tabelą. Typy blokad tabelowych: row share (RS), row exclusive (RX), share (S), share row exclusive (SRX), exclusive (X). Typ blokady tabelowej określa jakie blokady tabelowe mogą być założone przez inne transakcje. SQL Statement Mode of Table Lock Lock Modes Permitted? RS RX S SRX X SELECT...FROM table... none Y Y Y Y Y INSERT INTO table... RX Y Y N N N UPDATE table... RX Y* Y* N N N DELETE FROM table... RX Y* Y* N N N SELECT... FROM table FOR UPDATE OF... RS Y* Y* Y* Y* N LOCK TABLE table IN ROW SHARE MODE RS Y Y Y Y N LOCK TABLE table IN ROW EXCLUSIVE MODE RX Y Y N N N LOCK TABLE table IN SHARE MODE S Y N Y N N LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE SRX Y N N N N LOCK TABLE table IN EXCLUSIVE MODE X N N N N N 5

* pod warunkiem, że nie ma wykluczających się blokad wierszowych (na tych samych wierszach). Blokowanie w kursorach. W systemie Oracle jeśli chcemy stosować pozycjonowane zmiany danych z użyciem kursora, należy przy definiowaniu tego kursora użyć opcji FOR UPDATE. Wówczas przy otwarciu kursora na wiersze zakładane są blokady długotrwałe (do końca transakcji). W systemie Oracle nie ma transakcji zagnieżdżonych (nested), są transakcje autonomiczne. Literatura pomocnicza: 1. Microsoft SQL Server Books Online. 2. Dokumentacja Oracle. 6