View Full Version : جلوگیری از همزمانی در پایگاه داده
b.mahsa
چهارشنبه 13 مرداد 1389, 21:13 عصر
با سلام خدمت اساتید .
من یک query دارم که تحت شبکه اجرا میشه.
query من به شکل زیر ه
select max(code) from tableاگر این query همزمان توسط دو client فرستاده بشه . عددی که به هر دو client داده میشه یکی هست. در حالی که باید کد منحصر به فرد باشه.
چه طوری میتونم جلوی این همزمانی رو بگیرم؟؟؟؟
شنیدم که باید از یک سری قفل مثل shared lock و update lock استفاده کنم. اما نحوه استفادش رو نمیدونم. ممنون میشم اگر راهنماییم کنین....
ricky22
چهارشنبه 13 مرداد 1389, 22:10 عصر
از GUID استفاده کن
Dim sGUID As String
sGUID = System.Guid.NewGuid.ToString()
MessageBox.Show(sGUID)
b.mahsa
چهارشنبه 13 مرداد 1389, 22:14 عصر
ممنون از پاسختون . ولی اعداد باید ترتیبی و پشت سر هم باشن. از guid نمیشه استفاده کرد.
باید جلوی همزمانی رو تو sql بگیرم.
L_eskandary
چهارشنبه 13 مرداد 1389, 22:35 عصر
سلام دوست عزیز
شما با از Isolation level استفاده کنید و برا اینکار هم کافیه که query مورد نظرتون رو به صورت زیر بنویسین :
set transaction isolation level Serializeble
begin transaction
.
.
.
commit
البته انواع مختلف قفل کردن رو داریم که serializable سخت گیرانه ترین روش هست...
موفق باشین.
b.mahsa
چهارشنبه 13 مرداد 1389, 22:58 عصر
ممنون بابت پاسخ مفیدتون.
این کدی که گفتین رو مثل store procedure باید تو محیط sql server بنویسم.؟
این کد از requeste همزمان جلو گیری می کنه؟
می خوام که مقدار کد رو به دو client که همزمان در خواست کردن. مساوی نده.
برای update چی؟ اگر رکوردی در حال update باشه و من بخوام که تو این وضعیت. کسی اون رو رو استفاده نکنه....
AminSobati
چهارشنبه 13 مرداد 1389, 23:47 عصر
سلام دوست عزیزم،
پیشنهاد میکنم در یک جدول دیگه آخرین عددی که تولید کردین رو نگهداری کنین تا فقط این جدول Lock بشه. موقع خواندن و Update کردن این جدول کمکی، کار باید در Transaction باشه تا دو کاربر همزمان این مقدار رو نخونن. مثلا برای SELECT از TABLOCKX استفاده کنین و بعد Update انجام بدین
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.