You are on page 1of 6

Tablespaces -1-

Tablespaces are used to organise tables and indexes into manageable groups, tablespaces themselves are made
up of one for more data/temp files.

Oracle has 4 types of tablespace

• Permanent - uses data files and normally contain the system and users data
• Temporary - are used to store objects for the duration of a users session, temp files are used to create
temporary tablespaces
• Undo - are a permanent type of tablespace that are used to store undo data which if required would undo
changes of data by users
• Readonly - are permanent tablespace that can only be read, no writes can take place, but the tablespace
can be made read/write.

Every oracle database has at least two tablespaces

• System - is a permanent tablespace and contains the vital data dictionary (metadata about the database)
• Sysaux - is an auxiliary tablespaces and contains performance statistics collected by the database.

Tablespace Management

There are two ways to manage a tablespace

Extents are the basic unit of a tablespace (see Oracle structure.doc under data_files for more
details) and are managed in bitmaps that are kept within the data file header for all the blocks
within that datafile. For example if a tablespace is made up of 128KB extents, each 128KB extent
is represented by a bit in the extent bitmap for this file, the bitmap values indicate if the extent is
used or free. The bitmap is updated when the extent changes there is no updating or any data
dictionary tables thus increasing performance.

Locally Extents are tracked via bitmaps not using recursive SQL.
(default)
Locally managed tablespaces cannot be converted into a dictionary managed one. The benefits of
using a local managed tablespace

• relieves contention on the system tablespace


• free extents are not managed by the data dictionary

• no need to specify storeage parameters


The extent allocation is managed by the data dictionary and thus updating the extent information
requires that you access the data dictionary, on heavy used systems this can cause a performance
drop.
Dictionary
Managed
extents are tracked via FET$ and UET$ using recursive SQL.

Dictionary managed tablespaces can be converted to a locally managed one.

There are a number of things that you should know about tablespaces.
Tablespaces -2-

• Local tablespaces are the default in oracle 10g


• A dictionary tablespace can be changed into a local table but a local tablespace cannot be changed into a
dictionary one
• If the system tablespace is locally managed then you can only create locally managed tablespaces, trying
to create a dictionary one will fail
• Local tablespaces are better in performance than dicationary managed tablespaces as you have to
constantly check the data dicitonary during the course of extent management (called recursive SQL).

Extent Management

Anytime an object needs to grow in size space is added to that object by extents. When you are using locally
managed tablespaces there are two options that the extent size can be managed

This means the extent will vary in size, the first extent starts at 64k and progessively increased
to 64MB by the database. The database automatically decides what size the new extent will be
Autoallocate based on segment growth patterns.
(default)
Autoallocate is useful if you aren't sure about growth rate of an object and you let oracle
decide.
Create the extents the same size by specifying the size when create the tablespace.

This is default for temporary tablespace but not available for undo tablespaces.
Uniform
Becareful with uniform as it can waste space, use this option you are know what the growth
rate of the objects are going to be.

Segment Space Management

Segment space management is how oracle deals with free space with in an oracle data block. The segment space
management you specify at tablespace creation time applies to all segments you later create in the tablespace.

Oracle uses two methods to deal with free space

Oracle manages the free space in the data blocks by using free lists and a pair or storage parameters
PCTFREE and PCTUSED. When the block reaches the PCTUSED percentage the block is then
removed from the freelist, when the block falls below the PCTFREE threshold the block is then
Manual
placed back on the freelist. Oracle has to perform alot of hard work maintaining these lists, a slow
down in performance can occur when you are making lots of changes to the blocks as Oracle needs
to keep checking the block thresholds.
Oracle does not use freelist when using automatic mode, Instead oracle uses bitmaps. A bitmap which
is contained in a bitmap block, indicates whether free space in a data block is below 25%, between
25%-50%, between 50%-75% or above 75%. For an index block the bitmaps can tell you whether the
Automatic
blocks are empty or formatted. Bitmaps do use additional space but this is less than 1% for most
(default)
large objects.

The performance gain from using automatic segment management can be quite striking.
Tablespaces -3-

Permanent Tablespaces

Tablespaces can be either small tablespaces of big tablespaces

• Small tablespace - The tablespace can be made up of a number of data files each of which can be quite
large in size
• Big tablespace - The tablespace will only be made up of one datafile and this can get extremely large.

Tablespace commands

create tablespace test datafile 'c:\oracle\test.dbf' size 2G;


create tablespace test datafile 'c:\oracle\test.dbf' 2G extent management local
Creating
uniform size 1M maxsize unlimited;
create bigfile tablespace test datafile 'c:\oracle\bigfile.dbf' 2G;
Creating non-standard block size create tablespace test datafile 'c:\oracle\test.dbf' size 2G blocksize 8K;
drop tablespace test;
Removing drop tablespace test including contents and datafiles; (removes the contents and
the physical data files)
alter tablespace test rename to test99;
alter tablespace test [offline|online];
Modifying
alter tablespace test [readonly|read write];
alter tablespace test [begin backup | end backup];
Adding data files alter tablespace test add datafile 'c:\oracle\test02.dbf' 2G;
Rename a data file alter tablespace test rename datafile 'c:\oracle\test.dbf' to 'c:\oracle\test99.dbf';
Tablespace management create tablespace test datafile 'c:\oracle\test.dbf' 2G extent management manual;
create tablespace test datafile 'c:\oracle\test.dbf' 2G uniform size 1M maxsize
Extent management
unlimited;
create tablespace test datafile 'c:\oracle\test.dbf' 2G segment space management
Segment Space management
manual;
Set default tablespace alter database default tablespace users;
select property_value from database_properties where property_name =
Display default tablespace
'DEFAULT_PERMANENT_TABLESPACE';
Get properties of an existing
select DBMS_METADATA.GET_DDL('TABLESPACE','USERS') from dual;
tablespace
select property_value from database_properties where property_name =
Display default tablespace type
'DEFAULT_TBS_TYPE';
Set default tablespace type alter tablespace set default bigfile tablespace;
select tablespace_name, round(sum(bytes/1024/1024),1) "FREE MB" from
Free Space
dba_free_space group by tablespace_name;
Useful Tables
DBA_TABLESPACES
DBA_DATA_FILES
Tablespaces -4-

DBA_TEMP_FILES
DBA_TABLESPACE_GROUPS
DBA_SEGEMENTS
DBA_FREE_SPACE
V$TABLESPACE
DATABASE_PROPERTIES Displat the default tablespace for the instance

Datafile Commands

Resizing alter database datafile 'c:\oracle\test,dbf' resize 3G;


alter database datafile 'c:\oracle\test,dbf' offline;
Offlining
Note: you must offline the tablespace first
Onlining alter database datafile 'c:\oracle\test,dbf' online;
Renaming alter database rename file 'c:\oracle\test,dbf' to 'c:\oracle\test99.dbf';

If you create tablespaces with non-standard block sizes you must set the DB_nK_CACHE_SIZE parameter,
there are 5 non-stanardard sizes 2k, 4k, 8k, 16k and 32k. The DB_CACHE_SIZE parameter sets the default
block size for all new tablespace if the blocksize option is emitted.

Temporary tablespaces

Temporary tablespaces are used for order by, group by and create index. It is required when the system
tablespace is locally managed. In oracle 10g you can now create temporary tablespace groups which means you
can use multiple temporary tablespaces simultaneously.

The benefits of using a temporary tablespace group are

• SQL queries are less likely to run out of space


• You can specify multiple default temporary tablespaces at the db level
• Parallel execution can utilize multiple temporary tablespaces
• single user can simultaneously use multiple temp tablespaces in different sessions.

When creating a temporary table, the table can exist only for the below

• Last for duration of the transaction - ON COMMIT DELETE ROWS


• Last for the duration of the session - ON COMMIT PERSERVE ROWS

Temporary tablespace commands

create temporary tablespace temp tempfile 'c:\oracle\temp.dbf' size 2G


Creating non temp group
autoextend on;
create temporary tablespace temp tempfile 'c:\oracle\temp.dbf' size 2G
Creating temp group
tablespace group '';
Tablespaces -5-

alter tablespace temp02 tablespace group tempgrp;


Adding to temp group
Note: if no group exists oracle will create it
Removing from temp group alter tablespace temp02 tablespace group '';
Displaying temp groups select group_name, tablespace_name from dba_tablespace_groups;
Make user use temp group alter user vallep temporary tablespace tempgrp;
set default alter database default temporary tablespace temp02;
select property_value from database_properties where property_name =
Display default
'DEFAULT_TEMPORARY_TABLESPACE';
Useful Tables
DBA_TABLESPACE_GROUPS List temporary tablespace groups
V$SORT_SEGMENT Tablespace Usage
V$TEMPSEG_USAGE Tablespace Usage

Undo Tablespaces

Undo tablespaces are used to store orginal data after it has been changed, if a user decides to rollback a change
the information in the undo tablespace is used to put back the data in its original state.

Undo tablespaces are used for the following

• Rolling back transactions explicitly with a ROLLBACK command


• Rolling back transactons implicity (automatic instance recovery)
• Reconstructing read-consistent image of data
• Recovering from logical corruptions

Creating create undo tablespace undotbs02 datafile ' c:\oracle\undo01.dbf' size 2G;
set default alter system set undo_tablespace='undotbs02';

Tablespace quotas

You can assign a user tablespace quota thus limiting to a certain amount of storage space within the tablespace.
By default a user has none when the account is first created.

Tablespace Alerts

The MMON daemon checks tablespace usage every 10 mins to see if any thresholds have been exceeded and
raises any alerts. There are two types of alerts warning (low space warning) and critical (action should be taken
immediately). Both thresholds can be changed via OEM or DBMS_SERVER_ALERT package.

Oracle Managed Files

Oracle can make file handling a lot easy by managing the oracle files itself, there are three parameters that can
be set so that oracle will manage the data, temp, redo, archive and flash logs for you
Tablespaces -6-

• DB_CREATE_FILE_DEST - sets the default location of the data/temp files


• DB_CREATE_ONLINE_LOG_DEST_n - sets the default location of the redo, archived log files and
controlfiles.
• DB_RECOVERY_FILE_DEST - sets the default location of the flashback logs.

setting db_create_file_dest alter system set db_create_file_dest=':c\oracle\data' scope=both;


setting
alter system set db_create_online_log_dest_n='c:\oracle\archive' scope=both;
db_create_online_log_dest
Creating create tablespace user01;
Removing drop tablespace user01;
Adding datafile alter tablespace user01 add datafile 1G;

Tablespace Logging

Tablespace logging can be overridden by logging specification at the table-level.