2009-12-01 7 views
30

Wie können wir Temp-Tabellenbereich in Orakel verkleinern? Und warum es so sehr wie bis zu 25 GB zunimmt, da es nur ein Schema in der Datenbank für die Anwendung gibt und die Tabellengröße der Datentabelle 2 GB beträgt und die Tabellengröße der Indextabelle 1 GB beträgt.Wie Temp-Tabellenbereich in Oracle schrumpfen?

+0

Welche Version von Oracle? – BradC

+0

Haben Sie sich meine Antwort angesehen und auf der Seite, auf die sie verweist? Ich frage mich, was du sonst noch brauchen würdest. –

Antwort

94

Oh mein Gott! Schau dir die Größe meines temporären Tabellenplatzes an! Oder ... wie temporäre Tabellenbereiche in Oracle zu verkleinern.

Ja lief ich eine Abfrage, um zu sehen, wie groß meine temporären Tabellen ist:

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 

Die erste Frage, die Sie fragen ist, warum die temporären Tabellen so groß ist. Sie können die Antwort von oben von Ihrem Kopf wissen. Es kann aufgrund einer großen Abfrage , dass Sie nur mit einer Sortierung, die ein Fehler war (ich habe das mehr als einmal getan haben). Es kann aufgrund einiger anderer außergewöhnlicher Umstände sein. Wenn das der Fall ist, dann alles, was Sie tun müssen, um aufzuräumen, ist, den temporären Tablespace zu verkleinern und im Leben weiterzugehen.

Aber was, wenn Sie nicht wissen? Bevor Sie sich entscheiden, zu schrumpfen, müssen Sie möglicherweise einige Untersuchung in die Ursachen des großen Tablespace tun. Wenn dies auf einer regulären Basis geschieht, ist es möglich, dass Ihre Datenbank nur so viel Speicherplatz benötigt.

Die dynamische Performance Ansicht

V$TEMPSEG_USAGE 

kann bei der Bestimmung der Ursache sehr nützlich sein.

Vielleicht interessiert Sie nur nicht die Ursache und Sie müssen nur verkleinern. Dies ist Ihr dritter Tag bei der Arbeit. Die Daten in der Datenbank sind nur 200MiB wenn Daten und der temporäre Tablespace 13GiB ist - Einfach verkleinern und weitermachen. Wenn es wieder wächst, dann werden wir in die Ursache schauen. In der Zwischenzeit bin ich Speicherplatz auf diesem Datenträger und ich brauche nur den Speicherplatz zurück.

Werfen wir einen Blick auf das Schrumpfen. Es hängt ein wenig davon ab, welche Version von Oracle Sie ausführen und wie der temporäre Tablespace eingerichtet wurde.
Oracle wird es am besten tun, um Sie davon abzuhalten, irgendwelche schrecklichen Fehler zu machen so werden wir nur die Befehle versuchen und wenn sie nicht funktionieren, werden wir auf neue Weise schrumpfen.

Zuerst versuchen wir, die Datendatei zu verkleinern. Wenn wir das schaffen, bekommen wir den Raum und wir können uns sorgen, warum es morgen wuchs.

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 

Je nach Fehlermeldung Sie können diese mit verschiedenen Größen, um zu versuchen , die kleiner ist als die aktuelle Stelle der Datei sind. Ich hatte eine begrenzte Erfolg mit diesem. Oracle wird die Datei nur verkleinern, wenn der temporäre Tablespace an der Spitze der Datei steht und wenn er kleiner als die von Ihnen angegebene Größe ist. Einige alte Oracle-Dokumentation (sie korrigiert dies) sagte, dass Sie den Befehl ausgeben könnten und die Fehlermeldung würde Ihnen sagen, was Größe, die Sie verkleinern könnten. Als ich anfing, als DBA zu arbeiten, war das nicht wahr.Sie mussten einfach den Befehl einige Male erraten und erneut ausführen und sehen, ob es funktioniert hat.

In Ordnung. Das hat nicht funktioniert. Wie wäre es damit.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M; 

Wenn Sie in 11g (Maybee in 10g zu) sind, ist es das! Wenn es funktioniert, möchtest du vielleicht zurück zum vorherigen Befehl gehen und es noch ein paar Versuche geben.

Aber was ist, wenn das scheitert. Wenn der temporäre Tablespace der standardmäßige temporäre ist, der bei der Installation der Datenbank eingerichtet wurde, müssen Sie unter Umständen eine weitere Arbeit erledigen. An dieser Stelle werte ich in der Regel neu, ob ich wirklich diesen Raum brauche zurück. Nach allem Speicherplatz kostet nur $ X.XX ein GiB. Normalerweise möchte ich solche Änderungen während der Produktionszeiten nicht machen. Das bedeutet, bei 2 Uhr wieder zu arbeiten! (Nicht, dass ich wirklich Objekt zu arbeiten um 2 Uhr morgens - es ist nur, dass ... Nun, ich mag es auch zu schlafen. Und meine Frau mag mich zu Hause um 2 Uhr morgens ... nicht in den Straßen der Innenstadt um 4 Uhr morgens versuchen sich erinnern, wo ich mein Auto 3 Stunden vorher geparkt habe Ich habe von dieser "Telearbeit" Sache gehört Ich sorge mich nur, dass ich halb durchkommen werde und dann meine Internetkonnektivität scheitern werde - dann muss ich in die Innenstadt hetzen, um es zu reparieren alle vor Leuten in den Morgen zeigen sich die Datenbank zu verwenden.)

Ok ... Zurück zu den ernsten Sachen ... Wenn die temporären Tabellen Sie Ihre Standard- temporären Tabellen schrumpfen wollen, müssen Sie zuerst erstellen einen neuen temporären Tablespace, setzen Sie ihn als den Standard temporären Tablespace, dann löschen Sie Ihren alten standardmäßigen temporären Tablespace und erstellen Sie ihn neu. Afterwords Drop die zweite temporäre Tabelle erstellt.

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. 

Hoffentlich wird eines dieser Dinge helfen!

+0

Nur eine Anmerkung - Shrink Space wird in 11g vorgestellt und ist nicht in 10g erhältlich. Danke für eine wirklich gründliche Zusammenfassung aller Optionen! –

+1

Viele Beiträge und Artikel im Internet schlagen sehr komplizierte Verfahren vor. Dieser war der einfachste, den ich gefunden habe! –

+1

Vielen Dank für diese klare und präzise Erklärung und Lösung. Es ist das beste bisher im Internet gefundene. –

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

Wenn es nicht hilft:

  • neuen Tabellen erstellen
  • Wechsle zu neuen temporären Tabellen
  • Warten Sie, bis alte Tabellen nicht
  • Löschen Sie alte Tabellen
  • verwendet werden
5

Die Optionen zum Verwalten von Tafespa Die Versionen, die mit 8i beginnen, sind viel besser. Dies gilt insbesondere, wenn Sie die entsprechenden Dateitypen für einen temporären Tablespace (d. H. Lokal verwaltete Temp-Dateien) verwenden.

So könnte es als diesen Befehl so einfach sein, die Ihre Tabellen auf 128 meg schrumpfen ...

alter tablespace <your_temp_ts> shrink space keep 128M; 

Die Oracle-Online-Dokumentation ist ziemlich gut. Find out more.

bearbeiten

Es wäre das OP erscheint eine frühere Version der Datenbank hat. Bei früheren Versionen müssen wir die Größe einzelner Datendateien ändern. Also, zuerst, finde die Dateinamen. Die eine oder andere dieser Fragen sollte es tun ...

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>' 
/

Dann diesen Pfad in diesem Befehl verwenden:

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

SQL> alter tablespace temp schrumpfraum behalten 128M; alter tablespace temp schrumpfraum behalten 128M * FEHLER bei Zeile 1: ORA-02142: fehlende oder ungültige ALTER TABLESPACE Option –

1

Es zunehmende werden, weil Sie einen Bedarf an temporären Speicherplatz haben, möglicherweise aufgrund zu einem kartesischen Produkt oder einer großen Sortieroperation.

Die dynamische Leistungsansicht V$TEMPSEG_USAGE hilft bei der Diagnose der Ursache.

+0

Wird es nach der Verwendung angezeigt? –

+0

Ich sollte nicht so denken. –

+0

Ein weiterer Grund könnte die starke Verwendung von globalen temporären Tabellen sein. –

2

Sie sollten geschrieben haben, welche Version von Oracle Sie verwenden. Sie verwenden höchstwahrscheinlich etwas anderes als Oracle 11g. Aus diesem Grund können Sie einen temporären Tabellenbereich nicht verkleinern.

Alternativen:

1) alter database tempfile '[your_file]' resize 128M; die wahrscheinlich
2) Drop und die Tabellen neu fehl. Wenn der temporäre Tablespace, den Sie verkleinern möchten, Ihr standardmäßiger temporärer Tablespace ist, müssen Sie möglicherweise zunächst einen neuen temporären Tablespace erstellen, ihn als standardmäßigen temporären Tablespace festlegen und dann den alten standardmäßigen temporären Tablespace löschen und neu erstellen. Danach löschen Sie die zweite erstellte temporäre Tabelle. eine neue (n)

Alles wird beschrieben here im Detail 3) Für Oracle 9i und höher fallen Sie könnten nur die temporären Dateien (n) und hinzufügen.


Siehe diesen Link: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
Es war bereits verbunden, aber vielleicht ist es Ihnen verpasst haben, so ist es hier wieder an ist.

0

I i mit Fallenlassen der alternativen Temp falls nicht die Mühe machen müssen Speicher zurückzufordern wieder in die Zukunft ...

  1. von temporären Gruppensatz standardmäßig auf Stand-alone-Temp
  2. eine Weile warten, Ändern Sie dann die Größe der Mitglieder der Temp-Gruppe
  3. setzen Sie die Standardeinstellung wieder auf die Temp-Gruppe
  4. warten Sie eine Weile, Größe ändern Stand alone Temp. Es gibt keine Eile, den letzten Schritt zu tun