OK, sono tornato a casa e testato. Ecco l'osservazione.
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
Primo test con entrambe le impostazioni confermate su OFF.
Query 1
USE TEST;
BEGIN TRAN
UPDATE TABLE1
SET Details = 'Update'
WHERE ID = 1;
--COMMIT;
--ROLLBACK;
GO
Query 2
USE TEST;
SELECT ID, Details
FROM TABLE1
WHERE ID = 1;
GO
In questo test, la query 2 è in attesa del commit della query 1, dm_tran_locks DMV mostra quel blocco esclusivo sulla TABELLA 1 sostenuto dalla query 1.
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'
Secondo test , ripristinare la transazione precedente, impostare READ_COMMITTED_SNAPSHOT ON ma lasciare ALLOW_SNAPSHOT_ISOLATION OFF.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
Eseguire la query 1 ed eseguire la query 2. DMV mostra che la query 1 comporta un blocco esclusivo, ma la query 2 restituisce i dettagli con "Originale" senza che la query 1 esegua il commit della transazione. Sembra che READ_COMMITTED versioning delle righe sia attivo.
L'aggiunta SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
alla query 1 e alla query 2 e l'esecuzione della query 1 o della query 2 restituiscono un errore: la transazione di isolamento dello snapshot non è riuscita ad accedere al database 'TEST' perché l'isolamento dello snapshot non è consentito in questo database. Utilizzare ALTER DATABASE per consentire l'isolamento dello snapshot.
Terzo test , rollback della transazione precedente. Impostare READ_COMMITTED_SNAPSHOT OFF e ALLOW_SNAPSHOT_ISOLATION ON.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE TEST
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
Eseguire la query 1, quindi la query 2. DMV mostra il blocco esclusivo sostenuto dalla query 1. La query 2 sembra essere in attesa del completamento della query 1. L'attivazione di ALLOW_SNAPSHOT_ISOLATION su ON non sembra abilitare il READ COMMITTED versioning delle righe.
Aggiunta SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
sia alla query 1 che alla query 2. Eseguire la query 1 e quindi la query 2. Mentre DMV mostra che la query 1 comporta un blocco esclusivo, la query 2 restituisce i dettagli con "Originale". L'isolamento dello snapshot sembra essere in atto.
L'osservazione del test mostra che READ_COMMITTED_SNAPSHOT
essa stessa abilita / disabilita il READ COMMITTED versioning delle file indipendentemente ALLOW_SNAPSHOT_ISOLATION
dall'impostazione e viceversa.