Tamam, eve döndü ve test edildi. İşte gözlem.
CREATE DATABASE TEST;
GO
CREATE TABLE TABLE1
(
ID tinyint,
Details varchar(10)
);
GO
INSERT INTO TABLE1
VALUES (1, 'Original');
GO
SELECT
name,
snapshot_isolation_state_desc,
is_read_committed_snapshot_on
FROM sys.databases
WHERE name = 'TEST';
GO
İlk olarak her iki ayar da KAPALI olarak onaylandı.
Sorgu 1
USE TEST;
BEGIN TRAN
UPDATE TABLE1
SET Details = 'Update'
WHERE ID = 1;
--COMMIT;
--ROLLBACK;
GO
Sorgu 2
USE TEST;
SELECT ID, Details
FROM TABLE1
WHERE ID = 1;
GO
Bu sınamada, sorgu 2, sorgu 1'in yerine getirilmesini bekliyor, dm_tran_locks DMV, 1. sıradaki TABLE1 üzerindeki özel kilidin olduğunu gösterir.
USE TEST;
SELECT
DB_NAME(tl.resource_database_id) AS DBName,
resource_type,
OBJECT_NAME(resource_associated_entity_id) AS tbl_name,
request_mode,
request_status,
request_session_id
FROM sys.dm_tran_locks tl
WHERE
resource_database_id = db_id('TEST')
AND resource_type = 'OBJECT'
İkinci test , önceki işlemi geri alma, READ_COMMITTED_SNAPSHOT ON ayarını yapın, ancak ALLOW_SNAPSHOT_ISOLATION OFF bırakın.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
Sorgu 1'i çalıştırın ve sorgu 2'yi çalıştırın. DMV, sorgu 1'i özel kilit içerdiğinde gösterir, ancak sorgu 2, sorgu 1 işlem yapmadan 'Orijinal' ile ayrıntıları döndürür. READ_COMMITTED satır versiyonunun yerinde olduğu anlaşılıyor.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
Sorgu 1 ve sorgu 2'ye ekleme ve sorgu 1 veya sorgu 2'yi çalıştırma hata döndürür - Anlık görüntü yalıtım işlemi bu veritabanında anlık görüntü yalıtımına izin verilmediğinden 'TEST' veritabanına erişilemedi. Anlık görüntü yalıtımına izin vermek için ALTER DATABASE kullanın.
Üçüncü test , önceki işlemi geri alma. READ_COMMITTED_SNAPSHOT OFF ve ALLOW_SNAPSHOT_ISOLATION ON ayarını yapın.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE TEST
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
Sorgu 1'i çalıştırın, ardından sorgu 2'yi çalıştırın. DMV, sorgu 1 tarafından yapılan özel kilidi gösterir. Sorgu 2, sorgu 1'in tamamlanmasını bekliyor gibi görünüyor. ALLOW_SNAPSHOT_ISOLATION ON işlevinin açılması, READ COMMITTED satır sürümünün etkinleştirilmesi için görünmüyor.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
Hem sorgu 1'e hem de sorgu 2'ye ekleme yapın . Sorgu 1'i ve ardından sorgu 2'yi çalıştırın. DMV, sorgu 1'i özel kilit içerdiğinde, sorgu 2'yi 'Orijinal' ile döndürür. Anlık görüntü yalıtımı yerinde görünüyor.
Testten gözlem yapılması READ_COMMITTED_SNAPSHOT
, ALLOW_SNAPSHOT_ISOLATION
ayardan bağımsız olarak READ COMMITTED satır versiyonunu kendiliğinden etkinleştirdiğini / devre dışı bıraktığını gösterir .