سؤال

تصبح بعض المشغلات في قاعدة البيانات الخاصة بي غير صالحة بعد إجراء تغييرات معينة على الجداول.ولكن يبدو أنهم ما زالوا يعملون.المشكلة الوحيدة التي أواجهها هي أنه إذا كنت أستخدم SQL Developer، فهناك تقاطعات حمراء على الجانب الأيسر من المشغلات تشير إلى أنها غير صالحة.هل هي قضية كبيرة؟

أعلم أنه يمكنني إعادة ترجمة المشغل لإصلاح ذلك ولكني لست متأكدًا مما إذا كانت هذه مشكلة تستحق الاهتمام حقًا.إذا كان الأمر كذلك، فسأحتاج إلى مراجعة مئات التغييرات السابقة ومعرفة سبب المشكلة.شكرًا لك.

هل كانت مفيدة؟

المحلول

عندما نقوم بنشر تغيير على كائن قاعدة بيانات، يتم إبطال أي تعليمات برمجية تعتمد عليه.يؤثر هذا على المشغلات وطرق العرض والإجراءات المخزنة.ومع ذلك، في المرة التالية التي يستدعي فيها شيء ما هذا الرمز، ستعيد قاعدة البيانات ترجمته تلقائيًا.

لذلك لا داعي للقلق بشأن هذا، أليس كذلك؟حسنا، نعم، إلى حد ما.الأمر هو أن إبطال المشغلات (أو أي شيء آخر) هو إشارة لنا بأنه قد تم إجراء تغيير يمكن أن يؤثر على تشغيل هذا المشغل، والذي قد يكون له آثار جانبية.التأثير الجانبي الأكثر وضوحًا هو أن المشغل لن يتم تجميعه.وبشكل أكثر دقة، يتم تجميع المشغل ولكنه يفشل أثناء العمليات.

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

توفر Oracle آليات لإعادة ترجمة كافة الكائنات غير الصالحة في المخطط تلقائيًا.

  • الأكثر مباشرة هو الاستخدام DBMS_UTILITY.COMPILE_SCHEMA().لكن هذا الأمر كان مراوغًا منذ 8i (لأن دعم إجراءات Java المخزنة قدم إمكانية التبعيات الدائرية) ولم يعد مضمونًا تجميع كل الكائنات بنجاح في المرة الأولى.

  • في 9i أعطتنا أوراكل نصًا $ORACLE_HOME/rdbms/admin/utlrp.sql الذي أعاد تجميع الأشياء.لسوء الحظ فإنه يتطلب الوصول إلى SYSDBA.

  • في الإصدار 10g، أضافوا حزمة UTL_RECOMP، والتي تقوم بشكل أساسي بكل ما يفعله هذا البرنامج النصي.هذا هو الأسلوب الموصى به لإعادة ترجمة أعداد كبيرة من الكائنات.ولسوء الحظ فإنه يتطلب أيضًا الوصول إلى SYSDBA. اكتشف المزيد.

في 11g، قدمت Oracle إدارة التبعية الدقيقة.وهذا يعني أن التغييرات التي يتم إجراؤها على الجداول يتم تقييمها بدقة أكبر (مستوى العمود بشكل أساسي بدلاً من مستوى الجدول)، ولن تتأثر سوى الكائنات التي تتأثر بشكل مباشر بالتغييرات. اكتشف المزيد.

نصائح أخرى

ليست مشكلة كبيرة على الإطلاق.

فقط انقر بزر الماوس الأيمن فقط لإعادة ترجمة وأنت جيد للذهاب ... أكتب هذا من تجربتي الخاصة.

إذا كان هناك أي أخطاء برمز قد تغيرت للتو، فسوف تظهر حتى تتمكن من إصلاحه.سيخبرك المحول البرمجي أين المشاكل (أرقام السطر والأسماء المتغيرة وغيرها) في حالة الأخطاء.

إذا كانت المشغلات تعمل، فمن المحتمل أن تقوم Oracle بإحالا في خطأ ORA-04068 عند قيامه بإنشاء الزناد وإعادة إيقاف التشغيل بعد إعادة ترجمة تلقائيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top