PDA

View Full Version : قفل كردن ركوردها



mohsenm66
چهارشنبه 07 مهر 1389, 18:14 عصر
من ميخواهم بدونم آيا ميشه ركوردهاي يك جدول را قفل كرد يا خير .
يعني وقتي دو كاربر ميخواهند به صورت همزمان به يك ركورد دسترسي داشته باشند اجازه دسترسي به يكي از آنها داده نشود .
در صورت امكان چنين چيزي ، نحوه مديريت آن به چه صورتي است .

esmit61
چهارشنبه 07 مهر 1389, 19:48 عصر
بله. میشود
میتوانید از Lock استفاده کنید. عبارت ROWLOCK رو در help جستجو کنید
عبارت زیر رو هم جستجو کنید. کمک زیادی میکنه
SET TRANSACTION ISOLATION LEVEL

sajjad_kochekian
چهارشنبه 07 مهر 1389, 20:19 عصر
بله. میشود
میتوانید از Lock استفاده کنید. عبارت ROWLOCK رو در help جستجو کنید
عبارت زیر رو هم جستجو کنید. کمک زیادی میکنه
SET TRANSACTION ISOLATION LEVEL

من يكم تحقيق كردم ولي چيزي دستگيرم نشد.
اگر ميشه يك مثال كاربردي بزنيد؟

ممنون

esmit61
چهارشنبه 07 مهر 1389, 21:00 عصر
من يكم تحقيق كردم ولي چيزي دستگيرم نشد
ببینید بحث قفلها و همزمانی بحث خیلی مفصلیه و حتماً نیاز به زمینه قبلی داره. ما چند نوع قفل میتونیم استفاده کنیم. مثلاً xlock و یا s-lock
اینها رو بخونید.چون حقیقتش من بخوام توضیح بدم خیلی مفصل میشه.
از ترکیب اینها باید استفاده کنید. (به جداول مربوط به سازگاری این قفلها رجوع کنید)
مثلاً برای کاری که شما میخواهید میتونید از دستور زیر استفاده کنید


Select field1 from table1 (xlock)
هر جا خواستید select کنید از دستور بالا استفاده کنید. اگه 2 تا کاربر همزمان دستور بالا رو اجرا کنند تا اولین select تموم نشه، select دومی اجا نخواهد شد. چون قفل گذاری کرده اید. برای updateو ... هم میتونید استفاده کنید.مثلاً

UPDATE table1
WITH (TABLOCK)
SET field1 = value

MOJTABAATEFEH
پنج شنبه 08 مهر 1389, 18:38 عصر
من ميخواهم بدونم آيا ميشه ركوردهاي يك جدول را قفل كرد يا خير .
يعني وقتي دو كاربر ميخواهند به صورت همزمان به يك ركورد دسترسي داشته باشند اجازه دسترسي به يكي از آنها داده نشود .
در صورت امكان چنين چيزي ، نحوه مديريت آن به چه صورتي است .

دوست عزیز کتابهای فارسی خیلی خوبی تو این زمینه هست یکیشون که خوب توضیح داده
آموزش Transact sql مربوط به انتشارات نص هست که توی سایتش هم هست می تونید ببینید


موفق باشید

AminSobati
جمعه 09 مهر 1389, 12:10 عصر
من ميخواهم بدونم آيا ميشه ركوردهاي يك جدول را قفل كرد يا خير .
يعني وقتي دو كاربر ميخواهند به صورت همزمان به يك ركورد دسترسي داشته باشند اجازه دسترسي به يكي از آنها داده نشود .
در صورت امكان چنين چيزي ، نحوه مديريت آن به چه صورتي است .

سلام دوست عزیزم،
ضمن اینکه پستهای قبلی رو تایید میکنم و توصیه دارم در این زمینه مطالعه بفرمایید (چون گسترده است و توضیحش در Forum غیر ممکن)، باید عرض کنم بحث Lock رو میشه از دو جنبه بررسی کرد. یکی مکانیزمی که خود SQL Server استفاده میکنه، برای ایزوله کردن عملیات کاربرهای همزمان، و یکی پروسه ای که برنامه نویس استفاده میکنه برای شبیه سازی Lock با اهداف متفاوت. روی جنبه اول با مطالعه میتونین اشراف پیدا کنین ولی برای دومی دیدن این لینک شاید مفید واقع بشه:

http://www.barnamenevis.org/forum/showthread.php?t=66789