0% found this document useful (0 votes)
16 views7 pages

Resizing Temporary Tablespace

The document provides guidance for resizing temporary tablespaces in Oracle databases, detailing methods for dropping and recreating temporary tablespaces or dropping tempfiles directly. It emphasizes performing these actions during off-hours to avoid user disruptions and outlines specific SQL commands for each method. The document also addresses potential errors and considerations when managing temporary tablespaces, particularly in Oracle9i and higher versions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views7 pages

Resizing Temporary Tablespace

The document provides guidance for resizing temporary tablespaces in Oracle databases, detailing methods for dropping and recreating temporary tablespaces or dropping tempfiles directly. It emphasizes performing these actions during off-hours to avoid user disruptions and outlines specific SQL commands for each method. The document also addresses potential errors and considerations when managing temporary tablespaces, particularly in Oracle9i and higher versions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

RESIZING TEMPORARY TABLESPACE

by Jeff Hunter, Sr. Database Administrator

Contents
Introduction
Dropping / Recreating Temporary Tablespace Method
Drop Tempfile Command Method - (Oracle9i and higher)
About the Author

Introduction
In many database configurations, the DBA will choose to allow their
temporary tablespace (actually the tempfile(s) for the temporary
tablespace) to autoextend. A runaway query or sort can easily chew up
valuable space on the disk as the tempfiles(s) extends to accommodate
the request for space. If the increase in size of the temporary
tablespace (the tempfiles) gets exceedingly large because of a
particular anomaly, the DBA will often want to resize the temporary
tablespace to a more reasonable size in order to reclaim that extra
space. The obvious action would be to resize the tempfiles using the
following statement:

SQL> alter database tempfile '/u02/oradata/TESTDB/temp01.dbf'


resize 250M;
alter database tempfile '/u02/oradata/TESTDB/temp01.dbf' resize
250M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
Ouch. You next bounce the database and attempt the same statement
only to be greeted with the same error!

Several methods exist to reclaim the used space used for a larger than
normal temporary tablespace depending on which release of Oracle
you are running. The method that exists for all releases of Oracle is to
simply drop and recreate the temporary tablespace back to its original
(or another reasonable) size. If you are using Oracle9i or higher, you
can apply another method which is to drop the large tempfile (which
will drop the tempfile from the data dictionary AND the O/S file system)
using the alter database tempfile '<tempfile name>' drop including
datafiles; command.

Each method is explained below.

Dropping / Recreating Temporary Tablespace Method


Keep in mind that the procedures documented here for dropping and
recreating your temporary tablespace should be performed during off
hours with no users logged on performing work.

If you are working with a temporary tablespace in Oracle8i or a


temporary tablespace in Oracle9i that is NOT the default temporary
tablespace for the database, this process is straight forward. Simply
drop and recreate the temporary tablespace:

SQL> DROP TABLESPACE temp;

Tablespace dropped.

SQL> CREATE TEMPORARY TABLESPACE TEMP


2 TEMPFILE '/u02/oradata/TESTDB/temp01.dbf' SIZE 500M
REUSE
3 AUTOEXTEND ON NEXT 100M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

Oracle9i Default Temporary Tablespace

The procedures above document how to drop a temporary tablespace


that is not the default temporary tablespace for the database. You will
know fairly quickly if the tablespace is a default temporary tablespace
when you are greeted with the following exception:

SQL> DROP TABLESPACE temp;


drop tablespace temp
*
ERROR at line 1:
ORA-12906: cannot drop default temporary tablespace

In cases where the temporary tablespace you want to resize (using the
drop/recreate method) is the default temporary tablespace for the
database, you have several more steps to perform, all documented
below. The first step you need to perform is create another temporary
tablespace (lets call it TEMP2). The next step would be to remove the
temporary tablespace you want to resize from being the default
temporary tablespace (in our example, this will be a tablespace named
TEMP) by making TEMP2 the default. Drop / recreate the TEMP
tablespace to the size you want. Finally, make the newly created TEMP
tablespace your default temporary tablespace for the database and
drop the TEMP2 tablespace. A full example session is provided below:

SQL> CREATE TEMPORARY TABLESPACE temp2


2 TEMPFILE '/u02/oradata/TESTDB/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 '/u02/oradata/TESTDB/temp01.dbf' SIZE 500M
REUSE
3 AUTOEXTEND ON NEXT 100M 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.

Drop Tempfile Command Method - (Oracle9i and higher)


If you are using Oracle9i or higher, another method exists that allows
you to simply drop a tempfile. As with the above method, this should
be performed during off hours with no users logged on performing
work.

The first step is to obtain the name of the tempfile to drop. For this
example, my temporary tablespace name is TEMP and the name of the
tempfile is /u02/oradata/TESTDB/temp2_01.dbf:

SQL> SELECT tablespace_name, file_name, bytes


2 FROM dba_temp_files WHERE tablespace_name = 'TEMP';

TABLESPACE_NAME FILE_NAME BYTES


----------------- -------------------------------- --------------
TEMP /u02/oradata/TESTDB/temp01.dbf 13,107,200,000

The normal size of my temporary tablespace is 512MB which has


always been more than adequate for this environment. A bad query,
however, increased the size of this tablespace (my tempfile) to over
13GB and I would like to reclaim that space. In the example below, I
simply drop and recreate the tempfile:

SQL> ALTER DATABASE TEMPFILE


'/u02/oradata/TESTDB/temp01.dbf' DROP INCLUDING
DATAFILES;

Database altered.

SQL> ALTER TABLESPACE temp ADD TEMPFILE


'/u02/oradata/TESTDB/temp01.dbf' SIZE 512m
2 AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;

Tablespace altered.

On some platforms (i.e. Windows 2000), it is possible for


the tempfile to be deleted from DBA_TEMP_FILES but not
from the file system.

If this occurs, simply delete the file using regular O/S


commands.

SQL> SELECT tablespace_name, file_name, bytes


2 FROM dba_temp_files WHERE tablespace_name = 'TEMP';

TABLESPACE_NAME FILE_NAME BYTES


----------------- -------------------------------- --------------
TEMP /u02/oradata/TESTDB/temp01.dbf 536,870,912

If users are currently accessing the tempfile you are


attempting to drop, you may receive the following error:

SQL> ALTER DATABASE TEMPFILE


'/u02/oradata/TESTDB/temp01.dbf' DROP INCLUDING
DATAFILES;
ALTER DATABASE TEMPFILE
'/u02/oradata/TESTDB/temp01.dbf' DROP INCLUDING
DATAFILES
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time

As for the poor users who were using the tempfile, their
transaction will end and will be greeted with the following
error message:

SQL> @testTemp.sql
join dba_extents c on (b.segment_name = c.segment_name)
*
ERROR at line 4:
ORA-00372: file 601 cannot be modified at this time
ORA-01110: data file 601:
'/u02/oradata/TESTDB/temp01.dbf'
ORA-00372: file 601 cannot be modified at this time
ORA-01110: data file 601:
'/u02/oradata/TESTDB/temp01.dbf'

If this happens, you should attempt to drop the tempfile


again so the operation is successful:

SQL> ALTER DATABASE TEMPFILE


'/u02/oradata/TESTDB/temp01.dbf' DROP INCLUDING
DATAFILES;

Database altered.

You might also like