Udostępnij za pośrednictwem


Za pomocą wiersza oparte na wersji poziomy izolacji

The row versioning framework is always enabled in Microsoft SQL Server, and is used by multiple features.Oprócz dostarczania poziomów izolacji na przechowywanie wersji wiersza, jest używany do obsługi modyfikacji dokonanych w wyzwalaczy i zestawy wielu wyników aktywnej sesji (MARS), a do obsługi danych odczytuje dla operacji ONLINE indeksu.

Poziom izolacji na przechowywanie wersji wiersza są włączone na poziomie 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 wiersza ustawiając opcję bazy danych READ_COMMITTED_SNAPSHOT on, jak pokazano w poniższym przykładzie:

    ALTER DATABASE AdventureWorks
        SET READ_COMMITTED_SNAPSHOT ON;
    

    Jeśli baza danych jest włączona dla READ_COMMITTED_SNAPSHOT, wszystkie kwerendy w wersji wiersza poziom wykorzystania izolacji zadeklarowanej odczytu, co oznacza, że operacje odczytu, nie należy blokować aktualizowanie operacji.

  • Izolacja migawka, ustawiając opcję bazy danych ALLOW_SNAPSHOT_ISOLATION on, jak pokazano w poniższym przykładzie:

    ALTER DATABASE AdventureWorks
        SET ALLOW_SNAPSHOT_ISOLATION ON;
    

    W migawka izolacji transakcji mogą uzyskać dostęp do tabel w bazie danych, które zostały włączone dla migawka.Aby uzyskać dostęp do tabel, które nie zostały włączone dla migawka, należy zmienić poziom izolacji.Na przykład poniższy przykład kodu pokazuje instrukcja SELECT, które łączy dwie tabele uruchomionej w transakcji migawka.Należy jednej tabela do bazy danych, w którym migawka izolacji nie jest włączona.Po instrukcja SELECT zostanie uruchomiona w ramach izolacji migawka, nie może 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 tej samej instrukcja SELECT, która została zmodyfikowana, aby zmienić poziom izolacji transakcji miejsce odczytu.Zmiana taka instrukcja SELECT wykonuje pomyślnie.

    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 o ustawieniu poziom izolacji w aplikacji, zobacz Adjusting Transaction Isolation Levels.

Ograniczenia transakcji za pomocą wiersza poziomy izolacji oparte na wersji

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

  • Nie można włączyć READ_COMMITTED_SNAPSHOT w tempdb, msdb, or wzorzec.

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

    • zestaw opcję bazy danych ALLOW_SNAPSHOT_ISOLATION ON w tempdb.

    • Zmiana poziom izolacji dla sprawozdania, użyj wskazówką izolacji.

  • migawka transakcji nie powiedzie się podczas:

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

    • W przypadku uzyskiwania dostępu do obiektów znajdujących się w wielu bazach danych stan bazy danych był zmieniany w taki sposób, że odzyskiwanie bazy danych miało miejsce po rozpoczęciu transakcji migawki, ale zanim transakcja migawki uzyskała dostęp do bazy danych.Na przykład dla bazy danych został ustawiony stan OFFLINE, a następnie ONLINE, baza danych została automatycznie zamknięta i otwarta albo baza danych została odłączona i dołączona.

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

  • SQL Server nie przechowuje wiele wersji systemu metadane.Instrukcje języka (DDL) definicja danych do tabel i innych obiektów bazy danych (indeksy, widoki, typy danych, procedur przechowywanych i funkcji plików wykonywalnych języka wspólnego) Zmiana metadane.Jeśli instrukcja DDL modyfikuje obiektu, wszelkie równoczesnych odwołanie do obiektu, w obszarze izolacji migawka powoduje, że transakcja migawka kończy się niepowodzeniem.Transakcje zatwierdzone Odczyt nie jest to ograniczenie READ_COMMITTED_SNAPSHOT opcję bazy danych jest włączone.

    Na przykład administrator bazy danych jest wykonywany w następującej instrukcja ALTER indeks.

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

    Każdą transakcję migawka, która jest aktywne po wykonaniu instrukcja ALTER INDEX otrzymuje błąd, jeśli podejmowana jest próba odwołania HumanResources.Employee Tabela po wykonaniu instrukcja ALTER INDEX. Transakcje zatwierdzone do odczytu, przy użyciu wersji wiersza nie są zagrożone.

    Uwaga

    BULK INSERT operacji może spowodować zmiany do tabela metadane (na przykład wyłączenie kontroli ograniczenia).W takim przypadku równoczesnych migawka izolacji transakcji dostęp do masowego wstawiony tabel nie powiodło się.