نشر بواسطة : Obay Salah , November 19, 2024

 هل فكرت يوما في عملية ROLLBACK وهل سألت نفسك كيف يمكنك التراجع عن التعديلات التي حدثت في بعض الحقول؟ حتى لو تم تغيير القيم القديمة إلى القيم الجديدة.

السيناريو باختصار هو أنه عند إجراء تعديلات على البيانات في قاعدة البيانات، تقوم Oracle بتخزين القيم القديمة في Undo Tablespace قبل تغييرها بالقيم الجديدة.

هذا السيناريو يعطينا الفرصة للتراجع عن العمليات متى احتجنا لذلك، بشرط أن تكون القيم القديمة لا تزال موجودة في Undo Tablespace

نظرا لأنه من غير المتصور أن تظل هذه القيم موجودة فإن Tablespace موجودة إلى أجل غير مسمى، لذا فهي في النهاية ذات سعة محدودة وفترة احتفاظ محدودة بالمعلومات يقوم مسؤول قاعدة البيانات بتكوينها حسب ما يراه مناسبا. ومن خلال هذا السيناريو يمكننا أيضا إجراء عملية Flashback Queries إذا كانت القيم القديمة متاحة. وسنتحدث عن Flashback Queries لاحقا. ولكن بشكل عام، فهي عبارة عن استعلام. عن القيم ولكن في الماضي. يتم إدارة Undo Tablespace بواسطة Locally Managed Tablespace وAutomatic Extent Customization. في لحظة بدء العملية يتم تخصيص وإنشاء Undo Segment ﺃﻟﻴﺎﹰ  لتخزين القيم التي تتغير في قاعدة البيانات بواسطة هذه العملية، بحيث يتم تخصيص Undo Segment لكل عملية، ولكن هذه ﺍلSegment يمكنها خدمة عدد من العمليات، وعند امتلاء ﺍلExtent يتم تحويلها للأخرى في نفس ﺍلSegment  بحيث يكون هناك على الأقل اثنين من ﺍلExtents في كل Segment  ، بينما يعتمد الحد الأقصى على حجم DB Block Size ، وفي حالة امتلاء جميع ﺍلExtents في ﺍلUndo Segment  يتم إعادة كتابة ﺍلExtent بداية من البداية أو طلب Extent جديدة، وقد يكون هناك أكثر من Undo Tablespace في قاعدة البيانات الواحدة، ولكن لا يمكن أن تعمل أكثر من Undo Tablespace في نفس الوقت، ويتم تحديد عمل مساحة الUndo Tablespace في قاعدة البيانات بواسطة المتغير Undo_Tablespace.

SHOW PARAMETER UNDO_TABLESPACE; 


لإنشاء Undo Tablespace جديد.

CREATE UNDO TABLESPACE ORCLUNDO DATAFILE

'D:\oracle\product\01.1.0\oradata\ORCL\ORCLUNDO. DBF'

SIZE 200M EXTENT MANAGEMENT LOCAL AUTOALLOCATE; 

تحتوي قاعدة البيانات الآن على اثنين من ﺍلUndo Tablespace، لكن واحدة فقط تعمل وهي UNDOTBS1 كما هو موضح أعلاه.


ولكن يمكنك تغيير ﺍلUndo Tablespace التي تعمل في قاعدة البيانات من UNDOTBS1 إلى ORCLUNDO.

ALTER SYSTEM SET UNDO_TABLESPACE='ORCLUNDO' SCOPE=BOTH;


 توفر قاعدة بيانات أوراكل 10g خيار إدارة تلقائية لـ Undo Tablespace وهو Automatic Undo Management ويتم تكوينه بواسطة المتغير

UNDO_MANAGEMENT بحيث يأخذ القيمة AUTO بينما خيار الإدارة اليدوية Manual Undo Magamenet هو خيار مكلف ويتطلب عملاً أكثر من مسؤول قاعدة البيانات.

خيار Automatic Undo Management يقلل العبء على مسؤول قاعدة البيانات بحيث تكون إدارته فقط على مستوى Tablespace حيث ينتظر مسؤول قاعدة البيانات تجهيز المساحة المناسبة لـ Undo Tablespace حسب المعلومات التي سيتم تخزينها كما أنه من الضروري تجهيز فترة الاحتفاظ بالتراجع للبيانات الموجودة في Undo Segment باستخدام المتغير UNDO_RETENTION والذي يأخذ قيمة هي فترة الاحتفاظ بالثواني والإفتراضي لهذا المتغير هو أخذ القيمة 0 والتي تعني Automatic أي أنه يحاول الإحتفاظ بالمعلومات حتى انتهاء صلاحيتها بشرط الإحتفاظ بالمعلومات لمدة 15 دقيقة على الأقل ولكن يمكن تحديد قيمة أخرى وهي فترة الاحتفاظ بالثواني.

SHOW PARAMETER UNDO_RETENTION;


 بشكل عام تنقسم Undo information أي المعلومات الموجودة في ﺍلUndo Segments إلى ثلاث حالات:-

1- Uncommitted Undo Information:  وهي المعلومات التي لم يتم تثبيتها بعد لأن العمليات ما زالت مستمرة ولا يمكن حذف هذا النوع من المعلومات أو إعادة كتابته.

2 - Committed Undo Information:  لا نحتاجها للعمليات المستمرة ولكن لأن فترة الاحتفاظ لم تنته بعد "Unexpired" فنحتفظ بهذا النوع من العمليات قدر الإمكان

إلا إذا أدى ذلك إلى فشل بعض العمليات بسبب نقص المساحة في ﺍلTablespace Undo، ففي هذه الحالة يتم إعادة كتابة هذه المعلومات،

ولكن قد يقوم مسؤول قاعدة البيانات بتهيئة ﺍلUndo Tablespace حتى نتمكن من التأكد من عدم مسحها أو إعادة كتابتها باستخدام خيار Guaranteeing Undo Retention .

ALTER TABLESPACE ORCLUNDO RETENTION GUARANTEE;


 هذا الخيار متاح بالطبع فقط لـ Undo Tablespace.

وبهذه الطريقة نضمن عدم حذف المعلومات التي لم تنته صلاحيتها حتى لو أدى ذلك إلى فشل بعض العمليات بسبب نقص المساحة في Undo Tablespace.

3 - Expired Undo Information:  لا نحتاجها للعمليات المستمرة، وقد انتهت فترة الاحتفاظ بها، لذا يمكننا إعادة كتابتها كلما احتجنا إلى مساحة في Undo Tablespace.

من المشاكل التي تحدث بشكل متكرر والتي يجب على مسؤول قاعدة البيانات أخذها في الاعتبار: -

1- Undo Tablespace Space Error : يجب على مسؤول قاعدة البيانات مراقبة مساحة Undo Tablespace. العمليات التي لا تجد مساحة في Undo Tablespace

تظهر لها رسالة الخطأ  (ORA-01650: unable to extend rollback segment) .

2- Snapshot too old Error : يظهر هذا الخطأ عند تنفيذ استعلام يتطلب Undo Information التي تم حذفها وإعادة كتابتها،

لذلك، يجب على مسؤول قاعدة البيانات أن يأخذ في الاعتبار فترة الاحتفاظ المناسبة UNDO_RETENTION وكذلك المساحة المناسبة مع مراعاة Guaranteeing Undo Retention .

يمكن الاستعلام عن ﺍلUNDO باستخدام:

DBA_UNDO_EXTENT

V$UNDOSTAT



علامات : Database

يمكن ان يعجبك ايضا


Comments

لايوجد تعليق حتى الان