Zarządzanie transakcjami w SQL Server Marek Adamczuk
O mnie Od blisko 12 lat programista SQL Server (od 6.5) Kierownik Wydziału Zarządzania Jakością, Zmianą i Wiedzą w Asseco Business Solutions Warszawa Członek i prelegent PLSSUG Warszawa MCP, MCSE, MCDBA, MCTS, MVP SQL Server
Agenda Co to jest transakcja? Co jest, a co nie jest transakcją w SQL Server? Demo: zarządzanie transakcją wewnątrz procedury Prawidłowa obsługa błędów Zagnieżdżanie transakcji, transakcje nazwane, @@TRANCOUNT Punkty przywracania, SAVE TRAN Droga na skróty TRY..CATCH i XACT_ABORT Jeśli czas pozwoli: próba implementacji transakcji autonomicznej Poziom sesji: 300 (co najmniej)
Definicja transakcji Sekwencja operacji modyfikujących bazę danych traktowana jako całość, tj. z możliwością wycofania w całości Cechy dobrej implementacji transakcyjności – ACID: Atomic – jeśli wycofujemy to wszystko Consistent – po zakończeniu baza jest w spójnym stanie Isolated – „bez wpływu” na inne transakcje Durable – jeśli zatwierdzamy to efekt jest trwały, nawet w przypadku utraty zasilania
Co jest transakcją w SQL Server? Pojedyncza operacja modyfikująca z grupy DDL, DML lub DCL poza SELECT..INTO Operacje w wyzwalaczu (trigger) wraz z instrukcją modyfikującą uruchamiającą go Transakcja użytkownika: świadomie sterowana poleceniami BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN i SAVE TRAN
Co NIE jest transakcją? Instrukcja SELECT poza SELECT..INTO Podstawienie do parametru lub zmiennej, w tym do zmiennej tablicowej Niskopoziomowe operacje na plikach typu: CREATE/DROP/ALTER DATABASE, BACKUP, RESTORE, CHECKPOINT, DBCC.
Transakcje - pojęcia Transakcja zagnieżdżona – transakcja rozpoczęta wewnątrz większej transakcji Transakcja nazwana – wykorzystująca punkty przywracania Transakcja niejawna – zaczynana przez operację modyfikującą, ale wymagającą „ręcznego” zatwierdzenia prze COMMIT TRAN Transakcja rozproszona – wykonywana na więcej niż jednym serwerze (protokół 2PC) Transakcja autonomiczna – transakcja zagnieżdżona, ale z możliwością niezależnego wycofania
Demo – system magazynowy Specyfikacja Stan magazynu zmieniany kolejno numerowanymi dokumentami przychodu i rozchodu Jeden towar tylko raz na dokument (na 1 pozycji) Kontrola stanu (bez stanów ujemnych) Szybki dostęp do sumarycznej ilości sztuk na dowodzie Możliwość realizacji zamówień z zewnętrznego systemu dokumentami rozchodowymi z zachowaniem powiązania z zamówieniem
Podsumowanie Transakcje w SQL Server wymagają obsługi To programista SQL ma kontrolować błędy Zagnieżdżanie transakcji Ograniczone zaufanie do uruchamiającego nasze transakcyjne procedury Ograniczone zaufanie do @@TRANCOUNT Tryb IMPLICIT_TRANSACTIONS wymaga innego kodu SAVE TRAN – dobrze nazywać savepointy Istnieje czasem trzecia droga Transakcje autonomiczne mogą się przydać Nie ma bezpośredniej obsługi w SQL Server
Pytania? ???