نمایش نتایج 1 تا 11 از 11

نام تاپیک: Transaction

  1. #1

    Transaction

    من برنامه ای دارم که باید یک سری اعمال رو پشت سر هم انجام بده و در صورتی که در یک مرحله با مشکل مواجه شد متوقف بشه و اعمالی که توی مراحل قبل انجام شده به حالت اولش برگرده.یعنی به عبارتی یا کل کار با هم انجام بشه و یا انجام نشه!
    چطور باید این روش رو پیاده سازی کنم؟
    از Transaction استفاده کردم ولی با مشکل دیگه ای روبرو شدم اینکه فکر میکنم اون Table خاص رو Lock میکنه و بقیه Function ها با مشکل مواجه میشن حین اینکه من درگیر کار با اون هستم.
    ممنون میشم اگر راهنماییم کنید.
    (نمیدونستم توی بخش Sql Server سوالم رو مطرح کنم یا اینجا.اگر اشتباه کردم ببخشید)

  2. #2
    دقیق تر توضیح بفرمایید که قصد انجام چه کاری رو دارید.

  3. #3
    برنامه من شامل چند مرحله است.1و2و3:
    در مرحله یک عددی مشخص میشه.
    در مرحله 2 به تعداد اون عدد Itemاز جدولی کم و به جدولی اضافه میشه.
    در مرحله 3 اون رکوردهایی که مرحله 1 انتخاب شده اند به عنوان پردازش شده مشخص میشوند.
    باید این مراحل رو پشت سر هم انجام بده و در صورتی که در یک مرحله با مشکل مواجه شد متوقف بشه و اعمالی که توی مراحل قبل انجام شده به حالت اولش برگرده.یعنی به عبارتی یا کل کار با هم انجام بشه و یا انجام نشه!
    امیدوارم منظورم و متوجه شده باشید.

  4. #4
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  5. #5
    اینجا دو حالت وجود داره که مبهم هست و مشخص نکردی!
    این مراحل در زمان های مختلف انجام میشن (یه چیزی مثل سبد خرید) یا همگی در یک زمان و با هم انجام میشن که در این صورت انجام مرحله ی بعد به موفقیت آمیز بودن مرحله ی قبل بستگی داره.
    اگر حالت دوم مد نظرت هست باید بگم که می تونی از ساختار BEGIN TRANSACTION و بررسی مقدار ERROR@@ در SQL Server 2000 برای COMMIT یا ROLLBACK و یا ساختار جدید TRY-CATCH در SQL Server 2005 استفاده کنی.
    حالت اول نیاز به توضیح بیشتری داره که اگر نیاز بود توضیح میدم.

    موفق باشید.

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629
    با سلام
    دلیل Lock شدن اطلاعات فاصله زمانى بین ایجاد و بسته شدن Transaction شما مى‌باشد. باید توجه داشته باشیم که کل عملیات از ایجاد Transaction تا بسته شدن آن باید به صورت پیاپى انجام شود (بدون فاصله زمانى و نیاز به تبادل اطلاعات با کاربر).
    اگر نیاز دارید عملیاتى را با فاصله انجام دهید بهتر است روشى دیگر براى آن پیدا کنید.
    مثلاً مىتوانید گردش اطلاعات را در Database نگهدارى کنید و با اضافه کردن یک ستون وضعیت اطلاع را نگهدارى کنید.

    صبا صبوحى

  7. #7
    دلیل Lock شدن اطلاعات فاصله زمانى بین ایجاد و بسته شدن Transaction شما مى‌باشد. باید توجه داشته باشیم که کل عملیات از ایجاد Transaction تا بسته شدن آن باید به صورت پیاپى انجام شود (بدون فاصله زمانى و نیاز به تبادل اطلاعات با کاربر).
    می شه لطفا توضیح بدید چرا باید کل عملیات به صورت پیاپی انجام شود؟ و یا اینکه چطور میشه عملیات بدون فاصله زمانی انجام بشن؟ و چرا نمیشه با کاربر تبادل اطلاعات داشت؟

    مثلاً مىتوانید گردش اطلاعات را در Database نگهدارى کنید و با اضافه کردن یک ستون وضعیت اطلاع را نگهدارى کنید.
    اگر هنگام این کار خطایی پیش اومد چی کار باید کرد؟ مدیریت Lock رو به چه صورتی انجام میدید؟


    دلیل Lock شدن اطلاعات فاصله زمانى بین ایجاد و بسته شدن Transaction شما مى‌باش
    آیا راهی وجود نداره که در این فاصله زمانی اطلاعات Lock نشن؟
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  8. #8
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    پست
    1,629
    نقل قول نوشته شده توسط titbasoft مشاهده تاپیک
    می شه لطفا توضیح بدید چرا باید کل عملیات به صورت پیاپی انجام شود؟ و یا اینکه چطور میشه عملیات بدون فاصله زمانی انجام بشن؟ و چرا نمیشه با کاربر تبادل اطلاعات داشت؟
    با سلام
    اگر به صورت پیاپى نباشد (یعنى بخواهى با کاربر تبادل اطلاعات انجام دهى و یا منتظر روىدادن اتفاق خاصى باشى)، Lock شدن اطلاعات باعث مى‌شود کاربران دیگر آن سیستم معطل بمانند تا کار شما تمام شود. (حالا تصور کنید که اپراتور بجاى پاسخ دادن به پرسش شما در یک DialogBox تصمیم بگیرد به آبدارخانه رفته و یک چاى براى خودش بریزد!)
    بنابراین باید بازکردن و بستن یک Transaction (چه با Commit و چه با Rollback) حتماً به صورت فرامین متوالى انجام شود.
    نقل قول نوشته شده توسط titbasoft مشاهده تاپیک
    اگر هنگام این کار خطایی پیش اومد چی کار باید کرد؟ مدیریت Lock رو به چه صورتی انجام میدید؟
    ببینید اگر قرار باشد فرامین شما به صورت پیاپى اجرا نشوند و مثلاً منتظر یک تبادل اطلاعات با کاربر هستید دیگر نمى‌توانید از Transaction استفاده کنید و باید از روش دیگرى را براى Rollback احتمالى اطلاعات (و به صورت Manual) استفاده کنید. مثلاً سطرى را که به پایگاه داده‌ى خود اضافه مى‌کنید باید یک Tag داشته باشد که به واسطه‌ى آن بدانید این سطر هنوز قطعى نشده و در برنامه بتوانید در صورت لزوم این سطر را حذف کنید.
    در کل کار خوش‌آیندى نیست، اگر مى‌توانید منطق برنامه‌ى خود را طورى تغییر دهید که نیازى به این شکل کار نباشد.

    نقل قول نوشته شده توسط titbasoft مشاهده تاپیک
    آیا راهی وجود نداره که در این فاصله زمانی اطلاعات Lock نشن؟
    نه، راهى وجود ندارد. توجه کنید به این که Transaction این امکان را به شماى برنامه‌نویس مى‌دهد که در صورت بروز برخى شرایط بتوانید آن را Rollback کنید. بنابراین اگر به صورت همزمان کاربر دیگرى بخواهد اطلاعات را بخواند آیا سطرى را که شما اضافه کرده‌اید را باید ببیند و یا نبیند؟ و دیگر این که اگر کاربر دیگرى خواست اطلاعاتى به سیستم اضافه کنید و یا تغییر دهد چه خواهد شد؟
    به این دلیل است که SQL Server اطلاعات را Lock کرده و به کاربران دیگر اجازه‌ى تغییر و حتا دیدن اطلاعات را نمى‌دهد.

    صبا صبوحى

  9. #9
    از دیتا ست استفاده کن بعد که همه چی OK شد اطلاعات دیتاست رو تو دیتابیس ذخیره کن

    اینجوری هم سرعت کار بیشتره هم احتمال خطا تقریبا صفره

  10. #10
    Transaction چیست؟ یک گروه از دستورات دیتابیس را ترنزکشن نامند اگر این دسته از دستورات رفتاری مانند یک دستور واحد از خود نشان دهند. برای بوجود آمدن یک ترنزکشن می بایست 4 صفت زیر در یک دسته دستورات وجود داشته باشد.

    1) Atomic: اتمیک بودن به این معناست که بتوان به کل مجموعه دستورات به صورت یک یونیت نگاه کرد، برای مثال برای تغیر آدرس یک مشتری به جای تغیر شهر سپس محله سپس کوچه و ... بتوان کل آدرس را به روز رسانی نمود

    2) Consistent: تمامی ارتباطات بین دیتا و دیتابیس به درستی نگهداری شوند. مثلا اگر برای محاسبه حقوق یک کارمند به جدول مالیاتی نیاز است، دیتای مربوط به مالیات کارمند مورد نظر وجود داشته باشد

    3) Isolated: تغیرات توسط کاربران دیگر بر تغیرات جاری تاثیر نداشته باشد. مثلا اگر 2 کاربر به طور کاملا همزمان تصمیم به بروز رسانی یک دیتا بگیرند یکی از این دو حالت اتفاق افتد: یا تغیرات یکی قبول شود و به دیگری پیام خطا ارسال شود یا هر دو پیام خطا بگیرند.

    4) Durable: زمانی که تغیری ایجاد شد، آن تغیر همیشگی باشد. مثلا اگر در بین انجام عملیات مشکلی برای سیستم بوجود آمد مثل قطع برق تمامی اطلاعات به حالت اولیه خود برگردند.

    قابل ذکر است که برای پیاده سازی Transaction ها در سمت کلاینت (ADO .Net) سه روش وجود دارد:
    1) متد های update و rejectchanges (و acceptchanges) از DataSet
    2) شئ Transaction از شئ Connection
    3) فضای نامی System.EnterpriseServices و کلاس ContexUnit: جهت آگاهی مختصر عرض کنم که این روش با استفاده از MS DTC از SQL Server 2000 برای شما بستری رو فراهم میکنه که شما توانایی بوجود آوردن یک ترنزشن رو بین چندین صفحه وب و یا حتی چندین Com+ Component داشته باشید. (پس حتی در وب و با در نظر گرفتن Life Time صفحات وب هم امکان تبادل اطلاعات چندگانه با کاربر و در بین صفحات مختلف در قالب یک ترنزکشن وجود دارد)

    اما.....، مهمترین نکته ای که اغلب برنامه نویسان رو گیج و گنگ میکنه و البته طراحی اون هم گاهی اوقات کاری بسیار دشوار است، طراحی مدل Lock کردن اطلاعات، در یک ترنزکشن است. بحث کنونی ما در مورد ترنزکشن های مدل دوم (شئ ترنزکشن از کانکشن) است (نه Isolation Level هایی که RDBMS هایی نظیر SqQL Server بوجود میارن. این رو به این خاطر گفتم که به علت تشابه نامی اشتباه نشن):

    برای هر ترنزکشن در زمان اجرا می توان یکی از Isolation Level های زیر (که در چند پست قبل لینکش رو توی پست دیگری تقدیم کرده بودم) رو انتخاب کرد.
    1) ReadUncommitted: رکوردهایی که در حال خوانده شدن هستند لاک نمی شوند، به این معنا که که تغیراتی که ثبت نشده اند را کاربران دیگر می بینند. پس در این حالت dirty read هم خواهیم داشت.

    2) Chaos: مانند حالت قبل است اما با این تفاوت که در زمان نوشتن اطلاعات، Isolation Level دیگر ترنزکشن های فعال روی این دیتا را چک می نماید. پس در نتیجه ترنزکشن هایی با Isolation Level قوی تر Overwrite نحواهند شد

    3) ReadCommitted: اطلاعات لاک می شوند و به محض خوانده شدن اطلاعات لاک برداشته خواهد شد. در این حالت هیچ دیتای Commit نشده ای قابل خواندن نیست اما همچنان اضافه شدن، حذف شدن و تغیر یک دیتا مجاز است. (این حالت پبش فرض است)

    4) RepeatableRead: رکورد در طول مدت ترنزکشن لاک هست

    5) Serializable: کل اطلاعات موجود درخواست شده اعم از رکورد مربوطه و دیگر اطلاعات لاک خواهند شد و ممکنه اون مشکلی که شما در مورد کارمندی که حوس قهوه به سرش زده بود پیش بیاد

    پس:
    1) در زمان ترنزکشن با کلاینت نتنها میشه تبادل داشت بلکه باید تبادل داشت (چه دیتا رو از دست کاربر بگیریم چه چند کامند پشت سر هم اجرا بشن) در غیر این صورت ترنزکشن معنایی نداره (البته باز هم ذکر می کنم که کا داریم ترنزکشن ها رو روی کلاینت می بینیم نه روی سرور مثل SQL Server)
    2) نگهداری گردش اطلاعات در دیتابیس رو ترنزکشن نمی گن چون اون چهار صفت رو نداره
    3) الزاما در زمان زندگی یک ترنزکشن اطلاعات لاک نمیشن و این کاملا بستگی به طراحی نرم افزار داره

    موفق باشید
    هر که بر مرکب باطل نشیند ، در سراى پیشمانى فرودش مى‏آورند

  11. #11
    شما یک موقع یک صفحه فاکتور داری میسازی یک فاکتور یکسری اطلاعات داره که 2 بخش است

    1- بالای فاکتور شامل : شماره فاکتور - نام خریدار - و 00000
    2- بدنه فاکتور شامل اجناس و قیمتهاشون و ....

    حالا فرض کنید بالای فاکتور به هر دلیلی ثبت نشه دیگه بقیش بدرد نمی خوره . چون سر رکوردهای نام کالا و .... بی کلاه میمونه و ما باید با همین تراکنشها اونها رو مدیریت کنیم

    -----------------------------------------------------------------------------------------------

    حالت 2 :
    میخواهی یک قسمت فعلا ثبت بشه بقیش برای بعد حالا ممکنه 2 روز بعد باشه یا 2 دقیقه بعد

    بگو کدام حالت رو میخواهی تا هم توی sql هم net. یادت بدم .

تاپیک های مشابه

  1. پیغام Transaction Cannot ......
    نوشته شده توسط nashkani در بخش SQL Server
    پاسخ: 2
    آخرین پست: سه شنبه 06 بهمن 1388, 12:00 عصر
  2. خطا در ثبت اطلاعات توسط transaction
    نوشته شده توسط hasti.lm در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: سه شنبه 18 دی 1386, 19:58 عصر
  3. سوال در مورد transaction
    نوشته شده توسط miladr در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: سه شنبه 18 دی 1386, 10:26 صبح
  4. اشکال در Transaction
    نوشته شده توسط dontcare در بخش VB.NET
    پاسخ: 6
    آخرین پست: چهارشنبه 28 آذر 1386, 15:16 عصر
  5. سیستم سه لایه - استفاده از Transaction
    نوشته شده توسط Mrs.Net در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 05 آذر 1386, 09:43 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •