سؤال

السيناريو الذي خلق هذا السؤال:

لدينا حزمة تابعة لحزمة أخرى، وفي بعض الأحيان يؤدي إجراء تغييرات على الحزمة "الأصلية" إلى أن تصبح الحزمة التابعة غير صالحة، لكن في بعض الأحيان لا يحدث ذلك.

لقد فاجأتنا من قبل.

سيكون من المفيد جدًا أن أفهم ببساطة أسباب الإبطال حتى أتمكن من التنبؤ به/التخطيط له.

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

المحلول

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

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

نصائح أخرى

وأو يمكنك الاستعلام الجدول التالي لمعرفة ما تبعيات لديك

   select *
   from dba_dependencies
   where name = 'YOUR_PACKAGE'
   and referenced_owner = 'ANYUSER' --- Comment this out if you are looking for yourself
   and owner = USER --- Or can be set to any user

وهذا سوف تظهر كافة التبعيات. للالأشياء الخاصة بك الاستعلام user_dependencies.

راجع للشغل، إذا كنت مخطئا تماما بشأن الوضع...الاعتذار مقدما

اشتعلت على حين غرة؟

لست متأكدا ما هي الآثار المترتبة على ذلك ...

هل كسر شيء ما في الإنتاج؟

ماذا حدث بالضبط؟

سبب سؤالي هو أن فهم تداعيات كل تغيير محتمل أصعب بكثير من التعامل مع النتيجة.لماذا يصبح الإبطال مشكلة؟تخميني هو أنك حصلت على خطأ "تم تجاهل الحالة الحالية للحزمة" في تطبيقك.هل هذا هو حقيقي مشكلة؟

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

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

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

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

إذا الرجوع إلى حزمة في الدورة وتلك الحزمة (أو حزمة تعتمد) يحصل معاد خلال الدورة نفسها ثم ستحصل على خطأ أوراكل "ORA-06508: PL / SQL: تعذر العثور على وحدة برنامج يطلق عليها"

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

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

ولكن، بمجرد تعديل مواصفات الحزمة، التي لا بد أن يحدث.

إذا حاولت تنفيذ حزمة أوراكل غير صالحة، وأوراكل ومحاولة ترجمة ذلك. فقط عندما لا يزال غير صالح بعد تجميع سوف أوراكل بطرح استثناء.

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