How to Shrink the Datafile of Temporary Tablespace in Oracle

The database has a program that performs a huge sort operation (e.g. end of the year reporting process). This may cause the TEMP tablespace to grow and occupy most of the space on the file system. In this example, the reporting process may run once or twice a year and there is no need to maintain/keep a huge tempfile.

The TEMP tablespace was created with datafiles (dictionary managed tablespace temporary) as AUTOEXTEND ON MAXSIZE UNLIMITED to avoid the Error:

ORA-1652 Text: unable to extend temp segment by %s in tablespace %s.

Attempts have been made to “alter database datafile .. resize” which fail with:

Error: ORA 3297 : file contains <> blocks of data beyond requested RESIZE value

You want to shrink the datafile to utilize the disk space for other tablespaces or other purposes. Please follow the steps outlined below in this case:

1. Create a new temporary tablespace with desired smaller size:

SQL> create temporary tablespace TEMP1 tempfile 'c:\temp01.dbf' size 100M extent management local uniform size 128K;

2. If the original tablespace is a default temporary tablespace, set the new tablespace as default temporary tablespace for all users in the database:

SQL> alter database default temporary tablespace TEMP1;

3. If necessary, explicitly re-assign specific users to the new tablespace:

SQL> alter user <username> temporary tablespace TEMP1;</username>

4. Drop the old tablespace:

SQL> drop tablespace temp including contents;
SQL> drop tablespace temp INCLUDING CONTENTS AND DATAFILES;