أولا : Falshback table command :
تستطيع إستعادة آخر حالة للجدول في حال حدوث خطأ بشري أو خطأ بواسطة تطبيق (application) ما , حيث أن أوراكل لا تستطيع استعادة الجدول إلى آخر حالة كان فيها بواسطة أي أمر أو عملية DDL التي تغير ببنية هذا الجدول .
ملاحظة : لا بد أن تكون قاعدة البيانات تستخدم ما يسمى Automatic Undo Management(AUM) لكي تستخدم الأمر flashback table , وقدرتك على استعادة البيانات في جدول محدودة بعدد ال undo المحتفظ به في ال tablespace وكذلك محدود بإعدادات البارامتر (UNDO_RETENTION) الموجود في ملف تهيئة قاعدة البيانات init.ora .
لا تستطيع استخدام rollback بعد أن تقوم بتنفيذ flashback table , ولكن تستطيع أن تنفذ flashback table مره أخرى ولا بد من أن تحدد الوقت قبل الوقت الحالي (أي الوقت الذي قمت فية بتنفيذ الأمر الأول) .
ملاحظة : لا تنسى ان تسجل System Change Number (SCN) قبل أن تنفذ أمر flashback table .
السماحيات المتطلبة (Privileges Required) :
يجب أن تمتلك سماحية FLASHBACK objectsعلى الجدول أو FLASHBACK ANY TABLE, كما يجب أن تمتلك صلاحية select ,insert ,delete ,alter object على الجدول الذي تريد استعادته .
كيف تستعيد جدول :
بفرض لدينا الجدول Employees , وبفرض أنك بالخطأ قمت بحذف هذا الجدول بتعليمة drop , وهذا يمكن أن يحدث عندما يكون لدى المستخدم صلاحية حذف الجدول وبفرض ان أصرت التعليمة التالية :
Drop table employees cascade Constraints;
إذن كيف تستطيع استعادة هذا الجدول ؟ في أوراكل 10g , إن الجدول المحذوف لا يختفي بشكل كامل , حيث أن Blocks تبقى موجودة في ال tablespace الذي ينتمي إليه الجدول , وهذا يعني أنه لا يزال يشغل حيزا من حصتك من هذا ال tablespace , أنت تستطيع أن تستعيد الأغراض المحذوفة بالاستعلام من RECYCLEBIN view الموجود في ال data dictionary
Select * from recyclebin;
عزيزي القارئ هذا الاستعلام يعيد لك كل الأغراض المحذوفة وسوف تلاحظ أن object_name سوف يكون مختلف في إصدارات أوراكل .
بهذا الاستعلام ستجد تفاصيل عن الغرض المحذوف بما في ذلك اسمه الاصلي original_name وغيرها من التفاصيل .
عزيزي القارئ أن REcyclebin view هي عبارة عن مرادف (Synonym) لـ user_recyclebin view والتي تظهر كل السجلات الخاصة بهذا المستخدم كما أن ال DBA يستطيع رؤية كل الاغراض المحذوفة بواسطة DBA_RECYCLEBIN view .
كما لاحظنا سابقا أننا قمنا بحذف الجدول employees وكل القيود المرتبطة به , ولكنها لا تزال موجودة للاستعادة ,عندما تنفذ الاستعلام السابق ستلاحظ وجود dropscn المستخدمة لحذف الغرض المحدد, أنت تستطيع إستخدام flashback table to before drop لاستعادة هذا الجدول من سلة المحذوفات :
Falshback table employees to before drop;
وبهذا تكون قد استعدت الجدول مع كل البيانات والفهارس والاحصائيات المرتبطة به كما ستلاحظ :
Select count(*) from employees;
عزيزي القارئ : دعنا نناقش التالي بفرض أنك قمت بحذف الجدول employees وقبل ان تستعيدة قمت بإنشاء جدول جديد بنفس الاسم ومن ثم قمت بحفة ماذا سوف يحدث ؟
الذي سوف يحدث سوف تجد الجدولين في recyclebin وتستطيع التمييز بينهما بواسطة SCN(dropscn column) وبواسطة timestamp(droptime column) .
ملاحظة : ان الأمر flashback table to before drop لا تستعيد القيود المرجعية (referential constraints) .
عزيزي القارئ : كلنا مستخدم ويندوز وعندما تقوم بحذف مجلد او ملف فإنة يذهب الى سلة المحذوفات , كما انك إذا قمت باستخدام (CTRL+DELETE) فإن الملف أو المجلد ينحذف بشكل نهائي كما انك تستطيع إفراغ سلة المحذوفات لديك , هذا الشي نفسه موجود في أوراكل فإذا قمت بحذف الجدول بهذة الطريقة :
Drop table employees;
فإن الجدول يبقى موجود في سلة المحذوفات اما إذا أصدرت الأمر :
Drop table employees purge;
لإإنة يتم حذف الجدول بشكل نهائي ولن تجده في سلة المحذوفات , كما أنك تستطيع إفراغ سلة المحذوفات بإصدار الأمر
Purge recyclebin;
ملاحظة : كما قلت سابقا عندما تقوم بحذف الغرض من دون استخدام purge فإنه يكون موجود في سلة المحذوفات ولا يزال يشغل مساحة من Tablespace فإذا كنت تعمل في مؤسسة ودائما هناك عمليات يومية تقوم بحذف جدول فإنه يبقى يشكل مساحة ولا تنسى أن تقوم بعمل purge recyclebin بين الحين والآخر .
لمعلوماتك : تستطيع عمل إفراغ سلة المحذوفات لكل الأغراض التي قمت بحذفها أنت , كما يستطيع ال DBA إفراغ سلة المحذوفات لكل الأغراض المحذوفة (لكل المستخدمين) , وكذلك أن يفرغ سلة المحذوفات من الأغراض المحذوفة من tablespace محدد , أو كل الإغراض المملوكة لمستخدم معين .وهذا الموضوع خارج نطاق مقالتنا.
ملاحظة : تستطيع استخدام عبارة RENAME TO مع أمر flashback Table وذلك لإعادة تسمية الجدول الذي سوف تستعيده .

ليست هناك تعليقات:
إرسال تعليق