Bazy Danych - poniedziałek, 15.00 - 18.00 - zadania zestaw 09.

TSQL - Transakcje, poziomy izolacji transakcji.

BEGIN TRAN[SACTION] - rozpoczęcie nowej transakcji

COMMIT - zatwierdzenie bierzącej transakcji

ROLLBACK - wycofanie transakcji (anulowanie zmian)

SET TRANSACTION ISOLATION LEVEL {level} - zmiana poziomu izolacji transakcji dla danego połączenia (każde połączenie może mieć inny poziom!)

{level} \(\in\) READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE, SNAPSHOT - dostępne poziomy izolacji transakcji, przy czym SNAPSHOT dostępny jest tylko jesli baza danych na to pozwala

ALTER DATABASE Cw SET ALLOW_SNAPSHOT_ISOLATION ON - pozwól bazie danych na poziom izolacji SNAPSHOT

DBCC USEROPTIONS - sprawdzenie aktualnych informacji o połaczeniu, m.in. o poziomie izolacji transakcji

SET IMPLICIT_TRANSACTIONS OFF/ON - zmień tryb rozpoczynania transakcji: ON - transakcje rozpoczynają się z pierwszą opracją DML i trwają do pierszego COMMIT, OFF - każda z instrukcji DML jest osobną transakcją, można rozpocząć dłuższą transakcję poprzez BEGIN TRAN

PRINT @@TRANCOUNT - wypisz ilość aktualnie rozpoczętych transakcji - w MS SQL Serwer można zagieżdzać transakcje, ale nie można ich zatwierdzać częsciowo (wyjaśnione w wykładach)

SET XACT_ABORT ON/OFF - zmień tryb automatycznego przerwania transakcji. ON - jeśli jakakolwiek instrukcja transakcji się nie powiedzie (wystąpi błąd, rzucony wyjątek) to robimy ROLLBACK. OFF - błąd powoduje niewykonanie tylko tej operacji która była przyczyna błędu, wykonanie przechodzi do następnej instrukcji.

Przykład

Załóżmy że mamy następujący schemat:


	CREATE DATABASE test
	GO
	
	USE test
	GO
	
	CREATE TABLE t2(
		p1 INT,
		p2 INT
	)
	
	INSERT INTO t2 values(1,100);
	INSERT INTO t2 values(2,200);
	INSERT INTO t2 values(3,300);
	INSERT INTO t2 values(4,400);
	INSERT INTO t2 values(5,500);
	
Sprawdź co stanie się kiedy w Management Studio stworzysz dwa połączenia (Dwa razy kliknij New query) i w każdym z nich (w kazdym okienku SQLQuery) wykonasz następujące operacje (po kolei, jedna po drugiej - zaznaczaj każdą instrukcję i klikaj Uruchom, jeśli trzeba zmieniaj aktywne okienko połączenia):
T1 - połączenie 1T2 - połaczenie 2
begin tran
select * from t2
begin tran
update t2 set p2 = 300 where p2<300
select * from t2
rollback
commit
Jaki problem się pojawia? Jaki jest domyślny poziom izolacji transakcji w MS SQL Server? Co się stanie jeśli zmienic poziom izolacji transakcji na REaD UNCOMMITTED w T1? A w T2? Co się stanie jesli zmienimy w drugiej transakcji poziom na SERIALIZABLE? Jakie anomalie tu widzimy?

Zadania

Na ćwiczeniach przeanalizuj zadania umieszczone w materiałach do wykłądów w sekcji ćwiczenia (wszystkie ćwiczenia z tsql_transakcje_1.pdf i ćwiczenia 1-6 z poziomy_izolacji_cw1.pdf).

Zadania (na punkty):

  1. Zaproponuj harmonogram, który pokaże niekorzystne anomalie P1, podaj najniższy i najwyższy stopień poziomu izolacji transakcji w MS SQL Server, w którym może do niego dojść
  2. Zaproponuj harmonogram, który pokaże niekorzystne anomalie P2, podaj najniższy i najwyższy stopień poziomu izolacji transakcji w MS SQL Server, w którym może do niego dojść
  3. Zaproponuj harmonogram, który pokaże niekorzystne anomalie P3, podaj najniższy i najwyższy stopień poziomu izolacji transakcji w MS SQL Server, w którym może do niego dojść
  4. Zaproponuj harmonogramy, które doprowadzą do zakleszczenia w każdym z poziomów izolacji w MS SQL Server lub wykaż, że zakleszczenie nie będzie możliwe
  5. Wykonaj ćwiczenia 7-9 (poziomy izolacji kursorów) z poziomy_izolacji_cw1.pdf