در این قسمت از آموزش اوراکل بعد از آشنایی با Database Transaction قصد داریم آموزش خصوصیات یک ACID Transaction را یاد بگیریم.

در آموزش قبلی در مورد تراکنش Transaction صحبت کردیم و گفتیم که تراکنش ها در واقع واحدها منطقی از فرآیند و کار هستند که به مجموعه و گروهی از دستورات و کوئری های SQL مرتبط به هم می باشد که در نهایت این دستورات یا Commit می شود و یا Rollback می شود.

در تئوری دیتابیس اگر بخواهیم تعریف کامل و جامع تری در مورد transaction و وضعیت transaction تراکتش ها بیشتر توضیح دهیم می توانیم transaction تراکنش ها را به چهار ۴ خصوصیت اساسی و اصلی که یک transaction می تواند داشته باشد معرفی کنیم که به این ۴ خصوصیت اصطلاحا ACID می گویند.

ACID نمایش دهنده ۴ خصوصیت یک transaction به شرح ذیل می باشد:

  • Atomic : تراکنش ها Transactions مانند اتم atomic هستند به این معنی که هر دستور SQL شاملی از تراکنش transaction ساخته شده که بصورت مستقل کار می کنند.
  • Consistent : تراکنش ها Transactions این اطمینان را می دهد که وضعیت دیتابیس همیشه ثابت Consistent بماند ، این به معنی که وضعبت دیتابیس چه در حالتی که transaction در حال اجرا و شروع شدن است و جه در حالتی که transaction به اتمام برسد وضعیت transaction همیشه ثابت است و در نتیجه وضعیت دیتابیس همیشه ثابت Consistent می ماند.
  • Isolated : تراکنش ها transactions های جدا از هم هیچ گونه تداخلی با سایر تراکنش ها transactions ندارند.
  • Durable : بعد از این که یک transaction تراکنش Commit می شود تغییراتی که در دیتابیس انجام می شود تماما حفظ شده حتی اگر سیستم عاملی که روی آن نرم افزار اوراکل و دیتابیس نصب است crash کند.

نرم افزار دیتابیس اوراکل از خصوصیت ACID در تراکنش ها استفاده می کند برای قابلیت و امکانات گسترده Recovery اطلاعات به منظور زمان هایی که سیستم و دیتابیس به خطا crash میکند برای Restore کردن دیتابیس استفاده کند.

تراکنش های هم زمان – Concurrent Transactions

نرم افزار دیتابیس اوراکل این اجازه را می دهد که هر تعداد کاربر session می تواند به دیتابیس متصل شود و با دیتابیس تعامل داشته باشد و هر در لحظه چندین تراکنش transaction را اجرا کند که اصطلاحا به این تراکنش ها transaction تراکنش های هم زمان Concurrent Transactions می نامند.

اگر کاربران در حال اجرای تراکنش transaction هستد که روی جدولی تاثیر می گذارد که همان جدول از transaction دیگری تاثیر گرفته است transaction دوم باید منتظر بماند تا transaction اول transaction را commit کند تا transaction دوم اجرا شود.

به عنوان مثال ما اگر دوی دیتابیس روی جدول Customer از دو تراکنش transaction اول به نام T1 و تراکنش دوم به نام T2 تغییری داشته باشیم روال کار transaction به شرح ذیل می باشد :

  • تراکنش های T1 و T2 از جدول customer بصورت همزمان select زده و تمامی رکورد های جدول را دریافت می کنند.
  • تراکنش T1 روی جدول Customer دستور Insert را اجرا کرده و یک رکورد به جدول اضافه می کند اما تراکنش T1 هنوز دستور Commit را اجرا نکرده است.
  • تراکنش T2 مجدد از جدول customer دستور select زده و تمامی رکورد های جدول را دریافت می کند اما رکوردی که تراکنش T2 رکوردی که تراکنش T1 اضافه کرده است را نمی بیند تا زمانی که دستور Commit را بزند.
  • تراکنش T1 دستور Commit را می زند و رکوردی اضافه شده به جدول در دیتابیس دائمی و ثایت شده است.
  • تراکنش T2 مجدد از جدول customer دستور select زده و تمامی رکورد های جدول را دریافت می کند و یک رکورد اضافه شده ی که تراکنش T1 انجام داده بود را می بیند.
  • بصورن خلاصه تراکنش T2 تغییرات دیتابیسی که ایجاد شده است تا زمانی که تراکنش T1 دستور Commit را نزد نمی بیند.
آموزش اوراکل

قفل کردن تراکنش ها – Transaction Locking

به جهت پشتیبانی از تراکنش های همزمان concurrent transactions, نرم افزار دیتابیس اوراکل این اطمینان را می دهد که هر دیتایی که در جداول می باشد valid و معتبر می باشد به این منظور اوراکل از lock و عملیات قفل گذاری تراکنش ها استفاده میکند.

مثال زیر نمایش دهنده روال عملیات Transaction Locking توسط transaction به نام های T1,T2 که روی جدول customer تغییراتی را اعمال می کند به شرح ذیل می باشد :

  • تراکنش T1 روی جدول customer یک دستور update می زند اما دستور Commit را اجرا نمی کند، در نتیجه رکورد های بروز شده در جدول توسط نراکنش T1 اصطلاحا “locked” شده است.
  • تراکنش T2 هم به همان روال می خواهد روی رکوردهای جدول Customer دستور Update را اجرا کند اما نمی تواند چون رکورد های جدول توسط تراکنش T1 قفل شده است و امکان نیست و باید منتظر بماند تا زمانی که تراکنش T1 دستور Commit را ببیند و رکوردها از قفل خارج شود.
  • تراکنش T1 دستور Commit را زده و رکورد ها از lock قفل خارج شده و آزاد شده و عملیات بروز رسانی توسط T2 را انجام داده و توسط تراکنش T2 قفل می شود.

اطلاعات بیشتر در مورد ACID Transactions