Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Transakce určují úroveň izolace, která definuje, jak je jedna transakce izolovaná od ostatních transakcí. Izolace je oddělení změn prostředků nebo dat provedených různými transakcemi. Úrovně izolace jsou popsány, pro které jsou povoleny vedlejší účinky souběžnosti, například špinavé čtení nebo přízrakové čtení.
Úrovně izolace transakcí řídí následující účinky:
Určuje, zda se zámky uplatňují při čtení dat a o jaký typ zámků se žádá.
Jak dlouho se zámky čtení drží.
Zda operace čtení, které odkazují na řádky upravené jinou transakcí:
Zablokujte, dokud se nezablokuje výhradní zámek na řádku.
Načtěte potvrzenou verzi řádku, která existovala v době spuštění příkazu nebo transakce.
Přečtěte nepotvrzenou změnu dat.
Volba úrovně izolace
Volba úrovně izolace transakcí nemá vliv na zámky, které jsou získány za účelem ochrany úprav dat. Transakce vždy získá exkluzivní zámek na všechna data, která upravuje. Uchovává tento zámek, dokud transakce neskončí, bez ohledu na úroveň izolace nastavenou pro danou transakci. U operací čtení úrovně izolace transakcí především definují, jak je operace chráněna před účinky jiných transakcí.
Nižší úroveň izolace zvyšuje schopnost mnoha uživatelů současně přistupovat k datům. Zvyšuje ale počet efektů souběžnosti, jako jsou špinavé čtení nebo ztracené aktualizace, které můžou uživatelé vidět. Naopak vyšší úroveň izolace snižuje typy účinků souběžnosti, které můžou uživatelé vidět. Vyžaduje ale více systémových prostředků a zvyšuje pravděpodobnost, že jedna transakce zablokuje jinou. Volba odpovídající úrovně izolace závisí na vyvážení požadavků aplikace na integritu dat oproti režii každé úrovně izolace.
Nejvyšší úroveň izolace, serializovatelná, zaručuje, že transakce načte přesně stejná data pokaždé, když opakuje operaci čtení. Používá ale úroveň uzamčení, která bude pravděpodobně mít vliv na ostatní uživatele v systémech s více uživateli. Nejnižší úroveň izolace, čtení neprovedených transakcí, může načíst data, která byla změněna, ale nebyla potvrzena jinými transakcemi. Všechny vedlejší efekty souběžnosti mohou nastat v režimu nekomitovaného čtení, ale nedochází k uzamčení čtení nebo správě verzí, takže režie je minimalizována.
Poznámky
Následující tabulka ukazuje vedlejší účinky souběžnosti povolené různými úrovněmi izolace.
| Úroveň izolace | Špinavé čtení | Neopakovatelné čtení | Phantom |
|---|---|---|---|
| Nepotvrzené čtení | Ano | Ano | Ano |
| Čtení potvrzeno | Ne | Ano | Ano |
| Opakovatelné čtení | Ne | Ne | Ano |
| Snímek | Ne | Ne | Ne |
| Serializovatelný | Ne | Ne | Ne |
Transakce musí být spuštěny alespoň na úrovni opakovatelného čtení, aby se zabránilo ztrátě aktualizací, které mohou nastat, když dvě transakce načtou stejný řádek. Transakce pak později aktualizuje řádek na základě původně načtených hodnot. Pokud dvě transakce aktualizují řádky pomocí jednoho příkazu UPDATE a aktualizaci nezakládají na dříve načtených hodnotách, ztracené aktualizace se nemohou vyskytnout na výchozí úrovni izolace read committed.
Chcete-li nastavit úroveň izolace pro transakci, můžete použít setTransactionIsolation metoda SQLServerConnection třídy. Tato metoda přijímá hodnotu typu int jako svůj argument, který je založen na jedné z připojovacích konstant jako v následujících:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
Pokud chcete použít novou úroveň izolace snímků SQL Serveru, můžete použít jednu z SQLServerConnection konstant:
con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);
nebo můžete použít:
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);
Další informace o úrovních izolace SQL Serveru naleznete v tématu "Úrovně izolace v databázovém stroji" v SQL Server Books Online.
Viz také
Provádění transakcí pomocí ovladače JDBC
NASTAVIT ÚROVEŇ IZOLACE TRANSAKCÍ (Transact-SQL)