तालिका त्रुटियों को म्यूट करने के कारण और समाधान क्या हैं?


12

मैं समझता हूं कि म्यूटिंग तालिका त्रुटियां एक डिजाइन दोष या समस्याग्रस्त क्वेरी के कारण होती हैं।

एक पुरानी क्वेरी हाल ही में उत्पादन में डाली गई थी जो एक म्यूटिंग टेबल त्रुटि फेंकता है। हमारे डीबीए ने समस्या को हल किया लेकिन हम नहीं जानते कि कैसे।

क्या वास्तव में परिवर्तन तालिका त्रुटियों का कारण बनता है और हमारे DBA ने समस्या कैसे तय की होगी?

जवाबों:


17

उत्परिवर्तन तालिका त्रुटि का सबसे संभावित कारण ट्रिगर का दुरुपयोग है। यहाँ एक विशिष्ट उदाहरण है:

  1. आप तालिका A में एक पंक्ति सम्मिलित करते हैं
  2. तालिका ए (प्रत्येक पंक्ति के लिए) पर एक ट्रिगर तालिका ए पर एक क्वेरी निष्पादित करता है, उदाहरण के लिए एक सारांश कॉलम की गणना करने के लिए
  3. ओरेकल एक ORA-04091 फेंकता है: तालिका A म्यूटिंग है, ट्रिगर / फ़ंक्शन इसे नहीं देख सकता है

यह एक अपेक्षित और सामान्य व्यवहार है, ओरेकल की गारंटी के बाद से ओरेकल आपको खुद से बचाना चाहता है:

  • (i) कि प्रत्येक कथन परमाणु है (अर्थात या तो विफल होगा या पूरी तरह से सफल होगा)
  • (ii) कि प्रत्येक कथन में डेटा का एक सुसंगत दृश्य दिखाई देता है

सबसे अधिक संभावना है कि जब आप इस तरह का ट्रिगर लिखते हैं तो आप क्वेरी (2) को पंक्ति (1) में डाली गई पंक्ति को देखने की उम्मीद करेंगे। यह ऊपर दिए गए दोनों बिंदुओं के साथ विरोधाभास होगा क्योंकि अद्यतन अभी तक समाप्त नहीं हुआ है (सम्मिलित किए जाने के लिए अधिक पंक्तियाँ हो सकती हैं)।

ओरेकल कथन की शुरुआत से ठीक पहले समय में एक बिंदु के साथ परिणाम को वापस कर सकता है, लेकिन अधिकांश उदाहरणों से मैंने देखा है कि इस तर्क को लागू करने का प्रयास करें, लोग बहु-पंक्ति वाले बयान को क्रमिक चरणों के सीरी के रूप में देखते हैं और सबसे अधिक उम्मीद करते हैं कथन [2] पिछले चरणों द्वारा किए गए परिवर्तनों को देखने के लिए। ओरेकल अपेक्षित परिणाम नहीं दे सकता है और इसलिए त्रुटि फेंकता है।

आगे पढ़ने के लिए: आस्क टॉम पर "म्यूटिंग टेबल"

अगर मुझे संदेह है कि उत्परिवर्तन तालिका त्रुटि का कारण एक ट्रिगर है, तो त्रुटि से बचने का एक तरीका प्रक्रियाओं में तर्क को ट्रिगर से बाहर ले जाना है।


9

एक उत्परिवर्तन तालिका तब होती है जब कोई वक्तव्य आग का कारण बनता है और वह ट्रिगर उस तालिका का संदर्भ देता है जो ट्रिगर का कारण बनी। ऐसी समस्याओं से बचने का सबसे अच्छा तरीका ट्रिगर का उपयोग नहीं करना है, लेकिन मुझे संदेह है कि डीबीए ने ऐसा करने के लिए समय नहीं लिया। वह निम्नलिखित में से एक कर सकता था:


1
कम से कम मेरे लिए, एक ट्रिगर होने के बाद 11.2.0.4.0 पर विफल होना
सॉफ्टवेयर

यह भी मेरे लिए; संस्करण 12.1.0.2.0, और AFTER काम नहीं करता है।
ईडीलोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.