Administracja i programowanie pod Microsoft SQL Server 2000

Podobne dokumenty
Paweł Rajba

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

Oracle PL/SQL. Paweł Rajba.

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

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

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

Bazy danych 2. Wykład 6 Transakcje

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

Administracja i programowanie pod Microsoft SQL Server 2000

Obowiązuje od wersji

Transakcje jednocześnie ACID

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

Bazy danych 9. SQL Klucze obce Transakcje

Tadeusz Pankowski

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

Administracja i programowanie pod Microsoft SQL Server 2000

Właściwości transakcji

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Bazy danych. Andrzej Łachwa, UJ, /15

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

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

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

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

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

Internetowe bazy danych

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

Oracle PL/SQL. Paweł Rajba.

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

Archiwizacja i odtwarzanie 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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

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

Microsoft SQL Server Podstawy T-SQL

Administracja i programowanie pod Microsoft SQL Server 2000

SQL Server. Odtwarzanie baz danych.

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

Tadeusz Pankowski

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000

Kopie zapasowe w SQL Server. Michał Bleja

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

15. Funkcje i procedury składowane PL/SQL

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

Paweł Rajba

Bazy danych 9. Klucze obce Transakcje

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

Bazy danych. Dr inż. Paweł Kasprowski

Administracja i programowanie pod Microsoft SQL Server 2000

BAZY DANYCH Cz III. Transakcje, Triggery

Zarządzanie transakcjami

Wielowersyjne metody synchronizacji transakcji

Wykład 8. SQL praca z tabelami 5

Przechowywanie danych

Ćwiczenie 9 współbieŝność

Oracle PL/SQL. Paweł Rajba.

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

Administracja i programowanie pod Microsoft SQL Server 2000

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

Transakcje Wykład z bazy danych dla studen

DECLARE VARIABLE zmienna1 typ danych; BEGIN

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

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

Administracja i programowanie pod Microsoft SQL Server 2000

OLTP Przetwarzanie Transakcyjne

Administracja i programowanie pod Microsoft SQL Server 2000

1 Instalowanie i uaktualnianie serwera SQL Server

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

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Systemowe aspekty baz

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

System Oracle podstawowe czynności administracyjne

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

CREATE USER

Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpowiednie zapytanie.

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

Uprawnienia, role, synonimy

Wyzwalacze (triggery) Przykład

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Oracle PL/SQL. Paweł Rajba.

Struktura bazy danych

Składowane procedury i funkcje

Bazy danych Transakcje

Plan wykładu. Przykład. Wprowadzenie BAZY DANYCH. Transakcje Hurtownie danych

Wykłady z przedmiotu Podstawy baz danych Transakcje dr hab. prof. nadzw. Tadeusz Antczak. Transakcje

Zarządzanie obiektami bazy danych Oracle11g

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

TECHNIKI STEROWANIA WSPÓŁBIEŻNOŚCIĄ. I. Wybrane problemy współbieżności. Utracona aktualizacja (lost update)

SQL 4 Structured Query Lenguage

PHP: bazy danych, SQL, AJAX i JSON

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

Bazy Danych i Usługi Sieciowe

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

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

PODSTAWY BAZ DANYCH 13. PL/SQL

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

Transkrypt:

Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/

Zawartość modułu 8 Transakcje i blokady Wprowadzenie do transakcji, rodzaje transakcji Punkty zapisu, odzyskiwanie i punkty kontrolne Zagnieżdżanie i niejawne zaczynanie transakcji Zabronione instrukcje, rozważanie o transakcjach Błędy w transakcjach Zasoby do blokowania, rodzaje i zgodność blokad Poziomy odseparowania, czas oczekiwania Zakleszczenia, informacje o blokadach - 1 -

Wprowadzenie Kilka uwag Jedna transakcja może zawierać wiele wsadów, jeden wsad może zawierać wiele transakcji Transakcje spełniają własność ACID: niepodzielność spójność odseparowanie wytrzymałość W ramach transakcji zwykle umieszcza się instrukcje modyfikujące dane - 2 -

Rodzaje transakcji Są dwa rodzaje transakcji w SQL Server domniemane (implicit) dla poleceń INSERT,... na żądanie (explicit) transakcję rozpoczynamy poleceniem BEGIN TRANSACTION [WITH MARK...] transakcję kończymy poleceniami COMMIT lub ROLLBACK - 3 -

Punkty zapisu Są po to, żeby można było wycofać fragment transakcji, a nie wszystko Tworzenie punktu zapisu odbywa się poprzez polecenie SAVE TRANSACTION nazwa Wycofanie do podane punktu odbywa się poprzez polecenie ROLLBACK TRANSACTION nazwa_punktu_zapisu - 4 -

Odzyskiwanie i punkty kontrolne Punkt kontrolny zmiany danych wykonywane w ramach transakcji są wprowadzane do bazy danych w momencie wykonania tzw. punktu kontrolnego znaczenie i skutki ilustruje poniższy rysunek - 5 -

Zagnieżdżanie transakcji SQLServer pozwala na zagnieżdżanie instrukcji BEGIN TRANSACTION/COMMIT(ROLLBACK) Stopień zagnieżdżenia jest określony przez zmienną @@trancount (jeśli brak aktywnej transakcji zmienna ma wartość 0) Uwagi: Jeśli stopień zagnieżdżenia jest równy 1, wtedy zatwierdzane są transakcji ze wszystkich poziomów Operację wycofania możemy wykonać na dowolnym poziomie zagnieżdżenia, jednak wycofywane są wszystkie transakcje - 6 -

Zagnieżdżanie transakcji Inaczej mówiąc: BEGIN TRAN zwiększa @@trancount o 1 COMMIT zmniejsza @@trancount o 1 ROLLBACK ustawia @@trancount na 0 Jeszcze jedna uwaga Wywołanie COMMIT lub ROLLBACK w przypadku, gdy nie ma aktywnej transakcji, skończy sie błędem - 7 -

Zagnieżdżanie transakcji Nazewnictwo transakcji Warto nazywać transakcję, ponieważ możemy lepiej panować nad kodem, jednak należy uważać: jeśli wykonujemy ROLLBACK, to podana nazwa musi być nazwą transakcji z poziomu 1 wykonując COMMIT, podana nazwa nie ma znaczenia, ponieważ wykonywany tak naprawdę jest i tak COMMIT na poziomie 1 UWAGA: zagnieżdżonych transakcji należy w miarę możliwości unikać (mogą się pojawić kłopoty z blokadami) - 8 -

Niejawne zaczynanie transakcji Opcja Implicit Transactions jej włączenie sprawia, że określone instrukcje automatycznie rozpoczynają transakcję w takiej konfiguracji nie są dozwolone transakcje zagnieżdżone transakcja musi być jawnie zakończona poleceniem COMMIT lub ROLLBACK domyślnie opcja ta jest wyłączona Ustawienie opcji SET IMPLICIT_TRANSACTIONS {ON OFF} - 9 -

Niejawne zaczynanie transakcji Polecenia, które przy włączeniu opcji implicit transactions rozpoczną transakcję: ALTER TABLE, INSERT CREATE, OPEN DELETE, REVOKE DROP, SELECT FETCH, TRUNCATE TABLE GRANT, UPDATE - 10 -

Zabronione instrukcje Poniższych instrukcji nie można umieszczać w transakcjach: ALTER DATABASE BACKUP LOG CREATE DATABASE DROP DATABASE RECONFIGURE RESTORE DATABASE RESTORE LOG UPDATE STATISTICS - 11 -

Rozważania o transakcjach Czas wykonania powinien być jak najkrótszy należy przemyśleć użycie np. pętli while czas blokad jest krótszy Nie należy w ramach transakcji czekać na dane od użytkownika Wszystkie niezbędne analizy danych należy wykonać przed rozpoczęciem transakcji Transakcja powinna uzyskiwać dostęp do minimalnego zbioru wierszy - 12 -

Przykład sqlserver-p08-01.sql - 13 -

Błędy w transakcjach Kilka uwag pojawienie się błędu nie zawsze powoduje automatyczne wycofanie transakcji błędy krytyczne powodują przerwanie wykonywania wsadu i wycofanie transakcji warto sprawdzać zmienną @@ERROR po wykonaniu każdej instrukcji błędy składniowe spowodują wstrzymanie wykonywania wsadu, odwołania do nieistniejących obiektów spowodują przerwanie wsadu w miejscu odwołania - 14 -

Błędy w transakcjach Błędy, które najczęściej się pojawiają są zwykle związane z zasobami Należy zwrócić szczególną uwagę na brak uprawnień do obiektu naruszenie ograniczeń powtórzenie wartości przy aktualizacji i wstawianiu zakleszczenie z innym użytkownikiem niedozwolone wartości dla bieżącego typu danych - 15 -

Błędy w transakcjach Przydatna konstrukcja declare @retcode int exec @retcode=procedura dzięki tej konstrukcji mamy lepszą kontrolę nad błędami Opcja XACT_ABORT powoduje przerwanie wsadu przy każdym błędzie ustawienie przez polecenie set xact_abort { on off } skutki jej włączenia są czasami problematyczne - 16 -

Błędy w transakcjach Obsługa błędów w T-SQLu jest dosyć uciążliwa, nieelegancka i niespójna nie można utworzyć podprogramu odpowiedzialnego za obsługę błędów zwykle błędy obsługuje się w sposób podobny do przedstawionego w przykładach (bazuje na goto) - 17 -

Błędy w transakcjach Obsługa błędów w T-SQLu jest dosyć uciążliwa, nieelegancka i niespójna nie ma prostego kryterium pozwalającego ustalić, które błędy są krytyczne, a które nie można pobrać kod błędu i ustalić wagę błędu na podstawie tabeli sysmessages kłopot w tym, że niektóre błędy o wadze 16 nie są krytyczne (np. 515, 544, 547, 550), a niektóre o wadze 15 są krytyczne (np. błąd składniowy polegający na odwołaniu się do nieistniejącej funkcji) :) - 18 -

Przykład sqlserver-p08-02.sql - 19 -

Blokady Blokady zapobiegają następującym zjawiskom utracona zmiana dwóch edytuje wiersz, zapisują zmiany; przepadają zmiany tego, który zapisał jako pierwszy brudne dane (dirty read) edycja danych, które nie zostały zatwierdzone, po czym zostały wycofane powtarzalność odczytu (nonrepeatable read) czytamy dane, ktoś je modyfikuje, czytamy dane powtórnie; wyniki obliczeń wykonane za pierwszym i drugim razem mogą być inne co prowadzi do niespójności - 20 -

Blokady Blokady zapobiegają następującym zjawiskom odczyty fantomów pojawiają się, gdy transakcje nie są od siebie odizolowane w jednej transakcji modyfikowane są wszystkie pozycje dla danego regionu, w drugiej w tym samym momencie dodawana jest jeszcze jedna pozycja dla tego regionu; przy ponownym czytaniu wierszy przez pierwszą transakcję ten jeden wiersz nie jest zmodyfikowany - 21 -

Zasoby do blokowania Blokowane mogą być RID identyfikator wiersza, czyli cały wiersz w tabeli Key wiersz w indeksie, używane do blokady zakresu wierszy Page 8KB strona Extent obszar stron tabeli lub indeksu Table cała tabela razem z indeksami Database cała baza danych, używane przy odtwarzaniu bazy danych - 22 -

Rodzaje blokad Blokady podstawowe Dzielone (shared) są nakładane przy wykonywaniu operacji tylko-do-odczytu SQL Server zwalnia taką blokadę na wiersz jak tylko przejdzie do odczytu kolejnego wiersza, chyba że jest ustawiony wyższy poziom izolacji transakcji wtedy np. blokada będzie istniała dopóki wszystkie wiersze wyniku nie zostaną przekazane do klienta - 23 -

Rodzaje blokad Blokady podstawowe Wyłączne (exclusive) są nakładana przy operacjach INSERT, UPDATE, DELETE nałożenie tej blokady uniemożliwia nałożenie blokad dzielonych blokada może zostać nałożona dopiero, gdy na zasobie nie jest nałożona żadna inna blokada w szczególności tylko jedna transakcja może nałożyć taką blokadę - 24 -

Rodzaje blokad Blokady specjalne Intent locks są to blokady intencyjne, które określają co SQL Server zamierza zrobić; służą do minimalizacji konfliktów blokad np. transakcja ma wyłączną blokadę na wiersz, intent lock uniemożliwia innej transakcji blokadę całej tabeli rodzaje takich blokad IS transakcja zamierza czytać część zasobów przez nałożenie na nie blokady S IX transakcja zamierza modyfikować część zasobów (nie wszystkie) poprzez nałożenie na nie blokady X SIX transakcja zamierza czytać wszystkie wiersze i niektóre z nich modyfikować (poprzez nakładanie odpowiednich blokad) - 25 -

Rodzaje blokad Blokady specjalne Update locks nakładana na dane, które mogą być aktualizowane rozważmy sytuację, gdy dwie transakcje nałożyły blokadę S na wiersz a następnie obie chcą go zmodyfikować; będą wtedy czekać na założenie blokady X w nieskończoność blokada typu U zapobiega takiej sytuacji, ponieważ wtedy tylko jedna z transakcji może nałożyć taką blokadę jeśli dane są modyfikowane, blokada jest zamieniana na X tego typu blokady zapobiegają zakleszczeniom, gdy wiele transakcji czyta dane z zamiarem ich aktualizacji - 26 -

Rodzaje blokad Blokady specjalne Schema locks blokują możliwość zmiany lub usunięcia schematu tabeli lub indeksu są dwa rodzaje takiej blokady Schema stability (Sch-S) blokuje możliwość usunięcia zasobu Schema modification (Sch-M) blokuje innym sesjom możliwość dostępu do zasobu, który jest aktualnie modyfikowany Bulk update locks blokada umożliwia procesom wykonanie operacji bulk copy, blokując jednocześnie dostęp do tabeli procesom, które chcą na niej wykonać coś innego - 27 -

Kompatybilność blokad Na zasób jest nałożona blokada. Kombatybilność określa, która inna blokada może być założona dodatkowo Zasady określa poniższa tabelka - 28 -

Poziomy odseparowania READ UNCOMMITED nie są nakładane żadne blokady mogą się pojawić,,brudne'' odczyty READ COMMITED nakładane są dzielone blokady przy czytaniu,,brudne'' odczyty już nie pojawią - 29 -

Poziomy odseparowania REPEATABLE READ gwarantowany jest brak,,brudnych'' odczytów i niepowtarzalnych odczytów blokady odczytu są utrzymywane do końca transakcji SERIALIZABLE zapobiega modyfikacji i wstawianiu wierszy, które spełniają warunek WHERE wierszy biorących udział w transakcji nie pojawią fantomy - 30 -

Poziomy odseparowania Do ustawienia poziomu odseparowania służy polecenie SET TRANSACTION ISOLATION LEVEL { READ COMMITTED READ UNCOMMITTED REPEATABLE READ SERIALIZABLE } Poziom odseparowania można sprawdzić przez polecenie DBCC USEROPTIONS - 31 -

Czas oczekiwania na zasób Opcja lock timeout określa ile milisekund transakcja będzie czekała na dostęp do zasobu, zanim zostanie zwrócony błąd locking error powyższy błąd nie powoduje przerwania transakcji domyślna wartość to -1, czyli transakcja będzie czekać w nieskończoność ustawienie opcji SET LOCK_TIMEOUT milisekundy ustalenie aktualnej wartości SELECT @@lock_timeout - 32 -

Zakleszczenia Pojawiają się, gdy dwie transakcje wzajemnie czekają na blokowane przez siebie zasoby SQL Server kończy zakleszczenie poprzez wyznaczenie,,ofiary zakleszczenia'', czyli proces, który po prostu ubija; zwykle jest to ten młodszy proces pojawia się wtedy komunikat o numerze 1205-33 -

Zakleszczenia Porady na zmniejszenie ryzyka powstania zakleszczenia używać zasobów w transakcjach w tej samej kolejności transakcje powinny być jak najkrótsze czasowo pod względem ilości kroków - 34 -

Informacje o blokadach Listę blokad możemy zobaczyć Enterprise Manager Management Current Activity jako wynik procedury sp_lock Znaczenie niektórych pól wyniku Type określa rodzaj blokowanego zasobu DB baza danych, EXT obszar (extent) TAB tabela (table), KEY klucz w indeksie (key), PAG stronę (page), RID wiersz (row identifier). - 35 -

Informacje o blokadach Znaczenie niektórych pól wyniku Resource adres blokowanego zasobu Przykładowo: 1:528:0 wiersz 0, na stronie 528 i pliku 1 Mode tryb blokowania, który składa się z shared (S), exclusive (X), intent (I), update (U), or schema (Sch). Status GRANT blokada uzyskana WAIT oczekiwana CNVRT w trakcie zmiany - 36 -

Przykłady sqlserver-p08-03.sql sqlserver-p08-04.sql sqlserver-p08-05.sql - 37 -