Flashback Table in Oracle Database
نشر بواسطة : Obay Salah , November 19, 2024
يُطلق عليه أيضًا Flashback Table Query وقد تم تقديم هذا النوع في Oracle 10g ويعتمد بشكل أساسي على Undo Tablespace،
وهو إرجاع الجدول إلى فترة زمنية في الماضي، مستفيدًا من المعلومات المتوفرة في Segments Undo،
قد يكون تم إجراء عدد من التعديلات على الجدول، والتي سنجدها في Undo Tablespace، بالطبع قد تفشل عملية Flashback Table إذا لم يتم العثور على المعلومات المطلوبة في Undo Tablespace نتيجة لانتهاء فترة الاحتفاظ بالمعلومات المطلوبة، على سبيل المثال.
إليك السيناريو التالي: لنفترض أن لدينا جدولين، الأول يسمى DEPT وهو جدول الأقسام، والثاني يسمى EMP وهو جدول الموظفين.
لنقم بإضافة قسم جديد إلى جدول أقسام DEPT.
INSERT INTO DEPT VALUES(3,'FINANCE');
نضيف موظف جديد إلى جدول موظفي EMP حتى ينتمي الموظف الجديد إلى القسم الجديد.
INSERT INTO EMP VALUES(3,'KHALED'3);
دعونا نظهر الوقت الآن.
SELECT SYSDATE FROM DUAL;
الآن نقوم بحذف الحقلين اللذين أضفناهما إلى الجدولين.
DELETE EMP WHERE EMP_NO=3; DELETE DEPT WHERE DEPT NO=3;
الآن دعونا ننشئ جدول Flashback لجدول EMP قبل حذف الحقل 3=EMP_NO.
FLASHBACK TABLE EMP TO TIMESTAMP TO_TIMESTAMP('13-06-2023:00-00-00','DD-MM- YYYY:HH24-MI-SS');
قد فشلت عملية الاسترجاع Flashback Table وذلك لأننا ﻨﺤﺘﺎﺝ ﻟﻌﻤل Enable Row Movement ،
وهو عبارة عن Flag يتم وضعه في الData Dictionary يوضح للاوركل عمليات التعديلات .
قد تفشل عملية Flashback Table لأننا نحتاج إلى Enable Row Movement ،، وهي Flag يتم وضعه في ﺍلData Dictionary تشير إلى Oracle بعمليات التعديل.
ALTER TABLE EMP ENABLE ROW MOVEMENT;
لقد قمنا بعمل Enable Row Movement لجدول EMP، والآن لنحاول تفعيل خاصية Flashback Table لجدول EMP مرة أخرى.
قد تظهر رسالة خطأ أخرى، إذا تم انتهاك قيد Constraint Key Foreign، حيث لا يمكن إرجاع الموظف رقم 3 إلى جدول EMP وهو ينتمي إلى قسم محذوف،
إنه ينتمي إلى القسم رقم 3 الذي تم حذفه، فما هو الحل إذن؟
الحل هو إنشاء جدول Flashback لجدولي DEPT وEMP.
ولكن لا تنس تفعيل خاصية Row Movement لجدول DEPT.
FLASHBACK TABLE EMP TO TIMESTAMP TO_TIMESTAMP('13-06-2023:00-00-00','DD-MM- YYYY:HH24-MI-SS');
لقد تم إكمال عملية Flashback Tables بنجاح وليس من الضروري ترتيب الجدول في عبارة Flashback لأن قيود Constraint يتم التحقق منها بعد انتهاء عملية Transaction. ملاحظة: إذا فشلت محاولة استرداد جدول Flashback Table في أي عملية، فإن العملية
تتوقف ثم يتم التراجع ROLLBACK عن العملية بأكملها، أي إذا نجحت عملية استرداد جدول DEPT في العملية السابقة ولكن فشلت عملية استرداد جدول EMP، فإن العملية بأكملها ستفشل
وسيتم التراجع عن العملية بأكملها.
كما لاحظت، لا يتم ضمان نجاح عملية Flashback Table، فقد تفشل لأحد الأسباب التالية: -
1- إذا تم انتهاك أحد قيود Constraint Violated.
2- إذا لم يتم عمل Enable Row Movement للجدول المطلوب استرداده.
3- إذا لم تكن المعلومات المطلوبة متوفرة في ﺍلUndo Tablespace
no snapshot found based on specified time” ORA-08180
4- لا يمكن إجراء Flashback Table لجدول في Sys Schema .
Comments
لايوجد تعليق حتى الان