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.
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 1 | T2 - połaczenie 2 |
---|---|
begin tran | |
select * from t2 | |
begin tran | |
update t2 set p2 = 300 where p2<300 | |
select * from t2 | |
rollback | |
commit |
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):