قفل جدول SQL المستمر من C#
-
26-09-2019 - |
سؤال
أحاول إنشاء قفل SQL (SQL Server 2005) المستمر على مستوى الجدول. أنا لا أقوم بتحديث/الاستعلام عن الجدول المحدد ، لكنني بحاجة إلى منع تطبيق طرف ثالث من تحديث الجدول المقفلة كوسيلة لمنع نشر المعاملات (الجدول الذي أرغب في قفله هو المفتاح في معاملتهم التي تتداخل معها معالجتي).
من تجربتي ، يتم قفل الجدول فقط في الوقت الذي تحدث فيه معاملة محددة. أيه أفكار؟
قام مطور الطرف الثالث بتسجيل هذه الميزة كتحسين ، ولكن نظرًا لأنها في منتصف طرح إصدار رئيسي يمكنني أن أتوقع الانتظار لمدة 6 أشهر على الأقل لهذا الغرض. أعلم أن هذا ليس حلاً رائعًا ، لأن برامجهم ستنخفض ولكنها ذات طبيعة حرجة بما يكفي لأننا على استعداد للعيش مع العواقب.
المحلول
انقل الجدول إلى مجموعة ملفات مختلفة ، ثم قم بتغيير مجموعة الملفات إلى القراءة فقط. سيكون الجدول ساريًا للقراءة فقط:
ALTER DATABASE dbName
ADD FILEGROUP ReadOnlyFG;
GO
ALTER DATABASE dbName
ADD FILE (
NAME = ...,
FILENAME = '...')
TO FILEGROUP ReadOnlyFG;
GO
ALTER TABLE tableName MOVE TO ReadOnlyFG;
GO
ALTER DATABASE dbName
MODIFY FILEGROUP ReadOnlyFG READONLY;
نصائح أخرى
أعد تسمية الجدول وعندما يكون الطرف الثالث جاهزًا لإعادة تسميته إلى ما يجب أن يكون