هیچ خواندن یا نوشتن به جز در یک معامله رخ نمی دهد. هر دستوری که به پایگاه داده دسترسی پیدا کند (اساسا هر دستور اس کیو ال به جز چند عبارت پراگما) به طور خودکار یک تراکنش را شروع می کند اگر کسی قبلا در حال اجرا نباشد. معاملات به طور خودکار شروع متعهد زمانی که بیانیه گذشته پس از اتمام.
معاملات را می توان به صورت دستی با استفاده از دستور شروع شروع کرد. چنین معاملاتی معمولا تا دستور بعدی مرتکب یا بازگشت ادامه می یابد. اما یک معامله نیز عقبگرد خواهد شد اگر پایگاه داده بسته است و یا اگر یک خطا رخ می دهد و الگوریتم حل تعارض عقبگرد مشخص شده است. اسناد و مدارک در بند درگیری در برای اطلاعات بیشتر در مورد الگوریتم حل تعارض عقبگرد را ببینید.
پایان معامله یک نام مستعار برای مرتکب است.
معاملات ایجاد شده با استفاده از شروع. مرتکب انجام لانه نیست. برای معاملات تو در تو, استفاده از نقطه ذخیره و انتشار دستورات. بند "برای ذخیره نام نقطه" دستور برگشت نشان داده شده در نمودار نحوی بالا فقط برای معاملات ذخیره نقطه قابل استفاده است. تلاش برای فراخوانی دستور شروع در یک تراکنش بدون توجه به اینکه معامله با نقطه ذخیره یا شروع قبلی شروع شده باشد با خطایی روبرو خواهد شد. دستور متعهد و دستور بازگشت بدون بند به همان کاری که در معاملات نقطه ذخیره انجام می دهند همان کاری است که با معاملات شروع شده توسط شروع انجام می دهند.
2.1. خواندن تراکنشها در مقابل نوشتن تراکنشها
پشتیبانی از معاملات متعدد به عنوان خوانده شده به طور همزمان از اتصالات پایگاه داده جداگانه, احتمالا در موضوعات و یا فرایندهای جداگانه, اما تنها یک معامله نوشتن به طور همزمان.
معامله خواندن فقط برای خواندن استفاده می شود. معامله نوشتن اجازه می دهد تا هر دو خواندن و نوشتن. معامله خوانده شده توسط یک بیانیه انتخاب شده شروع می شود, و یک معامله نوشتن با عباراتی مانند شروع می شود ایجاد کردن, حذف, رها کردن, درج, یا به روز رسانی (به طور جمعی "نوشتن اظهارات"). اگر بیانیه نوشتن رخ می دهد در حالی که یک معامله به عنوان خوانده شده فعال است, سپس معامله به عنوان خوانده شده به یک معامله نوشتن در صورت امکان به روز رسانی. اگر برخی از اتصال به پایگاه داده های دیگر در حال حاضر تغییر پایگاه داده و یا در حال حاضر در روند اصلاح پایگاه داده, سپس به روز رسانی به یک معامله نوشتن امکان پذیر نیست و بیانیه نوشتن با شکست مواجه خواهد شد.
در حالی که یک معامله به عنوان خوانده شده فعال است, هر گونه تغییر در پایگاه داده است که توسط اتصالات پایگاه داده جداگانه اجرا خواهد شد اتصال به پایگاه داده است که شروع معامله به عنوان خوانده شده دیده نمی. اگر اتصال پایگاه داده ایکس یک تراکنش خوانده شده را نگه می دارد, ممکن است برخی دیگر از اتصال پایگاه داده بله ممکن است محتوای پایگاه داده را تغییر دهد در حالی که تراکنش ایکس هنوز باز است, با این حال ایکس نمی تواند این تغییرات را تا پس از پایان معامله مشاهده کند. در حالی که معامله خوانده شده خود را فعال است, ایکس ادامه خواهد داد برای دیدن یک تصویر لحظهای تاریخی از پایگاه داده قبل از تغییرات اجرا شده توسط و.
2.2. معاملات معوق, فوری, و منحصر به فرد
معاملات می تواند به تعویق افتاده, فوری, و یا منحصر به فرد. رفتار پیش فرض معامله به تعویق افتاده است.
به تعویق افتاده به این معنی است که معامله در واقع شروع نمی شود تا زمانی که پایگاه داده برای اولین بار قابل دسترسی باشد. داخلی, شروع بیانیه معوق صرفا مجموعه پرچم در اتصال به پایگاه داده است که خاموش خودکار مرتکب که به طور معمول رخ می دهد که بیانیه گذشته پس از اتمام. این باعث می شود معامله ای که به طور خودکار شروع به ادامه می کند تا زمانی که یک مرتکب صریح یا عقبگرد یا تا زمانی که عقبگرد توسط یک خطا یا یک بند برگشت درگیری ایجاد شود. اگر بیانیه اول پس از شروع به تعویق افتاده است را انتخاب کنید, سپس یک معامله به عنوان خوانده شده شروع شده است. اظهارات نوشتن بعدی خواهد معامله به یک معامله نوشتن در صورت امکان ارتقا دهید,و یا بازگشت اگر بیانیه اول پس از شروع معوق بیانیه نوشتن و سپس نوشتن معامله شروع شده است.
فوری باعث اتصال به پایگاه داده برای شروع یک ارسال جدید بلافاصله, بدون انتظار برای یک بیانیه نوشتن. شروع فوری ممکن است با مساحت شکست اگر یکی دیگر از معامله نوشتن در حال حاضر در اتصال به پایگاه داده دیگر فعال است.
انحصاری مشابه فوری است زیرا یک معامله نوشتن بلافاصله شروع می شود. منحصر به فرد و فوری در حالت وال هستند, اما در دیگر حالت های روزنامه نگاری, منحصر به فرد مانع از اتصالات پایگاه داده های دیگر از خواندن پایگاه داده در حالی که معامله در جریان است.
2.3. معاملات ضمنی در مقابل صریح
یک تراکنش ضمنی (تراکنشی که به صورت خودکار شروع می شود و نه معامله ای که با شروع شروع می شود) به طور خودکار با اتمام بیانیه فعال گذشته انجام می شود. یک بیانیه پس از اتمام زمانی که مکان نما گذشته خود را بسته, که تضمین شده است به اتفاق می افتد زمانی که بیانیه تهیه شده است تنظیم مجدد و یا نهایی. برخی از اظهارات ممکن است" پایان " به منظور کنترل معامله قبل از تنظیم مجدد و یا نهایی, اما هیچ تضمینی وجود ندارد از این وجود دارد. تنها راه برای اطمینان حاصل شود که یک بیانیه "به پایان رسید" استناد به مساحت 3_ تنظیم مجدد() یا مساحت 3_ نهایی کردن() در این بیانیه است. یک مربع باز 3_ بلوب که برای ورودی/خروجی حباب افزایشی استفاده می شود نیز به عنوان یک عبارت ناتمام محسوب می شود. 3_بلوب پس از اتمام زمانی که بسته است.
دستور صریح مرتکب اجرا می شود بلافاصله, حتی اگر در انتظار اظهارات را انتخاب کنید وجود دارد. با این حال, اگر عملیات نوشتن در انتظار وجود دارد, دستور مرتکب با یک کد خطا شکست مواجه خواهد شد.
تلاش برای اجرای تعهد همچنین ممکن است منجر به یک کد بازگشت مساحت _ شلوغ شود اگر یک موضوع یا فرایند دیگر دارای اتصال خواندن باز باشد. هنگامی که مرتکب نتواند در این راه, معامله فعال باقی می ماند و مرتکب می تواند بعد دوباره پس از خواننده تا به حال فرصتی برای روشن.
در نسخه های بسیار قدیمی از صفحه (قبل از نسخه 3.7.11 - 2012-03-20) عقبگرد با کد خطا شکست مواجه خواهد شد اگر هر گونه نمایش داده شد در انتظار وجود دارد. در نسخههای جدیدتر اسکی لایت برگشت ادامه پیدا میکند و گزارشهای معلق اغلب سقط میشوند و باعث میشوند خطای اسکی لایت یا اسکی لایت برگشت داده شود. در نسخه 3.8.8 (2015-01-16) و بعد از خواندن در انتظار عملکرد پس از عقبگرد تا زمانی که عقبگرد می کند طرح پایگاه داده را تغییر دهید ادامه خواهد داد.
اگر حالت ژورنال پراگما روی خاموش تنظیم شود (بنابراین پرونده ژورنال برگشت را غیرفعال کنید) سپس رفتار دستور برگشت تعریف نشده است.
3. پاسخ به اشتباهات در یک معامله
اگر انواع خاصی از خطاها در یک معامله رخ می دهد, معامله ممکن است یا نه ممکن است نورد به طور خودکار. خطاهایی که می توانند باعث برگشت خودکار شوند عبارتند از:
- متن کامل: دیتابیس یا دیسک کامل
- خطای ورودی/خروجی دیسک
- برچسب ها: دیتابیس در حال استفاده توسط یک پروسه دیگر
- نام: خارج از حافظه
اسکی لایت برای تمام این اشتباهات تلاش می کند تا تنها یک گزاره را که در حال کار بود خنثی کند و تغییرات را از اظهارات قبلی در همان تراکنش دست نخورده باقی بگذارد و به معامله ادامه دهد. با این حال, بسته به بیانیه در حال ارزیابی و نقطه ای که خطا رخ می دهد, ممکن است لازم باشد برای اسکی لیت به عقبگرد و لغو کل معامله. یک برنامه کاربردی می توانید بگویید که البته از عمل با استفاده از رابط ج-زبان کمیته خودکار 3_گت گرفت.
توصیه می شود برنامه ها با صدور صریح دستور بازگشت به خطاهای ذکر شده در بالا پاسخ دهند. اگر معامله در حال حاضر به طور خودکار توسط پاسخ خطا نورد شده است, سپس فرمان عقبگرد با خطا شکست مواجه خواهد شد, اما هیچ ضرری است که توسط این ایجاد می شود.
نسخههای بعدی اسکی لایت ممکن است لیستی از خطاهایی که ممکن است باعث عقبگرد خودکار تراکنشها شوند را گسترش دهند. نسخه های بعدی اسکی لایت ممکن است پاسخ خطا را تغییر دهند. به طور خاص ما می توانیم رابط کاربری را در نسخه های بعدی اسکی لایت ساده کنیم و باعث شود خطاهای بالا مجبور به بازگشت بدون قید و شرط شوند.
این صفحه اخرین اصلاح شده در 2020-07-09 15:12:58 تغییر یافته است