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

प्रक्रिया बफर अतिप्रवाह

सबसे पहले, आप आमतौर पर DBMS_OUTPUT . का उपयोग नहीं करेंगे लॉगिंग के लिए। यह आम तौर पर लॉग टेबल पर डेटा लिखने के लिए और अधिक समझ में आता है, खासकर यदि आपकी लॉगिंग प्रक्रिया को एक स्वायत्त लेनदेन के रूप में परिभाषित किया गया था ताकि आप प्रक्रिया के चलते लॉग डेटा की निगरानी कर सकें। DBMS_OUTPUT पूरी प्रक्रिया समाप्त होने के बाद ही प्रदर्शित होने जा रहा है, जिस बिंदु पर यह आम तौर पर कुछ हद तक व्यर्थ है।

उस पहले बिंदु से संबंधित, DBMS_OUTPUT . पर निर्भर कॉल करने वाले को यह इंगित करने के लिए कि किसी प्रकार का अपवाद हुआ है, एक बहुत ही खराब प्रथा है। कम से कम, आप फेंके गए अपवाद को फिर से उठाना चाहेंगे ताकि समस्या को डीबग करने के लिए आपको त्रुटि स्टैक मिल जाए।

दूसरा, जब आप आउटपुट को सक्षम करते हैं, तो आपको उस बफर का आकार निर्दिष्ट करना होगा जो DBMS_OUTPUT है को लिख सकते हैं। ऐसा प्रतीत होता है कि आपने बफ़र को 20,000 बाइट्स घोषित कर दिया है जो कि डिफ़ॉल्ट है यदि आप बस

SQL> set serveroutput on;

आप इसे आकार निर्दिष्ट करके बदल सकते हैं लेकिन अधिकतम आकार 1,000,000 बाइट्स तक सीमित है

SQL> set serveroutput on size 1000000;

यदि आप 1000 पंक्तियों में 3 अरब पंक्तियों को अद्यतन करने की योजना बना रहे हैं, तो यह बहुत छोटा बफर होगा। आप अपने वर्तमान कोड के साथ उस मात्रा का 60 गुना से अधिक डेटा उत्पन्न करने जा रहे हैं। यदि आप क्लाइंट और सर्वर दोनों पर 10.2 का उपयोग कर रहे हैं, तो आपको असीमित बफर आवंटित करने में सक्षम होना चाहिए

SQL> set serveroutput on size unlimited;

लेकिन यह पहले के रिलीज में एक विकल्प नहीं है।

अंत में, क्या आप निश्चित हैं कि आपको सबसे पहले पीएल/एसक्यूएल का सहारा लेना होगा? ऐसा प्रतीत होता है कि आप केवल एक अद्यतन निष्पादित करके इसे और अधिक कुशलता से कर सकते हैं

UPDATE table_
   SET id = floor( seq/ 10000000000000 )
 WHERE id is null;

यह बहुत कम कोड है, पढ़ने में बहुत आसान है, और PL/SQL विकल्प की तुलना में अधिक कुशल होगा। केवल नकारात्मक पक्ष यह है कि इसके लिए आवश्यक है कि आपका यूएनडीओ टेबलस्पेस यूएनडीओ को समायोजित करने के लिए पर्याप्त बड़ा हो, लेकिन एनयूएलएल से एक गैर-न्यूल संख्यात्मक मान में एक कॉलम को अपडेट करने से इतना अधिक यूएनडीओ उत्पन्न नहीं होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उद्धरणों में listagg से फ़ील्ड कैसे प्राप्त करें?

  2. एसक्यूएल - वर्णों की तुलना करते समय पैड रिक्त स्थान क्यों?

  3. Oracle -- अग्रणी या अनुगामी रिक्त स्थान के साथ मान ढूँढना

  4. SQL तालिका निर्भरताएँ बनाना

  5. MyBatis का उपयोग करके Oracle DB में बैच सम्मिलित करने में असमर्थ