Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

यह Oracle DROP COLUMN दूसरे कॉलम के डिफ़ॉल्ट मान को क्यों बदलता है?

यह एक Oracle बग है।

यह एक NOT NULL . दोनों के साथ एक कॉलम जोड़कर ट्रिगर होता है बाधा और एक DEFAULT मौजूदा तालिका के लिए मान।

कॉलम को जल्दी से जोड़ने के लिए, Oracle 11g डेटा डिक्शनरी में डिफ़ॉल्ट मान को संग्रहीत करता है। Oracle इसे "कॉलम ऑप्टिमाइज़ेशन जोड़ें" कहते हैं।

यह प्रत्येक तालिका पंक्ति में डिफ़ॉल्ट मान लिखने से तेज़ है। क्वेरी इंजन को तब तालिका पंक्ति में किसी भी NULL को डेटा डिक्शनरी से डिफ़ॉल्ट मान के साथ बदलना चाहिए। दुर्भाग्य से इससे संबंधित कई बग हैं। आपका एक उदाहरण प्रतीत होता है:

आप देख सकते हैं कि कौन से कॉलम इस तरह जोड़े गए हैं:

 select owner, object_name, name 
 from dba_objects, col$
 where bitand(col$.PROPERTY,1073741824)=1073741824
 and object_id=obj#;

हमारे मामले में, हमें एक अलग बग ने डंक मार दिया, जिसने SELECT FOR UPDATE के लिए गलत परिणाम दिए। ।

हम पैरामीटर सेट करते हैं _add_col_optim_enabled=FALSE इस "अनुकूलन" को बंद करने के लिए। वैकल्पिक रूप से, आप बाद के Oracle संस्करण में अपग्रेड करने में सक्षम हो सकते हैं जहां इन बगों का समाधान किया जाता है।

उपरोक्त पैरामीटर को अपग्रेड या सेट करने से आपकी मौजूदा तालिका ठीक नहीं होगी, जो दूषित है। आपको उस तालिका को फिर से बनाना होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ईएफ 4, आंशिक कक्षाएं कैसे जोड़ें

  2. उस पंक्ति को प्राप्त करें जिसमें कॉलम के लिए अधिकतम मान है

  3. फॉरवर्ड क्रॉस संस्करण R12.2 . में ट्रिगर होता है

  4. क्या Oracle TDE DBA से डेटा की सुरक्षा कर सकता है?

  5. Oracle में TRUNC (संख्या) फ़ंक्शन