ORA-01652 impossible de prolonger le segment temp dans tablespace

je crée une table comme

create table tablename
as
select * for table2

j'obtiens l'erreur

ORA-01652 Unable to extend temp segment by in tablespace

quand j'ai googlé, j'ai trouvé une erreur ORA-01652 montrant une valeur comme

Unable to extend temp segment by 32 in tablespace

Je n'obtiens pas une telle valeur.J'ai lancé cette requête

select 
   fs.tablespace_name                          "Tablespace", 
   (df.totalspace - fs.freespace)              "Used MB", 
   fs.freespace                                "Free MB", 
   df.totalspace                               "Total MB", 
   round(100 * (fs.freespace / df.totalspace)) "Pct. Free" 
from 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) TotalSpace 
   from 
      dba_data_files 
   group by 
      tablespace_name 
   ) df, 
   (select 
      tablespace_name, 
      round(sum(bytes) / 1048576) FreeSpace 
   from 
      dba_free_space 
   group by 
      tablespace_name 
   ) fs 
where 
   df.tablespace_name = fs.tablespace_name; 

tiré de: Retrouvez l'espace libre sur tablespace

et j'ai trouvé que le tablespace que j'utilise dispose actuellement d'environ 32 Go d'espace libre. J'ai même essayé de créer une table comme

create table tablename tablespace tablespacename
as select * from table2 

mais j'ai encore la même erreur. Quelqu'un peut-il me donner une idée, où est le problème et comment le résoudre. Pour votre information, la déclaration select me rapporterait 40 millions de dossiers.

20
demandé sur Community 2012-08-07 09:06:34

3 réponses

j'ai trouvé la solution. Il existe un tablespace temporaire appelé TEMP qui est utilisé en interne par la base de données pour des opérations telles que distinct, joins,etc. Depuis ma requête (qui a 4 jointures) récupère près de 50 millions d'enregistrements l'espace de Tablet TEMP N'a pas beaucoup d'espace pour occuper toutes les données. Par conséquent, la requête échoue même si ma tablespace a de l'espace libre.Ainsi, après avoir augmenté la taille de l'espace de travail temporaire, le problème a été résolu. Espérons que cela aide quelqu'un avec le même problème. Grâce :)

33
répondu Niranjan Sonachalam 2015-07-18 15:52:28

Créer un nouveau fichier de données en exécutant la commande suivante:

alter tablespace TABLE_SPACE_NAME add datafile 'D:\oracle\Oradata\TEMP04.dbf'            
   size 2000M autoextend on;
6
répondu Maria Ruchko 2015-08-26 06:43:09

vous n'avez pas besoin de créer un nouveau fichier de données; vous pouvez étendre vos fichiers de données tablespace existants.

exécutez ce qui suit pour déterminer le nom du fichier pour l'espace de table existant:

  SELECT * FROM DBA_DATA_FILES;

puis étendre la taille du fichier de données comme suit (remplacer le nom du fichier par celui de la requête précédente):

  ALTER DATABASE DATAFILE 'D:\ORACLEXE\ORADATA\XE\SYSTEM.DBF' RESIZE 2048M; 
2
répondu Templar 2014-02-19 01:28:06