Tablespace Segment space management automatic and manual in Oracle

Tablespace Segment space management automatic and manual in Oracle

Segment size management manual vs segment size management auto:
AUTOMATIC Segment Space management in tablespace used bitmap for tracking the freelist, it remove use of freelist management which cause the contention on the segment header that occurs with freelists management.
MANUAL used freelist (like linked list concept) for managing the space.

Note:Automatic segment space management is the default for all new permanent, locally managed tablespaces.

Check tablespace is automatic or manual

SELECT tablespace_name, segment_space_management FROM dba_tablespaces;

TABLESPACE_NAME                SEGMEN
------------------------------ ------
SYSTEM                         MANUAL
SYSAUX                         AUTO
UNDOTBS1                       MANUAL
TEMP                           MANUAL
USERS                          AUTO

Create Space Management in tablespace

AUTOMATIC

CREATE TABLESPACE salestb DATAFILE 'D:\oracle\oradata\orcl\sales_001.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

MANUAL

CREATE TABLESPACE salestb DATAFILE 'D:\oracle\oradata\orcl\sales_001.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL;

Note: Create your tablespaces with the locally managed and automatic segment space management features (ASSM) enabled.
(default behavior) for Better Performance also.

Default create behavior by Oracle

-- Create a tablespace with name sales_db
create tablespace sales_db datafile 'D:\oracle\oradata\orcl\sales_01.dbf' size 100m;

-- Check the default configuration Oracle Choose:
select tablespace_name, extent_management, segment_space_management from dba_tablespaces where tablespace_name='TOOLS';

TABLESPACE_NAME EXTENT_MANAGEMENT SEGMENT_SPACE_MANAGEMENT
--------------- ----------------- -------------------------
SALES_DB        LOCAL             AUTO

Modify or switch between automatic or Manual space management
Note: There is no way to convert the tablespace from automatic to manually or vise versa.

1. Simple method is create a new tablespace with desired options and move the objects from the old tablespace to new tablespace.
Option 1:
Use index or tablespace movement commands:

-- For table
ALTER TABLE table_name MOVE new_tablespace;

-- For Index
ALTER INDEX index_name REBUILD new_tablespace;

With following query you find the objects present in your tablespace and commands of movement:
Note: Specify the tablespace name from which you choose to move means source tablespace.

SELECT Segment_Name, Segment_Type, Tablespace_Name, Bytes, Blocks, Extents, q'[ALTER ]' || Segment_Type || q'[ ]' || USER || q'[.]' || Segment_Name || CASE WHEN Segment_Type = 'INDEX' THEN q'[ REBUILD ]' ELSE q'[ MOVE ]' END || q'[ TABLESPACE ]' || q'[TABLESPACE_NAME_GOES_HERE]' || q'[;]'
FROM Dba_Segments WHERE Tablespace_Name = 'USERS' ORDER BY Segment_Name;

Option 2:
Use Export or import utility to move the data from one tablespace to other tablespace.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.