2009-08-13 11 views
9

Byłem sortowaniu cały zagnieżdżony rzecz transakcji w serwerze SQL, a ja błyszczały te bryłki zrozumienia zachowanie zagnieżdżonych trans':SQL Server 2005: Dlaczego transakcje nazw?

  • Kiedy zagnieżdżanie transakcji, tylko oddalonych popełnienia rzeczywiście commit.
  • „Commit Trans txn_name”, gdy zagnieżdżone , zawsze stosuje się do najgłębszej transakcji, nawet jeśli txn_name odnosi do transakcji zewnętrznej.
  • "ROLLBACK TRAN" (bez nazwy), nawet w przypadku transakcji wewnętrznej, wycofa wszystkie transakcje o .
  • "ROLLBACK TRAN txn_name" - txn_name musi odnoszą się do najbardziej zewnętrznej nazwy TXn. Jeśli nie, to się nie powiedzie.

Czy są jakieś korzyści z nazewnictwa transakcji? Nie możesz go użyć do celowania w konkretną transzę, albo do zatwierdzenia lub wycofania. Czy służy wyłącznie do komentowania kodu?

Dzięki,

Yoni

+0

Jeszcze jeden powód, nie warto odpowiedź IMO, jest [tutaj] (http://www.sqlskills.com/blogs/paul/code-to-show-rolled-back-transactions-after-a-crash/). –

Odpowiedz

2

Można mieć procedury wycofywania tylko swoją pracę w przypadku błędu, dzięki czemu rozmówca zdecydować pogoda porzucić całą transakcję lub odzyskać i spróbuj alternatywną ścieżkę. Zobacz Exception handling and nested transactions dla szablonu procedury, który pozwala na to zachowanie atomowe.

+1

Naprawdę? Ale dokument mówi, że nie można przywrócić wewnętrznej zagnieżdżonej transakcji, można jedynie wycofać zewnętrzną transakcję. Nie kwestionuję cię, ponieważ nie próbowałem tego, jestem po prostu ciekawy, jak to działa. –

+1

Możesz przywrócić do punktu zapisu. Sądzę, że to nie to samo, co nazwana transakcja, ale myślę, że właśnie o to naprawdę chodzi. –

+1

Remus - Dobry punkt dotyczący punktu zapisu. W przeciwnym razie (jeśli nie korzystasz z punktów zapisu, których obecnie nie mam), nie ma żadnych korzyści? – user144133

0

Chodzi o to, aby przywrócić część swojej pracy, jak zagnieżdżonych transakcji. Nie zawsze działa zgodnie z przeznaczeniem. Przechowywane procedury wykorzystujące obsługę błędów w starym stylu i punkty zapisu może nie działać zgodnie z oczekiwaniami, gdy są używane razem z bloków try ... catch: Avoid mixing old and new styles of error handling.

już omówione tutaj @@ERROR and/or TRY - CATCH

+0

Ale to nie cofa części twojej pracy. Zagnieżdżanie transakcji po prostu zwiększa @@ TRANCOUNT. Wycofanie zagnieżdżonej transakcji wycofuje całą sprawę. Chyba, że ​​mówisz o zapisaniu punktów. –

6

Skutecznie to tylko programiści aide memoire. Jeśli masz do czynienia z Tx, który ma wiele wewnętrznych transakcji, podanie każdej znaczącej nazwy może pomóc ci upewnić się, że transakcje są odpowiednio zagnieżdżone i mogą przechwytywać błędy logiczne.

+2

+1 za "Wspomnienie o aide" –

Powiązane problemy