ঠিক আছে, ঘরে ফিরে পরীক্ষা করলাম। এই নিরীক্ষণ।
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
উভয় সেটিংসের সাথে প্রথম পরীক্ষা বন্ধ থাকার বিষয়টি নিশ্চিত হয়েছে।
প্রশ্ন ঘ
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 চালু করুন তবে ALLOW_SNAPSHOT_ISOLATION অফ ছেড়ে দিন।
ALTER DATABASE TEST
SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;
GO
ক্যোয়ারী 1 চালান, এবং ক্যোয়ারি চালান ২। ডিএমভি কোয়েরিটি 1 টিতে একচেটিয়া লক দেখায়, কিন্তু কোয়েরি 2 কোয়েরি 1 ছাড়াই 'অরিজিনাল' দিয়ে বিশদ বিবরণ প্রত্যাবর্তন করে। এটি প্রদর্শিত হয় যে READ_COMMITTED সারি সংস্করণটি স্থানে রয়েছে।
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
ক্যোয়ারী 1 এবং ক্যোয়ারি 2 তে যোগ করা এবং 1 টি ক্যোয়ারী চালানো বা কোয়েরি 2 টি ত্রুটি প্রদান করে - স্ন্যাপশট বিচ্ছিন্ন লেনদেন 'TEST' ডাটাবেস অ্যাক্সেস করতে ব্যর্থ হয়েছে কারণ এই ডাটাবেসে স্ন্যাপশট বিচ্ছিন্নতার অনুমতি নেই। স্ন্যাপশট বিচ্ছিন্নকরণের অনুমতি দেওয়ার জন্য ALTER DATABASE ব্যবহার করুন।
তৃতীয় পরীক্ষা , রোলব্যাক পূর্ববর্তী লেনদেন। READ_COMMITTED_SNAPSHOT OFF এবং 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 চালান এবং তারপরে কোয়েরি ২. ডিএমভি ক্যোয়ারী ১ দ্বারা ব্যতীত একচেটিয়া লক দেখায় Qu কোয়েরি ২ মনে হয় কোয়েরি 1 সম্পূর্ণ হওয়ার জন্য অপেক্ষা করছে। ALLOW_SNAPSHOT_ISOLATION চালু করা READ COMMITTED সারি সংস্করণ সক্ষম করে বলে মনে হচ্ছে না।
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
ক্যোয়ারী 1 এবং ক্যোয়ারী উভয়টিতে যোগ করা 2. ক্যোয়ারি 1 চালান এবং তারপরে কোয়েরি 2। ডিএমভি কোয়েরি 1 দেখায় একচেটিয়া লক, কোয়েরি 2 'রিজিনাল' দিয়ে ফেরতের বিশদ বিবরণ দেয়। স্ন্যাপশট বিচ্ছিন্নতা জায়গায় উপস্থিত রয়েছে।
পরীক্ষার পর্যবেক্ষণ থেকে দেখা যায় যে READ_COMMITTED_SNAPSHOT
সেড নির্বিশেষে READ COMMITTED সারি সংস্করণ ALLOW_SNAPSHOT_ISOLATION
এবং তার বিপরীতে নিজেই সক্ষম / অক্ষম করে ।