SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

Kontroluje blokowanie wierszy i zarządzanie wersjami zachowania Transact-SQL instrukcje wydany przez połączenie SQL Server.

Topic link iconKonwencje składni języka Transact-SQL

SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
[ ; ]

Argumenty

  • PRZECZYTAJ NIEZAKOŃCZONE
    Określa, że instrukcje można znaleźć wiersze, które zostały zmodyfikowane przez inne transakcje, ale nie zostały jeszcze zatwierdzone.

    Używany poziom READ NIEZAKOŃCZONE transakcje nie wydają udostępnionego blokad zapobiec inne transakcje modyfikację danych odczytywane przez bieżącej transakcji.READ NIEZAKOŃCZONE transakcje również nie są blokowane przez wyłącznej blokady uniemożliwiających bieżącej transakcji z wierszy, które zostały zmodyfikowane, ale nie zostały zatwierdzone przez inne transakcje do czytania.Gdy ta opcja jest zestaw, jest możliwe do odczytania nieprzydzielonych modyfikacji, które są określane jako zanieczyszczony odczytów.Można zmienić wartości w danych i wierszy można pojawiają się lub znika zestaw danych przed zakończeniem transakcji.Opcja ta działa tak samo jak opcja NOLOCK na wszystkich tabelach wszystkich instrukcji SELECT w transakcji.Jest to najmniej restrykcyjny poziom izolacji.

    W SQL Server, można także zminimalizować blokowania rywalizacji przy jednoczesnej ochronie transakcji z zabrudzony odczytów modyfikacji nieprzydzielonych danych za pomocą:

    • Poziom izolacji odczytu POPEŁNIONEGO przy użyciu opcji bazy danych READ_COMMITTED_SNAPSHOT zestaw on.

    • Poziom izolacji migawka.

  • PRZECZYTAJ ZADEKLAROWANEJ
    Określa, że instrukcji nie można odczytać danych, która została zmodyfikowana, ale nie dokonanych przez inne transakcje.Dzięki temu odczytów zabrudzony.Dane mogą być zmieniane przez inne transakcje między poszczególne instrukcje dla bieżącej transakcji, co nonrepeatable operacje odczytu i fantomu danych.Ta opcja jest SQL Server Domyślnie.

    Zachowanie odczytu POPEŁNIONYCH zależy od opcji READ_COMMITTED_SNAPSHOT bazy danych:

    • Jeśli jest READ_COMMITTED_SNAPSHOT zestaw do OFF (ustawienie domyślne), Database Engine zastosowanie udostępnione blokady, aby zapobiec inne transakcje modyfikację wierszy, bieżąca transakcja jest uruchomiona operacja odczytu. Również udostępnione blokad blok instrukcja z odczytywania zmodyfikowane przez inne transakcje, aż do zakończenia transakcji innych wierszy.Typ blokada udostępnionego Określa, kiedy zostanie wydana.Wiersz blokady są zwalniane przed przetworzeniem następnego wiersza.Blokady strona są zwalniane po następnej strona jest do odczytu i blokady tabela są zwalniane po zakończeniu wykonywania instrukcja.

    • Jeśli jest READ_COMMITTED_SNAPSHOT zestaw on, Database Engine używa wersji wiersza do przedstawienia każdej instrukcja z transakcyjnie spójne migawka danych, jak go istniały na początku instrukcja. Blokady nie są używane do ochrony danych za pomocą aktualizacji przez inne transakcje.

    Gdy opcja READ_COMMITTED_SNAPSHOT bazy danych jest włączone, można użyć wskazówki tabela READCOMMITTEDLOCK, żądania blokowania udostępniony zamiast przechowywania wersji wiersza dla poszczególnych instrukcji w transakcji używany jest poziom izolacji odczytu zatwierdzone.

    Uwaga

    Gdy użytkownik zestaw opcja READ_COMMITTED_SNAPSHOT połączenia, wykonywanie polecenia ALTER DATABASE jest dozwolona w bazie danych.Musi istnieć nie inne otwarte połączenie bazy danych, aż do zakończenia ALTER DATABASE.Baza danych nie ma być tryb jednego użytkownika.

  • ODCZYT POWTARZALNY
    Określa, że instrukcji nie można odczytać danych, która została zmodyfikowana, ale nie zostały jeszcze zatwierdzone przez inne transakcje i że żadne inne transakcje nie mogą modyfikować danych, która została przeczytana przez bieżącej transakcji, dopóki nie zakończy się bieżąca transakcja.

    Blokady udostępnionego są umieszczane na wszystkich danych odczytywane przez każdej instrukcja w transakcji i są przechowywane do zakończenia transakcji.Dzięki temu inne transakcje modyfikację wszystkie wiersze, które zostały przeczytane przez bieżącej transakcji.Inne transakcje można wstawić nowe wiersze, które są zgodne z warunkami wyszukiwania instrukcji wydany przez bieżącej transakcji.Jeśli bieżąca transakcja następnie ponawia próbę instrukcja go pobierze nowe wiersze, które powoduje fantomu odczytów.Ponieważ udostępnione blokady przechowywane są na końcu transakcji zamiast opublikowanej na końcu każdej instrukcja, współbieżność jest niższa niż domyślny poziom izolacji odczytu zatwierdzone.Użyj tej opcji tylko wtedy, gdy jest to konieczne.

  • migawka
    Określa, że dane odczytane przez każdy instrukcję w transakcji będzie transakcyjnie spójne wersja danych, w jakim się znajdował w chwili rozpoczęcia transakcji.Transakcja może rozpoznawać tylko modyfikacji danych, które zostały zatwierdzone przed rozpoczęciem transakcji.Zmiany danych dokonane przez innych transakcji po rozpoczęciu bieżącej transakcji nie są widoczne dla instrukcji w bieżącej transakcji.Efekt ten jest tak, jakby instrukcji w transakcji uzyskać migawkę danych zadeklarowanej go istniały w momencie rozpoczęcia transakcji.

    Kiedy jest jest odzyskanie bazy danych, z wyjątkiem transakcji migawka nie Żądaj blokad podczas odczytywania danych.Transakcje migawka odczytywania danych nie blok inne transakcje z zapisu danych.Transakcje zapisu danych nie należy blokować migawka transakcje z odczytywania danych.

    Podczas fazy wycofania odzyskiwanie bazy danych migawka transakcji będzie żądał blokada, jeśli próby odczytu danych, który jest zablokowany przez inną transakcję, która jest przywracana jest.Transakcji migawka jest zablokowana aż do, że transakcja została wycofana.Blokada jest zwalniana, natychmiast po zostało przyznane.

    Opcja ALLOW_SNAPSHOT_ISOLATION bazy danych musi być zestaw on przed rozpoczęciem transakcji, która używa poziom izolacji migawka.Jeśli przy użyciu transakcji poziom izolacji migawka uzyskuje dostęp do danych w wielu baz danych ALLOW_SNAPSHOT_ISOLATION musi być ustawiony na ON w każdej bazy danych.

    Transakcji nie zestaw poziom izolacji migawka, uruchomiony przy użyciu innego poziomu izolacji, to tak spowoduje przerwanie transakcji.Jeżeli transakcja zostanie uruchomiony poziomu izolacji migawka, można ją zmienić na inny poziom izolacji, a następnie z powrotem do migawka.Transakcja jest uruchamiany przy pierwszym czas uzyskuje dostęp do danych.

    W migawka poziom izolacji transakcji można wyświetlić zmiany wprowadzone przez tę transakcję.Na przykład jeśli transakcji wykonuje AKTUALIZACJĘ do tabela, a następnie wystawia instrukcja SELECT wobec tej samej tabela, zmodyfikowane dane mają zostać uwzględnione zestaw wyników.

  • MOŻLIWY DO SERIALIZACJI
    Określa:

    • Instrukcje nie można odczytać danych, która została zmodyfikowana, ale nie zostały jeszcze zatwierdzone przez inne transakcje.

    • Żadne inne transakcje nie mogą modyfikować danych, która została przeczytana przez bieżącej transakcji, dopóki nie zakończy się bieżąca transakcja.

    • Inne transakcje nie może wstawić nowe wiersze z wartości klucz, które mogłyby mieszczą się w zakresie klucze odczytu przez dowolnego wyrażenia w bieżącej transakcji, dopóki nie zakończy się bieżąca transakcja.

    Zakres blokady są umieszczane w zakresie wartości kluczy, które są zgodne z warunkami wyszukiwania poszczególnych instrukcja wykonywane w ramach transakcji.To blokuje innych transakcji z aktualizacji lub wstawieniu wszystkie wiersze, które mogłyby kwalifikują się do żadnych instrukcji, wykonane w bieżącej transakcji.Oznacza to, że jeśli żadnych instrukcji w transakcji są wykonywane drugi czas, będą one odczytać tego samego zestawu wierszy.Blokady zakres są przetrzymywane do zakończenia transakcji.Jest to najbardziej restrykcyjne poziomów izolacji, ponieważ blokuje cały zakresów kluczy i przechowuje blokady do zakończenia transakcji.Użyj tej opcji tylko wtedy, gdy jest to konieczne, ponieważ współbieżność jest niższa.Opcja ta działa tak samo jak opcja HOLDLOCK na wszystkich tabelach wszystkich instrukcji SELECT w transakcji.

Remarks

zestaw tylko jedną z opcji poziomu izolacji na czas, i pozostaje on ustawiony dla tego połączenia, dopóki nie zostanie jednoznacznie zmieniony.Czytanie wszystkich operacji wykonywanych w obrębie transakcji działają na podstawie reguły określonej poziom izolacji chyba że wskazówki tabela w klauzula FROM instrukcja określa różne zachowania blokowania lub przechowywanie wersji dla tabela.

Poziomów izolacji transakcji definiują typ blokad nabyte w operacji odczytu.Udostępnione blokad nabytych dla się READ lub POWTARZALNE READ są zazwyczaj blokady wiersza, chociaż blokad wiersz może być przekazany do blokad strona lub tabela, jeśli znaczna liczba wierszy strona lub w tabela są odwołują się do odczytu.Jeśli wiersz zostanie zmodyfikowany w transakcji po została przeczytana, transakcja nabywa blokada na wyłączność do ochrony tego wiersza, a blokada na wyłączność zostanie zachowane do zakończenia transakcji.Na przykład jeśli transakcja odczyt POWTARZALNY ma blokada współdzielona w wierszu, a następnie transakcji modyfikuje wiersz, blokada współdzielona wiersza jest konwertowany na blokada wyłączności wiersza.

Poza jednym wyjątkiem, można przełączać z jednego poziomu izolacji do drugiego w dowolnym czas podczas transakcji.Wyjątek występuje przy zmianie z dowolnego poziom izolacji izolacji migawka.W ten sposób powoduje, że transakcja nie powiedzie się i przywracania.Jednak można zmienić uruchamiany oddzielnie migawka na inny poziom izolacji transakcji.

Zmiana transakcji z jednego poziom izolacji do innego, zasoby, które są odczytywane po zmianie są zabezpieczone zgodnie z regułami nowy poziom.Zasoby, które są odczytywane przed zmianą nadal być chronione zgodnie z regułami poprzedniego poziom.Na przykład transakcja zmieniony z odczytu ZATWIERDZONA na SERIALIZABLE, udostępnionych blokad uzyskane po zmianie teraz są przechowywane aż do zakończenia transakcji.

Jeżeli zostanie wydane zestaw poziom izolacji transakcji w procedurze przechowywanej lub wyzwalacza, jeśli obiekt sterowanie poziom izolacji jest ustawiany na poziom obowiązują podczas obiektu.Na przykład jeśli ustawiony odczyt POWTARZALNY partia i partia następnie wywołuje procedurę przechowywaną, która ustawia poziom izolacji SERIALIZABLE, ustawienie poziomu izolacji przywraca odczyt POWTARZALNY, gdy procedura przechowywana zwraca sterowanie do partia.

Uwaga

Funkcje zdefiniowane przez użytkownika i standardowe typy języka (CLR) w czasie wykonywania przez użytkownika nie można wykonać zestaw poziom izolacji transakcji.Użytkownik może jednak zmienić poziom izolacji przy użyciu wskazówkę dotyczącą tabela.Aby uzyskać więcej informacji zobaczWskazówki do tabela (języka Transact-SQL).

Kiedy używać sp_bindsession powiązać dwie sesje, każdej sesja zachowuje jego ustawienie poziom izolacji.Za pomocą zestaw poziom izolacji transakcji izolacji zmienić ustawienie poziomu z jednej sesja nie ma wpływu na ustawienia innych sesja, związany z nim.

POZIOM izolacji TRANSACTION zestaw zostanie uwzględniona w wykonać lub w czasie wykonywania, a nie w czasie analizowania.

Zoptymalizowane ładowanie zbiorcze operacji na hałd blok kwerendy, na których są uruchomione na następujące poziomy izolacji:

  • migawka

  • PRZECZYTAJ NIEZAKOŃCZONE

  • READ POPEŁNIONEGO przy użyciu wersji wiersza

I odwrotnie, kwerendy, która uruchamiana te blok poziomy izolacji zoptymalizowane ładowanie zbiorcze operacji na hałd.Aby uzyskać więcej informacji na temat zbiorczej operacji ładowania zobacz About Bulk Import and Bulk Export Operations i Optimizing Bulk Import Performance.

Przykłady

Następujące zestawy przykład TRANSACTION ISOLATION LEVEL dla tej sesja. Dla każdego Transact-SQL Instrukcja poniżej, SQL Server zawiera wszystkie udostępnione blokady do zakończenia transakcji.

USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
GO
SELECT * 
    FROM HumanResources.EmployeePayHistory;
GO
SELECT * 
    FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO