السبب في هذه المشكلة هو مستوى عزل المعاملات (Transaction Isolation Level).
قم بإيقاف تشغيل التومكات ثم شغّل الجملة التالية (بعد استبدال DBNAME باسم قاعدة بيانات العميل الصحيح):
USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('DBNAME')
EXEC(@kill);
ALTER DATABASE DBNAME
SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE DBNAME
SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE DBNAME
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;
إذا كانت نسخة الـ SQL Server هي 2014 أو أقل، قد تحدث معك مشكلة بسبب الجملة الأخيرة:
ALTER DATABASE DBNAME
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON;
قم بحذفها من الاستعلام وشغّله مرة أخرى إذا ظهرت معك رسالة خطأ.
ملاحظة (لإصدار SQL Server 2008): استخدم نفس الجمل مع استبعاد الجملة الأخيرة، ويمكن إنهاء الجلسات بالاعتماد على اسم الجهاز (host_name) بدلاً من معرّف قاعدة البيانات:
USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE host_name = ('DBNAME')
EXEC(@kill);
ALTER DATABASE DBNAME
SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE DBNAME
SET ALLOW_SNAPSHOT_ISOLATION ON;
Originally posted at https://answers.namasoft.com/question/432/ on 2018-11-26.