تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف اقوم بقفل الملف الذي يستخدمه احد المستخدمين
#6
(21-04-23, 06:53 AM)foo كتب : استاذ عبدالله الدوسري لعل الاخ يقصد هذا الموضوع SQL Server When to use RowLOCK, UPDLOCK etc

الترجمة المبدئية
يضمن قفل مستوى الصف ROWLOCK أنه عندما يحصل المستخدم على الصف المحدث ، فلن يتم تعديله من قبل مستخدمين آخرين خلال هذا الوقت.
لذلك ، يمكن أن تضمن عمليات التأمين على مستوى الصف اتساق البيانات وتحسين تزامن عمليات البيانات.
ROWLOCK يخبر SQL Server لاستخدام أقفال على مستوى الصف فقط.


ليست لدي الخبرة للدخول في هذا الموضوع


فكرة جميله أخي foo ( لكن )
ROWLOCK لها إستخدامات أخرى، ولم يتم تصميمها لقفل السجل بالطريقة التي يريدها الأخ ابو محمد

ROWLOCK فعلاً تقوم بقفل السجل على مستوى السجل، تم تصميمها لقفل السجلات أثناء تنفيذ العمليات، مثل تنفيذ عمليات تحديث ثم يليها عمليات ادخال ثم يليها عمليات حذف، بهذا الشكل.
والهدف هو منع وصول المستخدم لهذة السجلات أثناء تنفيذ مثل هذا النوع من العمليات،


تخيل أنا موظف : ( البيانات الصحيحة كالتالي )
رصيد إجازاتي مثلاً : 50
عدد أيام الخروج : 0

قمت بالخروج في إجازة لمدة 50 يوم ( ولكنها لا تسجل مالياً إلى في نهاية كل شهر مثلاً )

بعض العمليات الإدارية مثلاً تقوم بها بالجملة لكل الموظفين وليست لموظف معين.
لأمور ماليه قام موظف الإدارة ببداء عمليات حسابية ( إجازة وحظور ورواتب وتأخير ...إلخ من الأمور الإدارية التي تؤثر على رصيد الإجازة مثلاً )
الموظف بداء العملية ...
أنا في نفس الوقت إستعلمت عن بياناتي .... ليس من المنطقي ان أجد رصيد إجازتي ( 0 ) بينما عدد أيام الخروج أيضاً ( 0 ).
أنا قمت بالإستعلام بينما هناك عملية تحدث في قاعدة البيانات لم تكتمل بعد، يمكن تأخذ دقائق أو 10 أو 30 دقيقة حتى تنتهي العملية، المهم.

هذة مجرد مشكلة بسيطة أنا أراها على شاشة الكمبيوتر.
المصيبة إذا كانت هناك أنظمة بنكية أو مالية أو أي شيء مهم، متصله قامت بالإستعلام وتعتمد على هذة البيانات، ( لن أشرح لك عن كمية الفوضى التي من الممكن أن تحدث )

لذلك جاء الحل بإستخدام ( ROWLOCK  ) 
فقط يتم قفل السجلات المطلوبة عند بداء العملية وينتهي مع إنتهاء العملية، حتى تصبح البيانات منطقية، ومتكاملة. ، بالإضافة إلى إستخدام الـــ Transaction ، يتم تأمين صحة ودقة البيانات.
لأن الـــ Transaction لوحدة لا يمنع الوصول للبيانات.


لم يتم عمل ROWLOCK  لقفل السجل بينما البيانات على الشاشة أمام  المستخدم ، وممكن يطول الأمر إلى ساعة أو حتى أكثر والنافذة مفتوحة بإستخدام هذة الطريقة.
إذا إستخدمتها بهذة الطريقة ، تسمة ( bad practice ) ( سوء الممارسة ).




أفضل طريقة هي بإستخدام حقل زمني يبين إذا كان هذا السجل مقفل أو لا!!!
أول ما تفتح نافذة تحرير السجل ، مباشرتاً تقوم بإنشاء سجل إذا لم يكن موجود في جدول خاص ( مثلاً باسم : TblRowsLock ) يدل (  أن هذا السجل بالرقم الفلاني يتم تحريرة الأن بهذا الوقت والتاريخ بواسطة المستخدم الفلاني  )
بعدها ( ما دامت النافذة مفتوحة ) في كل دقيقة يتم تحديث السجل نفسة السابق الموجود في جدول ( TblRowsLock ) بالوقت الجديد، ( بمعنى متى آخر مرة هذة النافذة قامت بقفل السجل )
ولا تنسى عند إغلاق نافذة التحرير ( إزالة الوقت الموجود في الجدول - TblRowsLock  ) حتى تزيل القفل مباشرتاً، ولا تنتظر دقيقة لفتح السجل من جديد.
بعد إغلاق نافذة التحرير :
السجل الموجود في جدول ( TblRowsLock ) سيبقى، لكن النافذة اغلقت ولن يتم تحديث الوقت في السجل.
وبذلك عندما تريد فتح نافذة التحرير، يجب أن تسأل عن الجدول ( TblRowsLock ) إذا كان يحتوي على سجل قفل لهذا السجل المراد تحريرة ، أن لم يجد فهذا يعني لا يوجد قفل، أن وجد سجل ، يتم مقارنة حقل ( آخر تاريخ للقفل ) في جدول ( TblRowsLock ) مع الوقت الحالي، إذا كانت أكبر من ( 60 ثانية مثلا ) ، هذا يدل على أنه لايوجد هناك احد يقوم بتحرير هذا السجل، إذا كانت أقل من ( 60 ثانية ) فهذا يدل على أنه هناك نافذة تحرير مفتوحة الآن.

والجميل في هذة الطريقة انها بسيطة، ولن يتم قفل السجل حتى عن طريق الخطأ لو تم فتح نافذة التحرير، وتجمد النظام بالكامل أو تم إغلاق الجهاز سيرجع السجل كما كان لأن الوقت هو العامل الأساسي لعملية القفل، بعد دقيقة من إغلاق نافذة التحرير.
الرد }}}
تم الشكر بواسطة: ابو محمد محمد محمد , Taha Okla , foo


الردود في هذا الموضوع
RE: كيف اقوم بقفل الملف الذي يستخدمه احد المستخدمين - بواسطة عبدالله الدوسري - 21-04-23, 08:16 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] مشكلة تظهر عند استخدام الملف manifest mmaalmesry 2 622 12-05-25, 12:15 AM
آخر رد: mmaalmesry
  طلب تعديل كود جلب اسم الملف ومساره مصمم هاوي 4 537 25-01-25, 12:45 AM
آخر رد: مصمم هاوي
  أريد تحديد صلاحيات المستخدمين عن طريق حقل في جدول قاعدة البيانات F.H.M 0 326 12-09-24, 06:29 PM
آخر رد: F.H.M
  حل مشكلة تعذر تحميل الملف أو التجميع ل scannerlib ahlamalgomate2020 0 299 01-09-24, 03:05 PM
آخر رد: ahlamalgomate2020
  كيف اقوم بحل عدم اتصال فيجوال بيسك بالانترنت جيولوجي مبتدئ 3 492 28-06-24, 05:29 AM
آخر رد: جيولوجي مبتدئ
  كيف اقوم بتحديث بيانات داخل Datagrid عبر Button moh61 5 471 28-06-24, 12:03 AM
آخر رد: Zuhare
  كيف اقوم بتحويل التاريخ من هجري الى ميلادي بال Report Viewer moh61 4 557 22-06-24, 09:33 PM
آخر رد: Kamil
  كيف اقوم بالخروج من Sub عبر Sub اخرى moh61 1 326 15-06-24, 12:07 AM
آخر رد: غزة العزة
Rainbow [VB.NET] خطا عند فتح الملف DK-x 2 1,645 03-04-24, 03:26 PM
آخر رد: تركي الحلواني
Information [VB.NET] حذف كل العناصر التي تاتي بعد عنصر الذي احدده listbox mervandz 3 635 10-11-23, 07:12 PM
آخر رد: justforit

التنقل السريع :


يقوم بقرائة الموضوع: