2009-12-01 6 views
30

Comment pouvons-nous réduire le tablespace temporaire dans Oracle? Et pourquoi il augmente tellement jusqu'à 25 Go car il n'y a qu'un schéma dans la base de données pour l'application et la taille de l'espace table de données est de 2 Go et la taille de l'espace de table d'index est de 1 Go.Comment réduire le tablespace temporaire dans Oracle?

+0

Quelle version d'Oracle? – BradC

+0

Avez-vous regardé ma réponse et à la page vers laquelle elle renvoie? Je me demande ce que vous auriez besoin d'autre. –

Répondre

94

Oh mon Dieu! Regardez la taille de mon espace de table temporaire! Ou ... comment réduire les espaces table temporaires dans Oracle.

Oui j'ai couru une requête pour voir la taille de mon tablespace temporaire est:

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 première question que vous devez poser est pourquoi la table temporaire est si grand. Vous pouvez connaître la réponse à cette question de votre tête. Cela peut être dû à une grande requête que vous venez de lancer avec une sorte qui était une erreur (j'ai fait cela plus d'une fois.) Cela peut être dû à d'autres circonstances exceptionnelles. Si c'est le cas alors tout ce que vous devez faire pour nettoyer est de réduire l'espace de table temporaire et de continuer dans la vie.

Mais que faire si vous ne savez pas? Avant de décider de réduire, vous devrez peut-être faire une enquête sur les causes du grand espace de table. Si cela se produit sur une base régulière, il est possible que votre base de données ait besoin de beaucoup d'espace.

La vue de la performance dynamique

V$TEMPSEG_USAGE 

peut être très utile pour déterminer la cause. Peut-être que vous ne vous souciez pas de la cause et vous avez juste besoin de le réduire. C'est votre troisième jour de travail. Les données de la base de données ne sont que de 200MiB si les données et l'espace de table temporaire sont de 13GiB - Il suffit de le réduire et de passer à autre chose. Si elle se développe à nouveau alors nous allons regarder dans la cause. En attendant, je manque d'espace sur ce volume de disque et j'ai juste besoin d'espace.

Jetons un coup d'oeil à le rétrécir. Cela dépendra un peu de la version d'Oracle que vous utilisez et de la façon dont le tablespace temporaire a été configuré.
Oracle fera de son mieux pour vous éviter de faire des erreurs horribles donc nous allons simplement essayer les commandes et si elles ne fonctionnent pas, nous allons réduire d'une nouvelle manière.

Essayons d'abord de réduire le fichier de données. Si nous pouvons le faire, nous récupérons l'espace et nous pouvons nous demander pourquoi il a augmenté demain.

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 

Selon le message d'erreur que vous voudrez peut-être essayer avec différentes tailles qui sont plus petits que le site actuel du fichier. J'ai eu un succès limité avec . Oracle ne réduira le fichier que si l'espace de table temporaire est en tête du fichier et s'il est inférieur à la taille que vous spécifiez . Une vieille documentation d'Oracle (ils ont corrigé ceci) a dit que vous pourriez émettre la commande et le message d'erreur vous indiquerait quelle taille vous pourriez réduire à. Au moment où j'ai commencé à travailler en tant que DBA, c'était pas vrai.Vous deviez juste deviner et relancer la commande un tas de fois et voir si cela a fonctionné.

D'accord. Cela n'a pas fonctionné. Que dis-tu de ça.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M; 

Si vous êtes en 11g (Maybee en 10g aussi) c'est ça! Si cela fonctionne, vous voudrez peut-être revenir à la commande précédente et lui donner quelques essais supplémentaires.

Mais que se passe-t-il si cela échoue. Si le tablespace temporaire est le temporaire par défaut qui a été configuré lors de l'installation de la base de données, vous devrez peut-être effectuer un travail supplémentaire de . À ce stade, je réévalue habituellement si j'ai vraiment besoin de cet espace . Après tout l'espace disque ne coûte que $ X.XX a GiB. Habituellement, je ne veux pas de faire des changements comme celui-ci pendant les heures de production. Cela signifie travailler à 2h ENCORE! (Pas que j'objecte vraiment de travailler à 2h du matin - c'est juste que ... Eh bien j'aime dormir aussi Et ma femme aime m'avoir à la maison à 2h du matin ... ne pas errer les rues du centre-ville à 4h 0 pour me souvenir où j'ai garé ma voiture 3 heures plus tôt J'ai entendu parler de ce truc "télétravail" Je m'inquiète juste que je vais arriver à mi-chemin et puis ma connectivité Internet va échouer - alors je dois me dépêcher en ville pour le réparer tous devant les gens apparaissent dans le matin pour utiliser la base de données.)

Ok ... Retour aux choses sérieuses ... Si le tablespace temporaire que vous voulez réduire est votre défaut temporaire tablespace, vous aurez créer d'abord un nouvel espace de table temporaire , définissez-le comme l'espace de table temporaire par défaut, puis supprimez de votre ancien tablespace temporaire par défaut et recréez-le. Après les mots , supprimez la seconde table temporaire créée.

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. 

Espérons que l'une de ces choses aidera!

+0

Juste une note - SHRINK SPACE est introduit en 11g, et n'est pas disponible en 10g. Merci pour une description très complète de toutes les options! –

+1

De nombreux articles et articles sur internet suggèrent des procédures très compliquées. Celui-ci était le plus simple que j'ai trouvé! –

+1

Merci beaucoup pour cette explication claire et précise et cette solution. C'est le meilleur trouvé sur Internet jusqu'à présent. –

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

Si cela ne permet pas:

  • Créer un nouveau tablespace
  • Passer au nouveau tablespace temporaire
  • Attendez que vieux tablespace ne sera pas utilisé
  • Supprimer les anciens tablespace
5

Les options de gestion des tablespa ces derniers ont beaucoup mieux sur les versions commençant par 8i. Cela est particulièrement vrai si vous utilisez les types de fichier appropriés pour un espace de table temporaire (c'est-à-dire des fichiers temp gérés localement).

Ainsi, il pourrait être aussi simple que cette commande, qui va diminuer votre tablespace 128 meg ...

alter tablespace <your_temp_ts> shrink space keep 128M; 

Oracle documentation en ligne est assez bonne. Find out more.

modifier

Il semblerait l'OP a une version antérieure de la base de données. Avec les versions antérieures, nous devons redimensionner les fichiers de données individuels. Donc, tout d'abord, trouver les noms de fichiers. L'un ou l'autre de ces questions devrait le faire ...

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

Ensuite, utilisez cette voie dans cette commande:

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

SQL> modifier l'espace de travail temp shrink space keep 128M; modifier tablespace temp shrink espace conserver 128M * ERREUR à la ligne 1: ORA-02142: option ALTER TABLESPACE manquante ou non valide –

1

Il sera de plus en plus parce que vous avez besoin d'espace de stockage temporaire, peut-être en raison à un produit cartésien ou à une grande opération de tri.

La vue de performance dynamique V$TEMPSEG_USAGE aidera à diagnostiquer la cause.

+0

Sera-t-il affiché après utilisation? –

+0

Je ne devrais pas le penser. –

+0

Une autre raison pourrait être une utilisation intensive des tables temporaires globales. –

2

Vous devriez avoir écrit quelle version d'Oracle vous utilisez. Vous utilisez probablement autre chose qu'Oracle 11g, c'est pourquoi vous ne pouvez pas réduire un espace de table temporaire.

Alternatives:

1) alter database tempfile '[your_file]' resize 128M; qui échoueront probablement
2) et recréez l'espace de table. Si le tablespace temporaire que vous voulez réduire est votre tablespace temporaire par défaut, vous devrez peut-être d'abord créer un nouveau tablespace temporaire, le définir comme espace de tables temporaire par défaut, puis supprimer votre ancien tablespace temporaire par défaut et le recréer. Ensuite, supprimez la deuxième table temporaire créée. 3) Pour Oracle 9i et plus vous pouvez simplement laisser tomber le tempfile (s) et ajouter une nouvelle (s)

Tout est décrit here en détail.


Voir ce lien: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
Il était déjà lié, mais peut-être que vous l'avez manqué, si elle est ici à nouveau.

0

Je ne prends pas la peine de laisser tomber la température alternative au cas où je dois récupérer le stockage à l'avenir ...

  1. de température par défaut du jeu de groupe à température autonome
  2. attendre un certain temps, puis redimensionner les membres du groupe temporaire
  3. définir par défaut revenir au groupe temporaire
  4. Attendre un certain temps, redimensionner autonome temp. il n'y a aucune urgence à faire la dernière étape
Questions connexes