SQL szerver 2018

1. Olvasd lekötetlen
2. Olvasd Elkötelezett
3. Repeatable Read
4. Serializable

Elkülönítési szintek vannak tervezve, hogy a szabályok adatbázis konkurencia és adatok konzisztenciája. Amikor telepíti szigetelőréteg, hogy több felhasználó futtatja ugyanazt adathalmazok (ugyanazokat az adatokat értékeket a sorok és oszlopok a táblázatban) van beállítva zár vagy follow elveken alapuló szintű elszigeteltség szabályokat. Alapértelmezésben telepítve szigetelés Read elkötelezett, és a telepítés belül működik az ülésen. Az alapelv az, hogy az írás művelet mindig blokkolja az olvasást a tranzakció, ha van a szigetelés felett, kivéve Read Uncommited. Ha a szint beállítása olvasása Uncommited, írás művelet nem blokkolja az olvasók és az olvasók ne takarja el a felvételt. Így lehetősége van arra, hogy egy kérelem olyan módon, hogy lesz piszkos adat van az adatbázisban tárolt, és az elv a sorozat megszakadt. Ha a beállítás olvasása Elkötelezett, akkor csak olvasható a tárolt adatokat. De amint a tranzakció teljes olvasási folyamat az adatok olvasása, akkor is, ha a tranzakció ezen a ponton még nem teljes, azt zár nem akadályozza változásokat az adatokat. Ha Repeatable Read olvasva ugyanazon tranzakciós adatok részét, ugyanazokat az adatokat kell tekinteni minden alkalommal, amikor olvasás történik a tranzakció. Ezért, ha az adatok olvasása nem megy végbe, egyéb tranzakciókat nem lehet módosítani az adatokat, de képesek lesznek beszúrni új adatokat egy asztal vagy adatértéke amely ezen a ponton nem blokkolja. A szint Serializable egy lépéssel tovább megy kapcsolatban Repeatable Read és védi az összes többi adat blokkok a betétek. Úgy hívják megelőzésére fantom szól.







Alapértelmezés szerint ez az opció ki van kapcsolva - OFF. Megtalálható az állapotát ezt a lehetőséget kérve adatokat sysdatabase.

A pillanatnyi helyzet - a szigetelés számára engedélyezett (BE), miután a jelenleg futó tranzakciók befejeződött. Addig állapotát a lehetőség nem lesz a köztes állapot: Pending_On (vagy Pending_Off amikor megpróbálja kikapcsolni a lehetőség). Együtt ALLOW_SNAPSHOT_ISOLATION opciót, beállíthatja READ_COMMITTED_SNAPSHOT opció a teljes adatbázis.







Amikor READ_COMMITTED_SNAPSHOT opció be van kapcsolva, az olvasás a tranzakciók a munkamenet szinten Snapshot - szigetelés nem lesz képes létrehozni egy közös zár erőforrás. Meg tudja nézni a beállítás állapota READ_COMMITTED_SNAPSHOT, hogy a kérelmet az sysdatabases asztalra.

Ez lekérdezés 0 vagy 1. Ha bekapcsolja a Snapshot - szigetelés az adatbázis szintjén, akkor lehetséges, hogy a Snapshot szint - szigetelés a munkamenet, ha a következő lehetőség lesz állítva neki:

Egy érdekes pont, amely figyelmet érdemel itt az a tény, hogy a fenti állítás nem dob hibát, ha a Snapshot - szigetelés nincs engedélyezve az adatbázis szintjén. De vissza fog térni egy hiba, amikor a munkamenet megkísérelt végrehajtását minden DML (nem DDL) nyilatkozatot tesz.

Msg 3952, Level 16, State 1, 1-es vonal
Sikertelen tranzakció az adatbázis „TestDbase”, mert az adatbázis nem teszi lehetővé pillanatfelvétel elszigetelten. Használja ALTER DATABASE hogy pillanatképet elszigeteltség.

Nézzük most meg egy példát, hogy a Snapshot - szigetelés. Hozzon létre egy egyszerű adatbázis tábla nevezett tranzakciók, ami a létrehozása a forgatókönyvet a következő:

Állítsa be az adatbázis szintjén Snapshot - szigetelés, ha még nem tette meg.

Látod megint az előző másolata az adatokat a tranzakciók asztalra. De ebben az esetben, a második edzésen blokkolja az első ülésen, ahol a tranzakció befejeződött. Az adatok jelennek meg az adatok, amelyek a tranzakció előtt kezdődött az első ülésen. Egy másik pont, hogy érdemes megjegyezni, meg lehet változtatni az elválasztási szintet anélkül, hogy a tranzakció befejezése. De a hiba továbbra is kapott, amikor futtatja a minta, és ez lesz számolt be, hogy a Snapshot - szigetelés nem volt telepítve, ha a tranzakció megkezdése. A hiba az alábbi ábrán látható.

Msg 3951, Level 16, State 1, 1-es vonal
Sikertelen tranzakció az adatbázis „TestDbase”, mert az állítás használt pillanatfelvétel elszigetelten, hanem a tranzakció nem indul pillanatfelvétel elszigetelten.

Egy másik érdekes pont, még az ügylet után az első ülésen, akkor is látni a régi adatokat, a második szakaszban a második ügylet. Miután befejezte a második ülésen (elkövetni a tranzakció fut a telepítés, vagy csatlakoztassa a SET ÜGYLETI izolációs szint READ COMMITTED), és végrehajtja a mintát újra, akkor lesz átöltözni adatokat. Mielőtt a következő lépéseket, újra-mintavételezési teljesítmény nem mindig adja vissza a megváltozott adatokat.

Tanács. amint a tranzakció kezdődik Snapshot szint - szigetelés, válasszuk lekérdezések mindig vissza ugyanazt az adatot, amíg a végén a tranzakció, és ez nem függ az állam egyéb tranzakciók adatokkal dolgoznak.

Hogyan működik:




Kapcsolódó cikkek