web-dev-qa-db-fra.com

Comment réduire l'espace de table temporaire dans Oracle?

Comment pouvons-nous réduire l'espace table temporaire dans Oracle? Et pourquoi elle augmente tellement, jusqu’à 25 Go, puisqu’il n’ya qu’un seul schéma dans la base de données pour l’application et que la taille de l’espace de la table de données est de 2 Go et que celle de la table d’index est de 1 Go.

31
P Sharma

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

Oui, j'ai lancé une requête pour voir la taille de mon espace de table temporaire: 

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 vous poser est de savoir pourquoi l’espace de table temporaire est si grand… .. Vous connaissez peut-être la réponse à cette question à votre insu. Cela peut être dû à une requête volumineuse Que vous venez de lancer avec un type qui était une erreur (je l'ai déjà fait Plus d'une fois.) Cela peut être dû à une autre circonstance exceptionnelle. Si tel est le cas, il vous suffira de réduire l'espace disque temporaire Et de passer à autre chose.

Mais si tu ne sais pas? Avant de décider de vous rétrécir, vous devrez peut-être mener une enquête sur les causes du grand espace de table. Si cela se produit régulièrement, il est possible que votre base de données ne nécessite que beaucoup d’espace.

La vue dynamique des performances

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 que vous avez juste besoin de la réduire. C’est votre troisième jour de travail. Les données dans la base de données ne pèsent que 200 Mo Si les données et l’espace disque temporaire sont de 13 Go - Réduisez-les simplement et poursuivez. Si cela augmente encore, nous examinerons la cause. En attendant, je manque d'espace sur ce volume de disque et j'ai juste besoin de récupérer de l'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 configuration de l'espace de table temporaire.
Oracle fera de son mieux pour vous empêcher de commettre d’horribles erreurs Nous allons simplement essayer les commandes et, si elles ne fonctionnent pas, nous allons réduire notre taille.

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 grandi 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

En fonction du message d'erreur, vous pouvez essayer ceci avec différentes tailles Plus petites que le site actuel du fichier. J'ai eu un succès limité avec cela. Oracle ne réduira le fichier que si le tablespace temporaire est situé en tête du fichier et s'il est plus petit que la taille que vous spécifiez Certains anciens documents Oracle (ils corrigeaient cela) disaient que vous pouviez lancer la commande et le message d'erreur vous indiquerait la taille de Que vous pouviez réduire. Au moment où j'ai commencé à travailler comme administrateur de base de données, c'était Faux. Vous deviez deviner et relancer la commande plusieurs fois .__ et voir si cela fonctionnait.

Bien. Ça n'a pas marché. Que dis-tu de ça.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;

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

Mais si cela échoue. Si le tablespace temporaire est le fichier Temporaire défini par défaut lors de l'installation de la base de données, vous devrez peut-être effectuer un travail beaucoup plus important. À ce stade, je réévalue généralement si j’ai vraiment besoin de cela. Après tout, l’espace disque ne coûte que X.XX $ par Go. D'habitude, je ne veux pas faire de tels changements pendant les heures de production. Cela signifie travailler à 2 heures du matin ENCORE! (Non pas que je m'oppose vraiment à travailler à 2 heures du matin - c'est juste que ... Et bien j'aime bien dormir aussi. Et ma femme à 4 heures du matin, j'essaie de me rappeler où j'ai garé ma voiture trois heures plus tôt. J'ai entendu parler de ce "travail à distance". - alors je dois me précipiter au centre-ville pour tout réparer avant que les gens ne se présentent 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 tablespace par défaut Temporaire, vous devez d'abord créer un nouveau tablespace temporaire tablespace temporaire par défaut, puis déposez votre ancien espace de table temporaire par défaut et recréez-le. Après mots Déposez la deuxième 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 qu'une de ces choses va aider!

97
Philip Schlump

Les options de gestion des espaces de table se sont beaucoup améliorées par rapport aux 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 temporaires gérés localement). 

Donc, cela pourrait être aussi simple que cette commande, qui réduira votre espace de table à 128 Mo ...

alter tablespace <your_temp_ts> shrink space keep 128M;

La documentation en ligne Oracle est très bonne. En savoir plus.

modifier

Il semblerait que le PO ait une version antérieure de la base de données. Avec les versions antérieures, nous devons redimensionner des fichiers de données individuels. Alors, tout d’abord, trouvez les noms de fichiers. L'une ou l'autre de ces requêtes 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>'
/ 

Puis utilisez ce chemin dans cette commande:

alter database datafile '/full/file/path/temp01.dbf'  resize 128m
/
6
APC

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 échouera probablement
2) Supprimez et recréez le tablespace. Si l'espace table temporaire que vous souhaitez réduire est votre espace table temporaire par défaut, vous devrez peut-être d'abord créer un nouvel espace table temporaire, le définir comme espace table temporaire par défaut, puis supprimer votre ancien espace table temporaire par défaut et le recréer. Ensuite, supprimez la deuxième table temporaire créée . 3) Pour Oracle 9i et supérieur, vous pouvez simplement supprimer le (s) fichier (s) temporaire (s) et en ajouter un nouveau.

Tout est décrit ici en détail.


Voir ce lien: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablepace.html
C'était déjà lié, mais peut-être que vous l'avez manqué, alors le voici à nouveau.

2
Marius Burz

Il va augmenter car vous avez besoin d'un espace de stockage temporaire, probablement à cause d'un produit cartésien ou d'une opération de tri volumineuse.

La vue dynamique des performances V$TEMPSEG_USAGE aidera à diagnostiquer la cause.

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

Si cela ne vous aide pas:

  • Créer un nouveau tablespace
  • Passer au nouvel espace de table temporaire
  • Attendez que l'ancien espace de table ne soit plus utilisé
  • Supprimer l'ancien espace de table
0
demas

Les espaces de table temporaires sont utilisés pour les opérations de tri et de jonction de bases de données et pour le stockage de tables temporaires globales. Sa taille peut augmenter avec le temps et nous devons donc recréer un espace de table temporaire ou le réduire pour libérer l'espace inutilisé.

Procédure pour réduire l'espace de table TEMP

0
Rosel

Je ne me soucie pas de laisser tomber le temp alternatif au cas où je devrais récupérer le stockage dans le futur ...

  1. du groupe temp défini par défaut à temp autonome
  2. attendez un moment, puis redimensionnez les membres du groupe temporaire
  3. redéfinir la valeur par défaut sur le groupe temporaire
  4. attendez un peu, redimensionnez le temp. il n'y a pas de précipitation pour faire la dernière étape
0
leinad31