الأربعاء، 8 أبريل 2009

ماذا تعرف عن flashback queries

تقدم أوراكل هذا النوع من الاستعلامات كجزء من نموذج تماسك البيانات , بفرض أنك قمت بطريق الخطأ حذف أو تعديل بيانات جدول ما ومن ثم باصدار commit, كلنا نعلم انك لن تستطيع استرجاع البيانات السابقة بعد إصدار هذا الأمر , ولكن ها تعلم أنك تستطيع إستعادة هذه البيانات باستخدام ما يسمى flashback query كما انك تستطيع إستعادتها .

لكي تدعم هذا النوع من الاستعلامات او ما يسمى 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 .

عزيزي القارئ : لقد وضعت بين يديك أداة رائعة من أدوات أوراكل والموضوع طويل وله شرح وتفصيل وقد شرحت لك فقط الفكرة وهناك الكثير والكثير عن هذا الموضوع وتستطيع البحث عن الموضوع على شبكة الأنترنت والاستفادة من هذه الأداة .

هناك تعليق واحد:

Powered By Blogger