işlem yalıtım düzey (Transact-SQL) küme

Kilitleme ve satır sürüm davranışını denetler. Transact-SQL bağlantı tarafından ifadeleri SQL Server.

Topic link iconTransact-SQL sözdizimi kuralları

SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
[ ; ]

Bağımsız değişkenler

  • KAYDEDİLMEYEN OKUMA
    Ifadeleri diğer hareket tarafından değiştirilen ancak henüz kabul edilen satırları okuyabildiğini belirtir.

    Hareketleri READ UNCOMMITTED olarak çalışan düzey diğer hareketler arasında geçerli bir işlem tarafından okunan veri değiştirme önlemek için paylaşılan kilitlerin sorun.READ UNCOMMITTED hareket de geçerli hareket tarafından değiştirilen edilmiş, ancak diğer işlemler tarafından kabul edilen satır okuma engelleyen özel kilit tarafından engellenmez.Bu seçeneği olduğunda küme, dirty okuma olarak adlandırılır ve kaydedilmemiş değişiklikleri okumaya olanaklıdır.Veri değerleri değiştirilebilir ve satırların görüntülenmesi veya verileri kayboluyor küme hareket sonundan önce.Bu seçenek, bir hareket için tüm SELECT deyimlerine tüm tablolarda NOLOCK ayarı aynı etkiye sahiptir.En az kısıtlayıcı yalıtım düzeyi budur.

    Içinde SQL Server, hareketleri kullanarak, kaydedilmemiş verileri değişiklikler kirli okuma koruma ile çalışırken, kilitleme çakışması da küçültebilirsiniz:

    • READ KAYDEDILMIŞ yalıtım düzey READ_COMMITTED_SNAPSHOT veritabanı seçeneğiyle küme açık.

    • anlık görüntü yalıtım düzey gösterir.

  • KAYDEDİLEN OKUMA
    Ifadeleri, değiştirilmiş ancak diğer işlemler tarafından kabul edilen veri okunamıyor belirtir.Bu, dirty okuma engeller.Veri nonrepeatable okuma veya hayalet verileri geçerli hareket içinde tek bir ifade arasında diğer işlemler tarafından değiştirilebilir.Bu seçenek, SQL Server Varsayılan.

    READ KAYDEDILMIŞ davranışını READ_COMMITTED_SNAPSHOT veritabanı seçeneği ayarı bağlıdır:

    • READ_COMMITTED_SNAPSHOT ise küme (varsayılan) OFF için Database Engine kullanır, geçerli hareket bir okuma işlemi çalışırken satır değiştirme gelen diğer hareketleri engellemek için kilitleri paylaşılan. Kilitleri de paylaşılan blok başka bir işlem tamamlanana kadar başka işlemler tarafından değiştirilen satır okuma gelen ifade.paylaşılan kilit türü ne zaman yayımlanacak belirler.Sonraki satıra işlenmeden önce satır kilitlerin serbest bırakılır.Sayfa kilitler, bir sonraki sayfada okuyun ve deyim tamamlandığında, tablo kilitlerin serbest bırakılır yayımlanmaktadır.

    • READ_COMMITTED_SNAPSHOT ise küme açık, Database Engine Satır sürümü, bu deyim başlangıcında varolan gibi her işlem için tutarlı bir anlık görüntü deyimyle veri sunmak için kullanır. Kilitlerin güncelleştirmelerden verileri korumak için başka işlemler tarafından kullanılmaz.

    READ_COMMITTED_SNAPSHOT veritabanı seçeneği AÇıK olduğunda, READCOMMITTEDLOCK tablo ipucu, READ KAYDEDILMIŞ yalıtım düzeyinde çalışan işlemlerde tek tek tablolar için satır sürümü yerine paylaşılan kilitleme istemek için kullanabilirsiniz.

    Not

    Zaman, küme READ_COMMITTED_SNAPSHOT seçeneği, yalnızca ALTER DATABASE komutu yürütmeden bağlantı veritabanında izin verilir.ALTER DATABASE tamamlanana kadar diğer açık bağlantı veritabanı içinde olmalıdır.Veritabanı tek kullanıcı modu olması gerekir.

  • YİNELENEBİLİR OKUMA
    Ifadeleri, değiştirilmiş ancak henüz diğer işlemler tarafından kaydedilmiş verileri okuyamıyor ve hiç bir işlem, geçerli işlem tamamlanıncaya kadar geçerli hareket tarafından okunan verileri değiştirebilirsiniz belirtir.

    Paylaşılan kilitlerin her tarafından okunan tüm verileri yerleştirilir deyim hareket ile şunlardır, işlem tamamlanıncaya kadar tutulur.Bu, geçerli hareket tarafından okunan tüm satırları değiştirme gelen diğer hareketleri engeller.Diğer işlemler, geçerli hareket tarafından verilen ifadeleri arama koşullarıyla yeni bir satır ekleyebilirsiniz.Geçerli hareket yeniden deneme, deyim varsa yeni satırların, hayali bir okuma sonuçlar alır.Paylaşılan kilitler, yayımlanan her deyim sonunda yerine bir hareketi sona tutulduğu, eşzamanlılık varsayılan READ KAYDEDILMIŞ yalıtım düzey düşük olduğundan.Bu seçenek yalnızca gerektiğinde kullanın.

  • ANLIK GÖRÜNTÜ
    Tüm deyiminde bir işlem tarafından okunan verilerin tutarlı bir işlem, işlemin başlangıcında veri sürüm olacağını belirtir.Işlem, yalnızca işlem başlangıcından önce kaydedilmiş veri değişikliklerini tanıyabilir.Diğer işlemler tarafından geçerli işlem başladıktan sonra yapılan veri değişikliklerini geçerli işlemde yürütülüyor ifadeler için görünür değil.Bu işlemin başlangıcında var gibi bir işlem tablolarda anlık görüntü görüntü görüntüsünü kaydedilmiş verileri almak gibi sahiptir.

    Ne zaman bir veritabanı kurtarılır dışında anlık GÖRÜNTÜ hareketleri kilitlerin verileri okunurken isteme.Veri okuma anlık görüntü görüntü hareketleri yapmak blok diğer hareketleri, alınan veri yazma.Veri yazma işlemleri, anlık GÖRÜNTÜ hareketleri, alınan veri okunuyor engellemeyin.

    Geri alınmış başka bir işlem tarafından kilitli veri okunamıyor denemesi yapılırsa, bir veritabanı kurtarma top geri aşamasında anlık görüntü görüntü hareketleri kilit isteyin.anlık görüntü hareketi, işlem geri alındı kadar engellendi.Hemen verilmiş sonra kilit serbest bırakılır.

    Anlık GÖRÜNTÜ yalıtım düzey'ni kullanan bir işlem başlamadan önce ALLOW_SNAPSHOT_ISOLATION veritabanı seçeneği ON olarak küme olması gerekir.Anlık GÖRÜNTÜ yalıtım düzey'ni kullanan bir işlemde birden fazla veritabanlarındaki verileri erişirse, ALLOW_SNAPSHOT_ISOLATION olmalıdır küme her veritabanındaki açık.

    Bir hareket olamaz küme anlık görüntü görüntü yalıtım düzeyni başka bir yalıtım düzey ile başlatılan; böylece, hareket iptal etmek neden olur.Anlık GÖRÜNTÜ yalıtım düzey içinde bir hareket başlatır, başka bir yalıtım düzeyine değiştirin ve sonra anlık GÖRÜNTÜ için geri.Bir hareket, ilk kez veri eriştiği başlatır.

    Anlık GÖRÜNTÜ yalıtım düzey altında çalışan BIR işlem, bu işlem tarafından yapılan değişiklikleri görüntüleyebilirsiniz.Hareket bir tabloda bir UPDATE gerçekleştirir ve daha sonra aynı tabloda bir deyim sorunları, örneğin, değiştirilmiş verileri sonucu eklenecektir küme.

  • SERİ HALE GETİRİLEBİLİR
    Aşağıdakileri belirtir:

    • Ifadeleri, değiştirilmiş ancak henüz diğer işlemler tarafından kabul edilen veri okunamıyor.

    • Hiç bir işlem, geçerli işlem tamamlanıncaya kadar geçerli hareket tarafından okunan verileri değiştirebilirsiniz.

    • Diğer işlemler, anahtarlarının geçerli işlem tamamlanıncaya kadar geçerli hareketin tüm tablolarda okunan aralığında girer anahtar değerleri içeren yeni bir satır ekleyemiyor.

    Aralık kilit işlem içinde yürütülen her deyim arama koşullarıyla anahtar değerleri aralığı yerleştirilir.Bu, herhangi biri geçerli bir işlem tarafından yürütülen için geçerli herhangi bir satır ekleme ya da güncelleştirilirken diğer hareketleri engeller.Bu, herhangi bir işlem tablolarda, saat çalıştırılır, bunlar aynı satır kümesi okuyacağı anlamına gelir.Aralık kilitler, işlem tamamlanıncaya kadar tutulur.Tüm aralıklar anahtarlarının kilitler ve işlem tamamlanıncaya kadar kilitlerin tutan yalıtım düzeyinden en kısıtlayıcı olmasıdır.Eşzamanlılık daha düşük olduğundan, bu seçenek yalnızca gerektiğinde kullanın.Bu seçenek, bir hareket için tüm SELECT deyimlerine tüm tablolarda HOLDLOCK ayarı aynı etkiye sahiptir.

Remarks

Yalıtım düzey seçeneklerinin yalnızca biri sırasında ayarlanabilir bir saat, ve açıkça değiştirildiğinde kadar bu bağlantı için küme kalır.Tüm tablo ipucu sürece FROM yan tümcesinde belirtilen yalıtım düzey için kurallar altında hareket içinde gerçekleştirilen operasyonların işletmek okuma bir deyim tablo farklı kilitleme veya sürüm davranışını belirtir.

Hareket izolasyon düzeyleri okuma işlemlerini alınan kilitlerin türünü tanımlayın.READ KAYDEDILMIŞ veya YINELENEBILIR OKUMA için genellikle satır kilitler, çok sayıda sayfa veya tablo içinde satır okuma tarafından başvurulan, satır kilidi için sayfa veya tablo kilidi escalated, ancak alınan kilitlerin paylaşılan.Bunu okuduktan sonra bir satır hareketi tarafından değiştirilirse, bu satırın korumak için özel bir kilit hareket edinme ve özel kullanım kilidi, işlem tamamlanıncaya kadar korunur.Örneğin, YINELENEBILIR READ bir işlem kilit paylaşılan bir satırda, ve sonra hareket satırı değiştirir, bir özel satır kilidi paylaşılan satır kilidi dönüştürülür.

Bir özel durum dışında bunlardan biri geçebilirsiniz yalıtım düzey başka bir işlem sırasında istediğiniz saat.Herhangi bir özel durumu oluşuyor yalıtım düzey ANLıK yalıtım için.Bunu, başarısız olan ve geri almak almak hareket neden olur.Ancak, anlık görüntü görüntü GÖRÜNTÜ yalıtım herhangi bir diğeri için de başlatılan bir işlem değiştirebilirsiniz yalıtım düzey.

Bir hareket yalıtım düzeyinden değişikliği korunduğuna sonra yeni düzey kurallarına göre okuma, başka kaynaklara değiştirdiğinizde.Önceki düzey kurallarına göre korunması devam değişiklikten önce okunan kaynakları.Örneğin, bir hareket READ KAYDEDILMIŞ SERIALIZABLE için değiştirdiyseniz, değişiklik yapıldıktan sonra elde paylaşılan kilitlerin şimdi işlem sonuna kadar tutulur.

Nesne denetimi döndürdüğünde, küme, işlem yalıtım düzey bir saklı yordam veya tetikleyiciyi, çıkış, nesnenin çağrıldığında yalıtım düzey düzeyine etkin sıfırlandı.Örneğin, varsa, bir toplu işlemde küme REPEATABLE READ ve toplu işlem, daha sonra bir saklı yordam bu küme s SERIALIZABLE yalıtım düzeyne çağırır, saklı yordam toplu işlemine denetim döndürdüğünde yalıtım düzey küme ting YINELENEBILIR READ döner.

Not

Kullanıcı tanımlı işlevler ve kullanıcı tarafından tanımlanan ortak dil çalışma zamanı (CLR) türleri yürütmek küme TRANSACTION YALıTıM düzey edemiyor.Ancak, yalıtım düzey bir tablonun ipucu kullanarak geçersiz kılabilirsiniz.Daha fazla bilgi için bkz:Tablo ipuçları (Transact-SQL).

Kullandığınızda sp_bindsession iki oturum, her oturum bağlamak için yalıtım düzey ayarı korur.oturum yalıtım düzey ayarı değiştirmek için küme, işlem yalıtım düzey kullanarak bağlı diğer oturumlara ayarını etkilemez.

küme işlem yalıtım düzey yürütmek veya çalışma zamanı ve çözümleme zamanında etkinleşir.

Kümeler toplu yükleme işlemlerini en iyi duruma getirilmiş blok aşağıdaki yalıtım düzeyi altında çalıştırılan bir sorgu:

  • ANLIK GÖRÜNTÜ

  • KAYDEDİLMEYEN OKUMA

  • READ satır sürümü kullanılarak KAYDEDILMIŞ

Tersi durumda, bu yalıtım düzeyleri altında çalıştırılan bir sorgu en iyi duruma getirilmiş toplu işlemleri kümeler yük engelleyin.Toplu yükleme işlemleri hakkında daha fazla bilgi için bkz: Toplu alma ve verme işlemleri toplu hakkında ve Toplu alma performansı en iyi duruma getirme.

Örnekler

Aşağıdaki örnek ayarlar TRANSACTION ISOLATION LEVEL Bu oturum için. Her biri için Transact-SQL izleyen, Ekstresi SQL Server tüm paylaşılan kilitlerinin işlem sonuna kadar tutar.

USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
GO
BEGIN TRANSACTION;
GO
SELECT * 
    FROM HumanResources.EmployeePayHistory;
GO
SELECT * 
    FROM HumanResources.Department;
GO
COMMIT TRANSACTION;
GO