100 likes | 247 Views
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.
E N D
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, MVPSQL 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? • ???