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

ऑरैकल में अस्थायी टेबलस्पेस को कैसे कम करें?

हे भगवान! मेरे अस्थायी टेबल स्पेस के आकार को देखो!या... Oracle में अस्थायी टेबल स्पेस को कैसे सिकोड़ें।

हां, मैंने यह देखने के लिए एक क्वेरी चलाई कि मेरा अस्थायी टेबलस्पेस कितना बड़ा है:

SQL> SELECT tablespace_name, file_name, bytes
2  FROM dba_temp_files WHERE tablespace_name like 'TEMP%';

TABLESPACE_NAME   FILE_NAME                                 BYTES
----------------- -------------------------------- --------------
TEMP              /the/full/path/to/temp01.dbf     13,917,200,000

पहला सवाल जो आपको पूछना है वह यह है कि अस्थायी टेबलस्पेस इतना बड़ा क्यों है। आप इसका उत्तर अपने सिर के ऊपर से जान सकते हैं। यह एक बड़ी क्वेरी के कारण हो सकता है कि आप बस एक तरह से चलते हैं जो एक गलती थी (मैंने इसे एक से अधिक बार किया है।) यह किसी अन्य असाधारण परिस्थिति के कारण हो सकता है। अगर ऐसा है तो आपको सफाई करने के लिए केवल अस्थायी टेबल स्पेस को सिकोड़ना और जीवन में आगे बढ़ना है।

लेकिन क्या होगा अगर आप नहीं जानते? इससे पहले कि आप सिकुड़ने का निर्णय लें, आपको बड़े टेबलस्पेस के कारणों की कुछ जांच करने की आवश्यकता हो सकती है। यदि यह नियमित आधार पर होता है तो संभव है कि आपके डेटाबेस को बस इतना ही स्थान चाहिए।

गतिशील प्रदर्शन दृश्य

V$TEMPSEG_USAGE

कारण निर्धारित करने में बहुत उपयोगी हो सकता है।

हो सकता है कि आपको सिर्फ कारण की परवाह नहीं है और आपको बस इसे सिकोड़ने की जरूरत है।काम पर यह आपका तीसरा दिन है। डेटाबेस में डेटा केवल 200MiBif डेटा है और अस्थायी टेबलस्पेस 13GiB है - बस इसे सिकोड़ें और आगे बढ़ें। यदि यह फिर से बढ़ता है तो हम इसका कारण देखेंगे। इस बीच मेरे पास उस डिस्क वॉल्यूम पर जगह खत्म हो गई है और मुझे बस स्पेस वापस चाहिए।

आइए इसे कम करने पर एक नज़र डालें। यह थोड़ा इस बात पर निर्भर करेगा कि आप Oracle का कौन सा संस्करण चला रहे हैं और अस्थायी टेबलस्पेस कैसे स्थापित किया गया था। काम हम एक नए तरीके से सिकुड़ेंगे।

आइए पहले डेटाफाइल को सिकोड़ने का प्रयास करें। अगर हम ऐसा कर सकते हैं तो हमें जगह वापस मिल जाएगी और हम चिंता कर सकते हैं कि यह कल क्यों बढ़ा।

SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*   
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

त्रुटि संदेश के आधार पर आप इसे विभिन्न आकारों के साथ आज़माना चाह सकते हैं जो फ़ाइल की वर्तमान साइट से छोटे हैं। मुझे इसमें सीमित सफलता मिली है। Oracle केवल फ़ाइल को सिकोड़ेगा यदि अस्थायी टेबलस्पेस फ़ाइल के शीर्ष पर है और यदि यह आपके द्वारा निर्दिष्ट आकार से छोटा है। कुछ पुराने Oracle दस्तावेज़ (उन्होंने इसे ठीक किया) ने कहा कि आप कमांड जारी कर सकते हैं और त्रुटि संदेश आपको बताएगा कि आप किस आकार में सिकुड़ सकते हैं। जब तक मैंने डीबीए के रूप में काम करना शुरू किया, यह सच नहीं था। आपको बस अनुमान लगाना था और कमांड को कई बार फिर से चलाना था और देखना था कि क्या यह काम करता है।

ठीक है। यह काम नहीं किया। इसके बारे में कैसे।

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;

यदि आप 11 ग्राम में हैं (शायद 10 ग्राम में भी) तो यही है! यदि यह काम करता है तो आप पिछली कमांड पर वापस जाना चाहते हैं और इसे कुछ और प्रयास कर सकते हैं।

लेकिन क्या होगा अगर वह विफल रहता है। यदि अस्थायी टेबलस्पेस डिफ़ॉल्ट अस्थायी है जो डेटाबेस स्थापित होने पर स्थापित किया गया था तो आपको बहुत अधिक काम करने की आवश्यकता हो सकती है। इस बिंदु पर मैं आमतौर पर पुनर्मूल्यांकन करता हूं कि क्या मुझे वास्तव में उस स्थान की आवश्यकता है। आखिरकार डिस्क स्थान की कीमत केवल $X.XX प्रति GiB है। आमतौर पर मैं प्रोडक्शन के घंटों के दौरान इस तरह के बदलाव नहीं करना चाहता। इसका मतलब है 2AMAGAIN पर काम करना! (ऐसा नहीं है कि मैं वास्तव में 2 बजे काम करने का विरोध करता हूं - यह बस इतना ही है ... वैसे मुझे भी सोना पसंद है। और मेरी पत्नी मुझे 2 बजे घर पर रखना पसंद करती है ... 4 बजे शहर की सड़कों पर घूमते हुए यह याद रखने की कोशिश नहीं कर रही कि मैंने अपना पार्क कहां रखा है कार 3 घंटे पहले। मैंने उस "टेलीकम्यूटिंग" चीज़ के बारे में सुना है। मुझे बस चिंता है कि मैं आधा रास्ता पार कर जाऊंगा और फिर मेरी इंटरनेट कनेक्टिविटी विफल हो जाएगी - फिर मुझे सुबह में लोगों के आने से पहले इसे ठीक करने के लिए शहर जाना होगा। डेटाबेस।)

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

SQL> CREATE TEMPORARY TABLESPACE temp2
2  TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3  AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

Database altered.

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.


SQL> CREATE TEMPORARY TABLESPACE temp
2  TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3  AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

Database altered.

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

उम्मीद है कि इनमें से एक चीज़ मदद करेगी!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle फ़ंक्शन उदाहरण दो तिथियों के बीच दिनों की संख्या प्राप्त करने के लिए

  2. Oracle तालिका में पंक्तियों को कॉलम में कैसे बदलें

  3. ऑरैकल में लाइक बनाम कंटेन्स () के बीच खोज मानदंड अंतर

  4. क्या आप Oracle के साथ Microsoft Entity Framework का उपयोग कर सकते हैं?

  5. SQLcl . में सिंटैक्स हाइलाइटिंग को कैसे कॉन्फ़िगर करें?