2009-12-01 40 views
30

Come possiamo ridurre il tablespace temp in oracle? E perché aumenta così tanto fino a 25 GB dato che c'è un solo schema nel database per l'applicazione e la dimensione del tablespace dati è di 2 GB e la dimensione del tablespace dell'indice è di 1 GB.Come ridurre il tablespace temporaneo in oracle?

+0

Quale versione di Oracle? – BradC

+0

Hai guardato la mia risposta e alla pagina a cui si collega? Mi chiedo cos'altro avresti bisogno. –

risposta

94

Oh mio Dio! Guarda le dimensioni del mio spazio tavolo temporaneo! Oppure ... come ridurre i tablespace temporanei in Oracle.

Sì ho eseguito una query per vedere quanto è grande la mia tabelle temporaneo è:

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 

La prima domanda che dovete porre è il motivo per cui lo spazio tabella temporanea è così grande. Potresti conoscere la risposta a questa domanda. Potrebbe essere dovuto a una query di grandi dimensioni che si è appena eseguita con un tipo che è stato un errore (l'ho fatto più di una volta in questo ). Potrebbe essere dovuto a qualche altra circostanza eccezionale. Se questo è allora tutto quello che devi fare per pulire è ridurre il tablespace temporaneo e andare avanti nella vita.

Ma cosa succede se non lo sai? Prima di decidere di ridurre, potrebbe essere necessario effettuare qualche indagine su nelle cause del tablespace di grandi dimensioni. Se ciò accade su base regolare , è possibile che il tuo database abbia solo bisogno di molto spazio.

La vista dinamica

V$TEMPSEG_USAGE 

può essere molto utile per determinare la causa.

Forse non ti interessa la causa e devi solo ridurla. Questo è il tuo terzo giorno di lavoro. I dati nel database sono solo 200MiB se i dati e il tablespace temporaneo sono 13GiB - Basta ridurli e andare avanti. Se ricresce, esamineremo la causa. Nel frattempo sono di spazio su quel volume del disco e ho solo bisogno di spazio indietro.

Diamo un'occhiata a restringerlo. Dipenderà un po 'dalla versione di Oracle in esecuzione e da come è stato impostato lo spazio tabelle temporaneo.
Oracle farà del suo meglio per impedirti di commettere errori orribili quindi proverò semplicemente i comandi e se non funzionano ridurremo in un modo nuovo.

Prima proviamo a ridurre il file di dati. Se riusciamo a farlo, torniamo nello spazio e possiamo preoccuparci perché è cresciuto domani.

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 

A seconda del messaggio di errore che si potrebbe desiderare di provare questo con dimensioni diverse che sono più piccoli rispetto al sito attuale del file. Ho avuto il successo limitato con questo. Oracle ridurrà il file solo se lo spazio tabelle temporaneo si trova all'inizio del file e se è inferiore alla dimensione specificata da . Alcuni vecchi documenti Oracle (hanno corretto questo) hanno detto che è possibile emettere il comando e il messaggio di errore indica quale dimensione si può ridurre. Quando ho iniziato a lavorare come DBA, questo era non vero.Devi solo indovinare e rieseguire il comando un paio di volte e vedere se ha funzionato.

OK. Non ha funzionato. Cosa ne pensi di questo.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M; 

Se siete in 11g (anche Maybee in 10g) è questo! Se funziona, potresti voler per tornare al comando precedente e dargli altri tentativi.

Ma cosa succede se ciò non riesce. Se il tablespace temporaneo è il valore predefinito temporaneo impostato al momento dell'installazione del database, potrebbe essere necessario eseguire un ulteriore lavoro di . A questo punto di solito rivalutare se ho davvero bisogno di quello spazio indietro. Dopo tutto lo spazio su disco costa solo $ X.XX a GiB. Di solito non voglio per apportare modifiche come questa durante le ore di produzione. Ciò significa che lavoriamo alle 2:00 ANCORA! (Non che io obietti davvero a di lavorare alle 2:00 - è solo che ... Beh, mi piace dormire anche io e mia moglie piace avere me a casa alle 2 del mattino ... non girovagando per le strade del centro alle 4 del mattino cercando per ricordare dove ho parcheggiato la mia auto 3 ore prima ho sentito parlare di quella cosa "telelavoro" . Mi preoccupo solo di arrivare a metà e poi la mia connettività internet fallirà - quindi devo correre in centro per sistemarlo tutto prima gente mostrate nella mattino per utilizzare il database.)

Ok ... Torna alla roba seria ... Se lo spazio tabella temporanea che si desidera ridurre è il vostro difetto tabelle temporaneo, si dovrà per prima cosa creare un nuovo tablespace temporaneo , impostalo come spazio tabella temporaneo predefinito, quindi elimina il tuo vecchio tablespace temporaneo predefinito e lo ricrea. Afterwords rilasciare la seconda tabella temporanea creata.

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. 

Speriamo che una di queste cose possa essere d'aiuto!

+0

Solo una nota: SHRINK SPACE è introdotto in 11g e non è disponibile in 10g. Grazie per un approfondito resoconto di tutte le opzioni! –

+1

Molti post e articoli su Internet suggeriscono procedure molto complicate. Questo è stato il più semplice che ho trovato! –

+1

Grazie mille per questa spiegazione e soluzione chiara e precisa. È la migliore trovata finora su Internet. –

0
alter database datafile 'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M; 

Se non aiuta:

  • Crea nuovo spazio tabelle
  • Passa alla nuova tabella temporaneo
  • Attendere vecchio tablespace non verrà utilizzato
  • eliminare i vecchi tabelle
5

Le opzioni per la gestione di tablespa ces sono migliorati rispetto alle versioni che iniziano con 8i. Ciò è particolarmente vero se si utilizzano i tipi appropriati di file per un tablespace temporaneo (ad esempio i tempfile gestiti localmente).

Quindi, potrebbe essere semplice come questo comando, che si ridurrà la vostra tabella fino a 128 meg ...

alter tablespace <your_temp_ts> shrink space keep 128M; 

La documentazione in linea di Oracle è abbastanza buono. Find out more.

modificare

Sembrerebbe l'OP ha una versione precedente del database. Con le versioni precedenti dobbiamo ridimensionare i singoli file di dati. Quindi, prima di tutto, trova i nomi dei file. Una o l'altra di queste query dovrebbe farlo ...

select file_name from dba_data_files where tablespace_name = '<your_temp_ts>' 
/

select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>' 
/

quindi utilizzare tale percorso in questo comando:

alter database datafile '/full/file/path/temp01.dbf' resize 128m 
/
+0

SQL> alter tablespace temp shrink space keep 128M; alter tablespace temp shrink space keep 128M * ERRORE alla riga 1: ORA-02142: mancante o non valido Opzione ALTER TABLESPACE –

1

Sarà in aumento perché avete bisogno di spazio di memorizzazione temporanea, forse a causa ad un prodotto cartesiano o ad una grande operazione.

La vista prestazioni dinamiche V$TEMPSEG_USAGE consente di diagnosticare la causa.

+0

Visualizzerà dopo l'uso? –

+0

Non dovrei pensarlo. –

+0

Un altro motivo potrebbe essere l'utilizzo intensivo di tabelle temporanee globali. –

2

Dovresti aver scritto quale versione di Oracle utilizzi. Molto probabilmente usi qualcos'altro oltre a Oracle 11g, ecco perché non puoi ridurre un tablespace temporaneo.

Alternative:

1) alter database tempfile '[your_file]' resize 128M; che sarà probabilmente fallirà
2) eliminare e ricreare lo spazio tabella. Se il tablespace temporaneo che desideri ridurre è il tablespace temporaneo predefinito, potresti dover creare prima un nuovo tablespace temporaneo, impostarlo come spazio tabella temporaneo predefinito, quindi eliminare il vecchio tablespace temporaneo predefinito e ricrearlo. Successivamente rilasciare la seconda tabella temporanea creata. 3) Per Oracle 9i e superiori si può solo cadere il tempfile (s) e aggiungere uno nuovo (s)

Tutto è descritto here in grande dettaglio.


Vedere questo link: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
E 'stato già collegato, ma forse vi siete persi, ecco che è nuovo.

0

non si preoccupano a cadere la temperatura si alternano nel caso in cui ho bisogno di recuperare di nuovo stoccaggio in futuro ...

  1. dal SET TEMP gruppo predefinito di stand-alone temperatura
  2. aspettare un po ', quindi ridimensionare i membri del gruppo temporaneo
  3. impostare il valore predefinito su gruppo temporaneo
  4. attendere un po ', ridimensionare stand alone temp. non c'è fretta di fare l'ultimo passo
Problemi correlati