لكي تدعم هذا النوع من الاستعلامات او ما يسمى flashback query لا بد من أن تكون قاعدة البيانات لديك تستخدم ما يسمى system-managed undo وهي ميزة قدمت في الإصدار oracle 9i للإدارة الآلية لما يسمى rollback segment .
Time-based flashback example:
لديك مثلا الجدول emp ويحتوي على 45 سجل
Select * from emp;
وبفرض أنك قمت بتنفيذ هذه التعليمة وهي حذف البيانات مع التثبيت
Delete from emp;
Commit;
إذا قمت بإصدار هذا الاستعلام فان النتيجة ستكون مساوية للصفر
select count(*) from emp;
الآن سوف نستخدم flashback query لاستعادة هذه البيانات جرب التعليمة التالية :
select count(*) from emp
as of timestamp (sysdate -5/1440);
ستجد أن النتيجة = 45
كيف نستعيد هذه البيانات ؟
تستطيع إستعادة البيانات إلى جدول جديد , وكما تعلم أنه لدينا في اليوم 1440 دقيقة وبالتالي فأن (sysdate-5/1440) سوف تشير الى الخمسة الدقائق التي مضت , فإذا كانت عملية الحذف تمت قبل أقل من خمس دقائق فإنك تستطيع إستعادتها بالكود التالي :
create table emp_w
as select * from emp
as of timestamp (sysdate -5/1440);
select * from emp_w;
ستجد انه تم إستعادة بياناتك الى الجدول الجديد , لنفترض أنه قد مضى على تنفيذ تعليمة الحذف أكثر من 20 دقيقة تستطيع استخدام الكود التالي بتغيير عدد الدقائق :
create table emp_w
as select * from emp
as of timestamp (sysdate -30/1440);
وبهذا تكون قد استعدت بياناتك
ملاحظة : إذا كان إصدار أوراكل لديك 9.0.1 فأن الكود السابق لن يعمل معك , وأنت بحاجة لاستخدام الاجرائيات الموجودة في الحزمة DBMS_FLASHBACK .
عزيزي القارئ : لقد وضعت بين يديك أداة رائعة من أدوات أوراكل والموضوع طويل وله شرح وتفصيل وقد شرحت لك فقط الفكرة وهناك الكثير والكثير عن هذا الموضوع وتستطيع البحث عن الموضوع على شبكة الأنترنت والاستفادة من هذه الأداة .
انت برنس
ردحذفنتمنى وننتظر المزيد