Wiersz wersji na podstawie poziomów izolacji

Ramy kontroli wersji wiersza jest zawsze włączona w SQL Serveri jest używany przez wiele funkcji.Oprócz dostarczania poziomów izolacji oparte na wersji wiersza, jest używany do obsługi modyfikacji dokonanych w wyzwalaczy zestawy wielu wyników aktywne sesje (MARS) i do obsługi danych odczytuje dla operacji ONLINE indeksu.

Poziomów izolacji oparte na wersji wiersza są włączone poziom bazy danych.Wszelkie obiekty dostępu do aplikacji z obsługą baz danych można uruchomić kwerendy przy użyciu następujących poziomów izolacji:

  • Zatwierdzone odczytu używający wersji wierszy przez ustawienie READ_COMMITTED_SNAPSHOT opcję bazy danych, aby ON jak pokazano w poniższym przykładzie:

    ALTER DATABASE AdventureWorks2008R2
        SET READ_COMMITTED_SNAPSHOT ON;
    

    Kiedy baza danych jest włączona dla READ_COMMITTED_SNAPSHOT, wszystkie kwerendy w Odczyt przekazany poziom izolacji użyć wersji wiersza, co oznacza, że odczytać operacji należy blokować operacji aktualizacji.

  • Migawkę izolacji przez ustawienie ALLOW_SNAPSHOT_ISOLATION opcję bazy danych, aby ON jak pokazano w poniższym przykładzie:

    ALTER DATABASE AdventureWorks2008R2
        SET ALLOW_SNAPSHOT_ISOLATION ON;
    

    migawka izolacji transakcji można uzyskać dostęp do tabel w bazie danych, które zostały włączone do migawka.Dostęp do tabel, które nie zostały włączone do migawka, należy zmienić poziom izolacji.Na przykład, następujący kod ilustruje przykład SELECT instrukcja, która łączy dwie tabele uruchomionej w transakcji migawka.Jedna tabela należy do bazy danych, w którym nie jest włączone migawka izolacji.Gdy SELECT instrukcja uruchamiana izolacji migawka, nie jest on wykonać pomyślnie.

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
    BEGIN TRAN
        SELECT t1.col5, t2.col5
            FROM Table1 as t1
            INNER JOIN SecondDB.dbo.Table2 as t2
                ON t1.col1 = t2.col2;
    

    Poniższy przykład kodu pokazuje taki sam SELECT instrukcja, która została zmodyfikowana, aby zmienić poziom izolacji transakcji do popełnionych odczytu.Zmiana taka SELECT pomyślnie wykonywania instrukcja.

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
    BEGIN TRAN
        SELECT t1.col5, t2.col5
            FROM Table1 as t1
            WITH (READCOMMITTED)
            INNER JOIN SecondDB.dbo.Table2 as t2
                ON t1.col1 = t2.col2;
    

Aby uzyskać więcej informacji dotyczących sposobu zestaw poziom izolacji aplikacji, zobacz Dopasowywanie poziomów izolacji transakcji.

Ograniczenia transakcji za pomocą wiersza poziomów izolacji systemem kontroli wersji

Podczas pracy z poziomów izolacji oparte na wersji wiersza, należy wziąć pod uwagę następujące ograniczenia:

  • READ_COMMITTED_SNAPSHOT nie może być włączone w tempdb, msdb, lub master.

  • Globalne tabele tymczasowe są przechowywane w tempdb.Podczas uzyskiwania dostępu do globalnych tabel tymczasowych wewnątrz transakcji migawka, musi zdarzyć jedną z następujących czynności:

    • Ustawić opcję bazy danych ALLOW_SNAPSHOT_ISOLATION tempdb.

    • Aby zmienić poziom izolacji dla instrukcja, należy użyć wskazówką izolacji.

  • Transakcji Snapshot niepowodzenie, gdy:

    • Baza danych jest wykonywana tylko do odczytu po rozpoczęciu transakcji migawka, ale przed transakcji migawka uzyskuje dostęp do bazy danych.

    • Jeśli dostęp do obiektów z wielu baz danych, stanu bazy danych został zmieniony w taki sposób, że odzyskiwanie bazy danych wystąpił po rozpoczęciu transakcji migawka, ale przed transakcji migawka uzyskuje dostęp do bazy danych.Na przykład: Baza danych została zestaw do trybu OFFLINE, a następnie do trybu ONLINE, autoclose i otwieranie bazy danych lub baza danych Odłączanie i dołączanie.

  • Transakcje rozproszone, łącznie z wysyłaniem kwerend rozproszonych podzielonym na partycje baz danych, nie są obsługiwane w izolacji migawka.

  • SQL Server nie przechowuje wiele wersji systemu metadane.Instrukcje języka (DDL) definicji danych na tabele i inne obiekty bazy danych (indeksy, widoki, typy danych, procedur przechowywanych i typowe funkcje obsługi języka) zmiany metadane.Jeśli instrukcja DDL modyfikuje obiektu, wszelkie równoczesnych odwołanie do obiektu w izolacji migawka powoduje transakcji migawka nie powiedzie się.Popełnione odczytu transakcje nie mają tego ograniczenia, gdy opcja READ_COMMITTED_SNAPSHOT bazy danych jest na.

    Na przykład, administrator bazy danych wykonuje następujące ALTER INDEX instrukcja.

    USE AdventureWorks2008R2;
    GO
    ALTER INDEX AK_Employee_LoginID
        ON HumanResources.Employee REBUILD;
    GO
    

    Dowolny migawka transakcji, który jest aktywny, gdy ALTER INDEX wykonaniu instrukcja otrzymuje błąd, jeśli próbuje odwołać HumanResources.Employee tabela po ALTER INDEX wykonaniu instrukcja.Transakcje zatwierdzone odczytu przy użyciu wersji wiersza nie są zagrożone.

    Ostrzeżenie

    WSTAW luzem operacji może spowodować zmiany miejsce docelowe metadane tabela (na przykład wyłączenie ograniczenia kontroli).W takim przypadku równoczesnych migawka izolacji transakcji dostęp do luzem dodaje się tabele błędów.