Ustaw poziom izolacji transakcji (Transact-SQL)

Kontroluje zachowanie versioning blokowania i wiersz z Transact-SQL sprawozdania wydane przez połączenia z SQL Server.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • ODCZYT NIEPRZEKAZANY
    Określa, że sprawozdania mogą odczytywać wiersze, które zostały zmodyfikowane przez inne transakcje, ale nie zostały jeszcze zatwierdzone.

    Transakcje uruchomione na odczyt NIEPRZEKAZANY poziom nie wydają blokady współużytkowane, aby zapobiec innymi transakcjami modyfikację dane odczytane przez bieżącej transakcji.ODCZYTAĆ NIEZAKOŃCZONE transakcje nie są również zablokowane przez wyłącznych blokad, które uniemożliwiają bieżącej transakcji z wierszy, które są modyfikowane, ale nie popełnionych przez inne transakcje do czytania.Ta opcja jest zestaw, to Odczyt nieprzekazany modyfikacji, które są nazywane odczyt niezatwierdzonych danych.Można zmienić wartości w danych i wierszy można pojawiają się lub znikał w zestaw danych przed zakończeniem transakcji.Ta opcja działa tak samo jak ustawienie NOLOCK na wszystkie tabele do wszystkich instrukcji SELECT w transakcji.Jest najmniej restrykcyjne poziomów izolacji.

    W SQL Server, można również zminimalizować blokowania rywalizacja , chroniąc z dirty odczytuje dane nieprzekazane zmiany przy użyciu jednej transakcji:

    • Przeczytaj POPEŁNIONYCH poziom izolacji z READ_COMMITTED_SNAPSHOT bazy danych, opcja zestaw na.

    • MIGAWKA poziom izolacji.

  • ODCZYT PRZEKAZANY
    Określa, że sprawozdania nie może odczytać dane, które zostały zmodyfikowane, ale nie popełnionych przez inne transakcje.Zapobiega to odczyt niezatwierdzonych danych.Dane mogą być zmieniane przez inne transakcje między poszczególne instrukcje bieżącej transakcji odczytuje nonrepeatable lub fantomu danych.Opcja ta jest SQL Server domyślnym.

    Zachowanie ODCZYTAĆ POPEŁNIONYCH zależy od ustawień opcji bazy danych READ_COMMITTED_SNAPSHOT:

    • Jeśli READ_COMMITTED_SNAPSHOT jest zestaw na OFF (ustawienie domyślne), Aparat baz danych używane są blokady współużytkowane, aby zapobiec innymi transakcjami z modyfikacji wierszy bieżąca transakcja jest uruchomiona operacja odczytu.Udostępnionego blokuje również blok instrukcja odczytywanie zmodyfikowane przez inne transakcje, aż do zakończenia transakcji innych wierszy.Typ udostępnionych blokada Określa, kiedy zostaną zwolnione.Blokady wiersza są zwalniane przed przetworzeniem następnego wiersza.Blokady strony są zwalniane po następnej strona jest odczytywany i blokady tabela są zwalniane po zakończeniu wykonywania instrukcja .

      Ostrzeżenie

      W SQL Server 2008 R2, dostęp do systemu plików z danymi FILESTREAM następuje ustawienie bazy danych izolacji READ_COMMITTED_SNAPSHOT.

      Jeśli READ_COMMITTED_SNAPSHOT jest zestaw na, Aparat baz danych używa wierszy versioning zaprezentować każda instrukcja transakcyjnie spójne migawka danych jako istniał w chwili rozpoczęcia instrukcja.Blokady nie są używane do ochrony danych od aktualizacji przez inne transakcje.

    Gdy opcja bazy danych READ_COMMITTED_SNAPSHOT jest włączone, można użyć wskazówki tabela READCOMMITTEDLOCK na żądanie blokowania udostępniony zamiast wersji wiersza dla poszczególnych sprawozdań w transakcjach uruchomiony na odczyt POPEŁNIONYCH poziom izolacji.

    Ostrzeżenie

    Gdy zostanie zestaw opcja READ_COMMITTED_SNAPSHOT, połączenia, wykonywanie polecenia ZMIEŃ bazę danych jest dozwolone w bazie danych.Do czasu zakończenia ZMIEŃ bazę danych, musi być nie Otwieranie połączenia bazy danych.Baza danych nie ma być w tryb jednego użytkownika.

  • ODCZYT POWTARZALNY
    Określa, że sprawozdania nie może odczytać dane, które zostały zmodyfikowane, ale nie zostały jeszcze zatwierdzone przez inne transakcje i że żadne transakcje można zmodyfikować danych, która została przeczytana przez bieżącą transakcję do zakończenia bieżącej transakcji.

    Blokady współużytkowane są umieszczane na wszystkie dane odczytane przez każdej instrukcja w transakcji i są przechowywane aż do jej zakończenia.Zapobiega to inne transakcje modyfikację wszystkie wiersze, które zostały przeczytane przez bieżącej transakcji.Inne transakcje można wstawić nowe wiersze spełniające warunki wyszukiwania sprawozdania wydane przez bieżącej transakcji.Następnie bieżącej transakcji prób instrukcja skopiuje na nowe wiersze, którego wyniki fantomu odczytów.Ponieważ blokady współużytkowane są utrzymywane na koniec transakcji zamiast opublikowanej na końcu każdej instrukcja, współbieżność jest niższa niż domyślny ODCZYTAĆ POPEŁNIONYCH poziom izolacji.Użyj tej opcji tylko wtedy, gdy jest to konieczne.

  • MIGAWKI
    Określa, że dane odczytane przez każdy instrukcja w transakcji będzie transakcyjnie spójne wersja danych, które istniały w momencie rozpoczęcia transakcji.Transakcja rozpoznają modyfikacji danych, które zostały popełnione przed rozpoczęciem transakcji.Modyfikacji danych wprowadzonych przez innych transakcji po rozpoczęciu bieżącej transakcji nie są widoczne instrukcje wykonywane w bieżącej transakcji.Efekt jest, jak w przypadku oświadczeń w transakcji uzyskać migawka danych popełnione istniał w momencie rozpoczęcia transakcji.

    Z wyjątkiem przypadków, gdy baza danych jest odzyskiwana transakcji SNAPSHOT żąda blokady podczas odczytywania danych.Transakcji SNAPSHOT czytania danych do blok inne transakcje z zapisu danych.Transakcje zapisu danych do blok transakcji SNAPSHOT z odczytywania danych.

    Podczas fazy wycofanie bazy danych odzyskiwanietransakcji SNAPSHOT będzie żądał blokada , jeśli próby odczytu danych, który jest zablokowany przez inną transakcję, która jest przywracana jest.Transakcja MIGAWKI jest blokowany do chwili, że transakcja została wycofana.blokada jest zwalniana bezpośrednio po zostały przyznane.

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

    Transakcji nie można zestaw MIGAWKI poziom izolacji uruchomiony przy użyciu innego poziom izolacji; spowodowałoby przerwanie transakcji.Jeśli transakcja uruchamia się w MIGAWCE poziom izolacji, można zmienić na inny poziom izolacji , a następnie z powrotem do MIGAWKI.Transakcja rozpoczyna się pierwszy czas uzyskuje dostęp do danych.

    Transakcji w MIGAWCE poziom izolacji można wyświetlić zmiany wprowadzone w tej transakcji.Na przykład jeśli transakcji wykonuje AKTUALIZACJĘ tabela i wystawia instrukcja SELECT wobec tej samej tabela, zmodyfikowane dane zostaną uwzględnione w zestaw wyników.

    Ostrzeżenie

    W obszarze migawka izolacji FILESTREAM danych jest przedstawiony na początku transakcji nie Transact-SQL instrukcja.

  • MOŻLIWY DO SERIALIZACJI
    Określa:

    • Oświadczenia nie może odczytać dane, które zostały zmodyfikowane, ale nie zostały jeszcze zatwierdzone przez inne transakcje.

    • Brak transakcji można zmodyfikować danych, która została przeczytana przez bieżącą transakcję do zakończenia bieżącej transakcji.

    • Inne transakcje nie może wstawić nowe wiersze z wartości klucz , które podlegałyby w zakres klucze odczytywane przez wszystkich instrukcji w bieżącej transakcji, dopóki nie zakończy się bieżąca transakcja.

    Zakres blokady są umieszczane w zakres wartości klucz , spełniające warunki wyszukiwania każda instrukcja wykonywana w transakcji.Blokuje inne transakcje z aktualizacji lub wstawieniu wszystkie wiersze, które kwalifikowałyby się wszelkich instrukcje wykonywane przez bieżącą transakcję.Oznacza to, że jeśli żadnych instrukcji w transakcji są wykonywane drugi czasone odczyta ten sam zestaw wierszy.Blokady zakres są aktywne aż do jej zakończenia.Jest to najbardziej restrykcyjne poziomów izolacji, ponieważ blokuje cały zakresów kluczy i przechowuje blokad, aż do jej zakończenia.Ponieważ współbieżność jest niższa, użyj tej opcji tylko wtedy, gdy jest to konieczne.Ta opcja działa tak samo jak ustawienie HOLDLOCK na wszystkie tabele do wszystkich instrukcji SELECT w transakcji.

Uwagi

Tylko jedną z opcji poziom izolacji może być zestaw na czasi pozostaje zestaw dla tego połączenia, dopóki nie zostanie jednoznacznie zmieniony.Wszystkie operacje odczytu wykonywane w obrębie transakcji działają na podstawie reguł dla określonego poziom izolacji chyba że wskazówka tabela w klauzula FROM instrukcja określa różne zachowanie blokowania lub przechowywania wersji w tabela.

Poziomów izolacji transakcji zdefiniować typ blokad nabyte w operacji odczytu.Współużytkowane blokady nabyte zatwierdzeniu odczytu lub odczyt POWTARZALNY są ogólnie blokad wiersza, chociaż blokad wiersza można przekazany do strona lub tabela blokad, jeżeli znaczna liczba wierszy w tabela lub strona odwołuje się odczyt.Jeśli wiersz został zmodyfikowany w transakcji po zostały przeczytane, transakcji nabywa blokada na wyłączność , aby chronić tego wiersza i blokada na wyłączność jest zachowywane aż do jej zakończenia.Na przykład jeżeli odczyt POWTARZALNY transakcji zostało udostępnione blokada na wiersz i transakcji a następnie modyfikuje wiersz, wierszu udostępnionym blokada jest konwertowany na wiersz wyłącznej blokada.

Z jednym wyjątkiem można przełączać z jednego poziom izolacji do innego w dowolnym czas podczas transakcji.Wyjątek występuje, gdy zmiana z dowolnym poziom izolacji izolacji MIGAWKI.W ten sposób powoduje, że transakcja nie powiedzie się i wycofać.Można jednak zmienić transakcji rozpoczętych w izolacji MIGAWKI wszelkich innych, poziom izolacji.

Po zmianie transakcji z jednego poziom izolacji do innego, zasoby, które są odczytywane po zmianie są chronione zgodnie z zasadami nowy poziom.Zasoby, które są odczytywane przed zmianą nadal chronione zgodnie z przepisami poprzedniego poziom.Na przykład jeśli transakcji zmienił się od odczytu POPEŁNIONYCH SERIALIZABLE, blokady współużytkowane nabytych po zmianie teraz są przechowywane aż do zakończenia transakcji.

Wydawanie Ustaw poziom izolacji transakcji w procedura składowana lub wyzwalacza, gdy obiekt zwraca sterowanie poziom izolacji powoduje zresetowanie do poziom obowiązywać, gdy obiekt został wywołany.Na przykład jeśli następnie zestaw odczyt POWTARZALNY w partiai partia wywołuje ustawia poziom izolacji SERIALIZABLE procedura składowana , ustawienie poziom izolacji powraca do odczytu POWTARZALNYCH podczas procedura składowana zwraca sterowanie do partia.

Ostrzeżenie

Funkcje zdefiniowane przez użytkownika i plików wykonywalnych języka wspólnego (CLR) zdefiniowane przez użytkownika typów nie może wykonać Ustaw poziom izolacji transakcji.Można jednak zastąpić poziom izolacji przy użyciu Wskazówka tabela .Aby uzyskać więcej informacji, zobacz Wskazówki tabel (Transact-SQL).

Podczas korzystania z sp_bindsession powiązać dwie sesje każdej sesja zachowuje jego ustawienie poziom izolacji .Aby zmienić ustawienie poziom izolacji jednej sesja za pomocą USTAWIĆ poziom izolacji transakcji nie wpływa na ustawienia innych sesji związane.

Ustaw poziom izolacji transakcji staje się skuteczne wykonać lub czaswykonywania i nie w analizy czas.

Zoptymalizowane ładowanie zbiorcze operacji na stert blok kwerend, które są uruchomione na następujące poziomy izolacji:

  • MIGAWKI

  • ODCZYT NIEPRZEKAZANY

  • Przeczytaj POPEŁNIONYCH przy użyciu wersji wierszy

I odwrotnie kwerendy, uruchamiane w tych poziomów izolacji blok zoptymalizowane ładowanie zbiorcze stert operacji.Aby uzyskać więcej informacji dotyczących operacji ładowanie zbiorcze , zobacz Dotyczące importu zbiorczego i operacji wywozowych luzem i Optymalizacja wydajności importu zbiorczego.

Włączone FILESTREAM bazy danych obsługują następujących poziomów izolacji transakcji.

poziomizolacji

Transact SQL dostępu

Dostęp do systemu plików

Odczyt nieprzekazany

SQL Server 2008

Nieobsługiwana

Odczyt przekazany

SQL Server 2008

SQL Server 2008

Odczyt powtarzalny

SQL Server 2008

Nieobsługiwana

Searializable

SQL Server 2008

Nieobsługiwana

Odczyt popełnionych migawka

SQL Server 2008 R2

SQL Server 2008 R2

Migawki

SQL Server 2008 R2

SQL Server 2008 R2

Przykłady

Następujący przykład zestawy TRANSACTION ISOLATION LEVEL dla sesja.Dla każdego Transact-SQL instrukcja znajdujący się SQL Server posiada wszystkie blokady współużytkowane do czasu zakończenia transakcji.

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