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

اگر شما در یک کوئری SQL یک تغییری در دیتابیس بصورت اشتباه انجام داده اید و دستور Commit را زده اید و می خواهید تغییرات رکورد به حالت پیش فرض قبل از update برگردد می توانید از query flashback استفاده کنید.

شما از طریق query flashback می توانید تغییرات رکورد هایی جداول را به زمانی که داده های تغییر نکرده است برگردانید و به زمانی که رکوردها و مقادیر بوده اند برگردانید.

Query flashbacks می توانند براساس دو پارامتر زمان datetime یا (SCN) system change number تنظیم بشوند و دیتا را فراخوانی کنند.

دیتابیس از طریق شماره SCN که پیگیر تغییرات در دیتابیس می باشد می توانید از طریق query flashback داده ها را به داده های که تغییر نیافته و شماره SCN مورد نظر می برد.

دادن دسترسی به کاربر برای استفاده از Flashbacks

Flashbacks ها از طریق زبان برنامه نویسی PL/SQL و استفاده از پکیج DBMS_FLASHBACK در دسترس می باشد . برای استفاده شما باید دسترسی EXECUTE داشته باشید. مثال زیر ورود یه کاربر sys و دادن دسترسی اجرا به پکیج.

آموزش اوراکل

استفاده از پارامتر زمان Time در Query Flashbacks

با شرح مثالی ساده جهت کاربا این پکیچ آشنا می شویم و در این مثال ما ایتدا با کاربری به نام store به دیتابیس متصل شده و از جدولی به نام products نمایش داده ودستور Select را اجرا می کنیم.

آموزش Oracle

در مرحله بعد می خواهیم با استفاده از دستور Update تغییری در داده های جدول می دهیم و قیمت محصولات را برای id کمتر ۵ تغییر داده و بعد از آن Commit تغییرات دائمی کرده و بروز میکنیم و مجدد از جدولی به نام products نمایش داده ودستور Select را اجرا می کنیم.

آموزش اوراکل

در مرحله بعد برای بازگرانی داده ها و تغییرات انجام شده باید پروسیجری به نام ()DBMS_FLASHBACK.ENABLE_AT_TIME را اجرا کنید که کار آن flashback می کند داده ها به مدت زمانی که در ورودی تابع داده شده است. این پروسیجر ()DBMS_FLASHBACK.ENABLE_AT_TIME مقدار زمان را یه عنوان ورودی می پذیرد که در مثال زیر مقدار SYSDATE – 10 / 1440 را وارد کردیم که به معنی ۱۰ دقیقه گذشته می باشد.

نکته : ۱ روز ۲۴ ساعت است و در ۶۰ ضرب شود می شود یک روز ۱۴۴۰ دقیقه . بنابراین SYSDATE – 10 / 1440 به معنی ۱۰ دقیقه گذشته می باشد.

زمانی که دستور بالا را اجرا کنید داده های جداول به ۱۰ دقیقه گذشته می رود و هر تغییری که در این بازه انجام داده باشید به روال قبل می رود برای این منظور اگر شما مجدد از جدولی به نام products نمایش داده ودستور Select را اجرا کنید میبینید که داده های جدول همان مقادیر قبل از دستور Update می باشد و تغییرات برگشته اند و اصطلاحا rollback شده اند.

آموزش اوراکل

برای اینکه روال کار دیتابیس و تغییرات داده ها در جداول به روال عادی بازگردد حتما باید از طریق پکیج ()DBMS_FLASHBACK.DISABLE دستور flashback را غیرفعال کنید.

آموزش اوراکل

و در این مرحله اگر مجدد از جدولی به نام products نمایش داده ودستور Select را اجرا کنید میبینید که داده های جدول همان مقادیر بعد از دستور Update می باشد.

آموزش اوراکل

استفاده از پارامتر زمان System Change Number در Query Flashbacks

در Flashbacks شما می توانید از طریق شماره System Change Number و یا SCN که در فایل Control file اوراکل تنظیم شده است دیتا و داده های قبلی جداول را بدست آورید به دلیل اینکه نرم افزار اوراکل از طریق شماره SCNs تمامی تغییرات دیتابیس را ردیابی و پیگیری می کند و با هر تغییر در دیتابیس یک شماره SCN را بروز می کند و شما از طریق شماره SCN هایی که به تریتب به روز می شود می توان داده های قبلی را واکشی کرد.

به عنوان مثال ما از طریق دستور ()DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER زیر شماره SCN مورد نظر را بدست آورده و در متغیری قرار می دهیم .

آموزش اوراکل

به عنوان مثال ما در جدول products یک رکورد از طریق دستور Insert درج می کنیم و سپس از طریق دستور Commit تغییرات را کامل ثبت و دائمی می کنیم و در مرحله بعد از جدول products را نمایش می دهیم تا مطمئن شویم دکورد با موفقیت ثبت شده است.

آموزش اوراکل

در این مرحله می خواهیم عملیات Flashback را انجام دهیدم و از طریق شماره SCN بدست آمده و دادن شماره SCN به عنوان ورودی پروسیجری به نام ()DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER می توانید به داده ها و تغییراتی که در آن زمان اوراکل از شماره SCN وارد شده استفاده میکند نمایش داده شود و برگردانده شود.

آموزش اوراکل

برای اینکه متوجه شویم دستور flashback با موفقیت انجام شده است اگر مجدد از جدول products را نمایش دهیم می بینیم دکوردی ما درج کرده بودیم Insert نشده است و در این جدول همانند گذشته هیچ کوردی نمی باشد و تغییرات به روال عادی rollback شده است.

آموزش اوراکل

برای اینکه روال کار دیتابیس و تغییرات داده ها در جداول به روال عادی بازگردد حتما باید از طریق پکیج ()DBMS_FLASHBACK.DISABLE دستور flashback را غیرفعال کنید.

آموزش اوراکل

و در این مرحله اگر مجدد از جدولی به نام products نمایش داده ودستور Select را اجرا کنید میبینید که همان یک رکوردی که Insert کرده بودیم درج شده است.

آموزش اوراکل

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