Invalid Objects
نشر بواسطة : Obay Salah , November 20, 2024
من أهم الأشياء التي تؤثر على الأداء هي الكائنات غير الصالحة، مثل (الـ Procedures و الـ Indexes و الـ Materialized Views و الـ Views و الـ Triggers و الـ Packages و الـ Functions).
والحقيقة أن هذه الكائنات يمكن أن تكون غير صالحة لحظة إنشائها أو بعد إنشائها، وذلك لعدة أسباب منها الأخطاء البرمجية عند كتابة هذه Procedural Objects. في مثل هذه الحالة، يتم إنشاء الكائن لكنه يكون (INVALID) وبالتالي يكون غير صالح للاستخدام. أو عندما يتم تغيير بعض Data Objects المرتبطة بهذا الكائن، فإن العديد من الكائنات التي يتم إنشاؤها تكون مرتبطة ببعض Data Objects مثل الجداول، وعند القيام بعملية Compile للكائنات البرمجية، يتم التأكد من صحة الجداول أو الـ Data Objects المرتبطة بهذا الكائن لضمان صحة الامتيازات.
على سبيل المثال، إذا أشار الكود إلى عمود معين في جدول، يجب أن يكون هذا العمود موجودًا، وإلا سيفشل عملية Compile لهذا الكود. فإذا تم تغيير أي Data Objects مرتبطة بكائن Procedural Object، ستُعلم الـ Procedural Object بأنه (INVALID).
نفس هذه السيناريوهات قد تحدث بالنسبة للـ Views. فقد يتم إنشاء العديد من الـ Views دون مشاكل، ولكن عندما يتم تغيير الجداول المرتبطة بهذه الـ Views، تصبح هذه الـ Views غير صالحة (INVALID).
يمكن لمدير قاعدة البيانات تمييز الكائنات غير الصالحة (INVALID) من خلال DBA_OBJECTS View حيث يحتوي هذا الـ View على عمود يُسمى STATUS يوضح إذا كان هذا الكائن صالحًا أو غير صالح (VALID or INVALID).
select object_name from dba_objects where status='INVALID' and object_type='PROCEDURE'
أن يطرحه مدير قاعدة البيانات هو: لماذا هذه الـ Procedures غير صالحة؟
عموماً، إذا كانت هناك بعض Procedural Objects التي لا نحتاجها، يمكننا حذفها الآن. ولكن كخطوة أولية، يستطيع مدير قاعدة البيانات محاولة عمل Compile للكائنات غير الصالحة. قد تنجح عملية الـ Compile أو تفشل، وإذا فشلت ستتم استلام رسائل الخطأ. ولكن بشكل عام، يقوم مدير قاعدة البيانات الجيد بعلاج مشكلة الكائنات غير الصالحة قبل أن يلاحظها المستخدمون.
إصلاح الكائنات غير الصالحة:
لعمل Compile للكائنات البرمجية، نقوم بكتابة الكود التالي:
ALTER PROCEDURAL_TYPE PROCEDURAL_NAME COMPILE;
alter trigger repcatlogtrig compile;
وهكذا جميع أنواع الـ Procedural Objects.
وأيضًا يستطيع مدير قاعدة البيانات عمل Compile للـ Views.
alter view tuser compile;
قد تنجح عملية الـ Compile إذا لم يكن هناك مشكلة، أما إذا فشلت العملية فيجب البحث عن السبب. إذا فشلت عملية الـ Compile لإجراء معين، يمكننا البحث في سبب المشكلة عن طريق كتابة الأمر SHOW ERRORS، لكن يجب التنبيه إلى أن الأمر SHOW ERRORS لا يعمل مع الـ Views.
لكن ماذا إذا كان لديك المئات أو أكثر من الكائنات غير الصالحة والتي تحتاج إلى عملية Compile؟ هل يقوم مدير قاعدة البيانات بعمل Compile لهذه الكائنات بشكل فردي؟ لا شك أن الأمر سيكون مرهقًا جدًا. في مثل هذا السيناريو، من الأفضل أن يستخدم مدير قاعدة البيانات Script جاهز يقوم بعمل Compile لجميع الكائنات غير الصالحة دفعة واحدة.
ولكن يجب أن يتم تنفيذ هذا Script بعد الاتصال بقاعدة البيانات كـ SYSDBA.
توجد الـ Script في المسار التالي:
%oracle_home%\rdbms\admin\utlrp.sql
بالطبع قد تنجح أو تفشل هذه الـ Script في عملية Compile للكائنات غير الصالحة. إذا فشلت العملية، يجب البحث عن الأسباب، ولكن يجب أن يتم هذا البحث بشكل منفرد لكل كائن من هذه الكائنات.
Comments
لايوجد تعليق حتى الان