좋아, 집으로 돌아와서 테스트했다. 관찰 결과는 다음과 같습니다.
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
두 설정 모두 OFF로 확인 된 첫 번째 테스트 .
쿼리 1
USE TEST;
BEGIN TRAN
UPDATE TABLE1
SET Details = 'Update'
WHERE ID = 1;
--COMMIT;
--ROLLBACK;
GO
쿼리 2
USE TEST;
SELECT ID, Details
FROM TABLE1
WHERE ID = 1;
GO
이 테스트에서 쿼리 2는 쿼리 1이 커밋되기를 기다리고 있습니다. dm_tran_locks DMV는 쿼리 1에 의해 TABLE1의 독점 잠금이 발생했음을 보여줍니다.
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'
두 번째 테스트 , 이전 트랜잭션 롤백, READ_COMMITTED_SNAPSHOT를 ON으로 설정하고 ALLOW_SNAPSHOT_ISOLATION을 OFF로 유지하십시오.
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
쿼리 1을 실행하고 쿼리 2를 실행합니다. DMV는 쿼리 1에 단독 잠금이 발생하지만 쿼리 2는 쿼리 1없이 트랜잭션을 커밋하지 않고 '원본'으로 세부 정보를 반환합니다. READ_COMMITTED 행 버전 관리가 적용된 것 같습니다.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
쿼리 1 및 쿼리 2를 추가 하고 쿼리 1 또는 쿼리 2를 실행하면 오류가 반환됩니다.이 데이터베이스에서는 스냅 숏 격리가 허용되지 않기 때문에 스냅 숏 격리 트랜잭션이 'TEST'데이터베이스에 액세스하지 못했습니다. ALTER DATABASE를 사용하여 스냅 샷 격리를 허용하십시오.
세 번째 테스트 , 이전 트랜잭션 롤백 READ_COMMITTED_SNAPSHOT OFF 및 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
쿼리 1을 실행 한 다음 쿼리 2를 실행합니다. DMV는 쿼리 1에서 발생한 독점 잠금을 보여줍니다. 쿼리 2는 쿼리 1이 완료되기를 기다리는 것으로 나타납니다. ALLOW_SNAPSHOT_ISOLATION을 ON으로 설정해도 READ COMMITTED 행 버전 관리가 활성화되지 않은 것 같습니다.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
쿼리 1과 쿼리 2에 모두 추가 쿼리 1을 실행 한 다음 쿼리 2를 실행하십시오. DMV가 쿼리 1에 독점 잠금이 발생하는 것을 표시하는 동안 쿼리 2는 '원본'으로 세부 사항을 리턴합니다. 스냅 샷 격리가있는 것 같습니다.
테스트에서 관찰 한 바에 따르면 설정에 READ_COMMITTED_SNAPSHOT
관계없이 READ COMMITTED 행 버전 관리를 활성화 / 비활성화 하는 것이 가능 ALLOW_SNAPSHOT_ISOLATION
하며 그 반대도 마찬가지입니다.