ПредишенСледващото

1. Прочетете Uncommitted
2. Четене Ангажиран
3. при повторно четене
4. Serializable

нива на изолация са предназначени да осигурят в Едновременността на базата данни правила и последователност на данните. При инсталиране на изолационен слой, множество потребители, работещи и същи набор от данни (същите стойности на данни в колони и редове от таблицата) е настроен за заключване или да следват въз основа на набор от правила, ниво на изолация. По подразбиране, инсталиран изолация Read Ангажиран и това инсталиране оперира в рамките на сесията. Основният принцип е, че сделката за писане винаги блокове четене на сделката, ако те имат изолационни нива над него, с изключение на Read Uncommited. Когато нивото е настроен да прочетете Uncommited, писане сделка не блокира читатели и читателите не блокират записа. По този начин, вие имате възможност да се направи заявка по начин, който ще се изцапаш данни, които не се съхраняват в базата данни, и че принципът на последователността е счупен. Когато е в режим за четене на Ангажиран, можете да прочетете само съхранените данни. Но веднага след като сделката е завършване на процеса на четене на четене на данни, дори и ако сделката на този етап все още не е завършена, тя има заключване няма да попречи на промени в данните. При използване при повторно четене, когато прочетох в една и съща част на данни сделка, същите данни ще се считат за всеки път, когато се появи четене в тази сделка. Ето защо, дори когато четене на данните не се извършва и други операции не могат да променят данните, но той ще бъде в състояние да поставите нови данни в таблица или данни гама, която в този момент не са блокирани. Serializable на ниво още една крачка напред по отношение повторно четене и защитава всички други блокове данни на вложките. Тя се нарича превенция на фантом чете.

По подразбиране тази опция е изключена - OFF. Можете да разберете състоянието на тази опция, като поиска данни от sysdatabase.

Използването Snapshot - изолация ще бъде разрешено (Онтарио), само след като в момента сделките са завършени. До тогава, състоянието на тази опция ще бъде в междинното състояние: Pending_On (или Pending_Off, когато се опитате да изключите опцията). Заедно с ALLOW_SNAPSHOT_ISOLATION опция, можете да зададете READ_COMMITTED_SNAPSHOT вариант на цялата база данни.

Когато READ_COMMITTED_SNAPSHOT опция е включена, четене на сделките в нивото на сесия с Snapshot - изолация няма да може да се установи обща заключване ресурс. Можете да проверите READ_COMMITTED_SNAPSHOT за състоянието на обстановка, която отправя искане до масата за sysdatabases.

Тази заявка връща 0 или 1. След като включите Snapshot - изолация на ниво база данни, ще бъде възможно да се използва нивото на Snapshot - изолация в сесията, ако следващата опция ще бъде настроен за него:

Интересен въпрос, който си струва да се обръща внимание тук е фактът, че горното твърдение не хвърля грешка, ако Snapshot - изолация не е активиран на ниво база данни. Но тя ще се върне за грешка, когато на сесия е опитал изпълнение на всяко изявление на ГСД (не DDL).

Msg 3952, Level 16, членка 1, Линия 1
Транзакция не е в базата от данни "TestDbase", защото базата данни не позволява изолиране моментна снимка. Използвайте ALTER DATABASE да позволи изолация моментна снимка.

Нека сега разгледаме един пример за това как Snapshot - изолация. Създаване на проста таблица на база данни, наречена сделки, които е създаването на сценария е както следва:

Задайте Snapshot на ниво база данни - изолация, ако не сте го направили.

Виждате ли отново предишното копие на данните от таблицата за транзакции. Но в този случай, на втората сесия е блокирана от първата сесия, в която е сключена сделката. Данните, които виждате, ще бъде на данните, които са били преди сделката започна първата сесия. Друг важен момент е, че заслужава да се отбележи, можете да промените нивото на изолация, без да завършат сделката. Но грешката все още ще се получи, когато стартирате пробата, и това ще се отчете, че Snapshot - изолация не е инсталиран, когато е стартирано сделка. Грешката е показано по-долу.

Msg 3951, Level 16, членка 1, Линия 1
Транзакция не е в базата от данни "TestDbase", защото изявлението използва изолация моментна снимка, но сделката не започна в изолация моментна снимка.

Друг интересен момент, дори и след като сделката на първата сесия, вие ще продължавате да виждате стари данни във втората сесия с втората сделка. След като завършите втората сесия (извършване на сделката, тичам инсталирате или свържете отново SET СДЕЛКИ Ниво на изолация прочетете РЕШЕН) и изпълнение на извадката отново, след това тя ще се променят данните. Преди да изпълните тези стъпки, изпълнението повторно вземане на проби не винаги ще се върне на променените данни.

На Съвета. веднага след като сделката започва с ниво Snapshot - изолация, изберете заявки винаги ще връщат едни и същи данни до края на сделката, и то не зависи от състоянието на други сделки, които работят с данни.

Как работи:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!