it-swarm.asia

ما هي أسباب وحلول تحولات أخطاء الجدول؟

أفهم أن أخطاء الجدول المتحولة ناتجة عن خلل في التصميم أو استعلام إشكالي.

تم وضع استعلام قديم مؤخرًا في الإنتاج مما أدى إلى حدوث خطأ في جدول التحوير. حل DBA لدينا المشكلة ولكننا لا نعرف كيف.

ما الذي يتسبب بالضبط في حدوث أخطاء في الجدول المتغير وكيف يمكن أن يحل DBA المشكلة؟

12
parmanand

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

  1. قمت بإدراج صف في الجدول A
  2. يقوم مشغل على الجدول A (لكل صف) بتنفيذ استعلام في الجدول A ، على سبيل المثال لحساب عمود ملخص
  3. تقوم Oracle بطرح ORA-04091: الجدول A يتحور ، وقد لا يراه الزناد/الوظيفة

هذا سلوك متوقع وطبيعي ، ترغب Oracle في حمايتك من نفسك حيث تضمن Oracle:

  • (ط) أن كل عبارة ذرية (أي ستفشل أو تنجح تمامًا)
  • (2) أن كل بيان يرى رؤية متسقة للبيانات

على الأرجح عندما تكتب هذا النوع من المشغلات ، تتوقع أن يرى الاستعلام (2) الصف مدرجًا في (1). قد يتعارض هذا مع كلتا النقطتين أعلاه نظرًا لأن التحديث لم ينته بعد (قد يكون هناك المزيد من الصفوف لإدراجها).

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

لمزيد من القراءة: "جدول التغيير" على Ask Tom .

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

17
Vincent Malgrat

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

9
Leigh Riffel