ठीक है, घर वापस गए और परीक्षण किया। यहाँ अवलोकन है।
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
दोनों सेटिंग्स के साथ पहला परीक्षण बंद होने की पुष्टि की।
प्रश्न 1
USE TEST;
BEGIN TRAN
UPDATE TABLE1
SET Details = 'Update'
WHERE ID = 1;
--COMMIT;
--ROLLBACK;
GO
प्रश्न २
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 को सेट करें लेकिन ALLOW_SNAPSHOT_ISOLATION को छोड़ दें।
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
क्वेरी 1 चलाएं, और क्वेरी 2 चलाएं। DMV क्वेरी 1 इनक एक्सक्लूसिव लॉक दिखाती है, लेकिन क्वेरी 2 बिना रिटर्न के 'मूल' के साथ विवरण देता है। ऐसा प्रतीत होता है कि READ_COMMITTED पंक्ति संस्करण की जगह है।
जोड़ना SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
क्वेरी 1 और क्वेरी 2, और रन क्वेरी 1 या क्वेरी 2 रिटर्न त्रुटि पर - स्नैपशॉट अलगाव लेन-देन तक पहुँचने डेटाबेस 'टेस्ट' विफल स्नैपशॉट अलगाव इस डेटाबेस में अनुमति नहीं है क्योंकि। स्नैपशॉट अलगाव की अनुमति देने के लिए ALTER DATABASE का उपयोग करें।
तीसरा परीक्षण , पिछला लेनदेन रोलबैक। READ_COMMITTED_SNAPSHOT बंद और ALLOW_SNAPSHOT_ISOLATION सेट करें।
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT OFF
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE TEST
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
क्वेरी 1 चलाएं, और फिर क्वेरी 2। DMV क्वेरी द्वारा किए गए अनन्य लॉक दिखाता है। क्वेरी 2 क्वेरी 1 के पूरा होने की प्रतीक्षा कर रहा है। ALLOW_SNAPSHOT_ISOLATION चालू करने से पंक्तिबद्ध संस्करण तैयार करने में सक्षम नहीं होता है।
जोड़ा जा रहा है SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
दोनों क्वेरी 1 और क्वेरी 2. चलाएँ क्वेरी 1 करने के लिए और उसके बाद क्वेरी 2. जबकि DMV शो क्वेरी 1 को अपने ऊपर लेना अनन्य ताला, क्वेरी 2 वापसी 'मूल' के साथ विवरण। स्नैपशॉट अलगाव जगह में दिखाई देता है।
परीक्षण के अवलोकन से पता चलता है कि सेटिंग की READ_COMMITTED_SNAPSHOT
परवाह किए बिना READ COMMITTED पंक्ति संस्करण को स्वयं सक्षम / अक्षम करें ALLOW_SNAPSHOT_ISOLATION
, और इसके विपरीत।