How to find the size of a table in Oracle

To find the size of a table in Oracle, you can use several methods depending on the level of detail you need. Here's a summary of common approaches:

1. Using DBA_SEGMENTS (Shows table size)

The DBA_SEGMENTS view provides detailed information about the storage used by database objects, including tables. You can use this to find the size of a specific table.

Query for a Table's Size:

SELECT segment_name,
       segment_type,
       tablespace_name,
       SUM(bytes) / 1024 / 1024 AS size_mb
FROM dba_segments
WHERE segment_type = 'TABLE'
  AND owner = '<SCHEMA_NAME>'
  AND segment_name = '<TABLE_NAME>'
GROUP BY segment_name, segment_type, tablespace_name;
  • Replace <SCHEMA_NAME> with the schema name (owner of the table).

  • Replace <TABLE_NAME> with the name of the table.

  • The result will show the size in MB.


2. Using USER_SEGMENTS (If you don't have DBA privileges)

If you don't have access to DBA_SEGMENTS (which is the case for regular users), you can use USER_SEGMENTS, which works similarly but only shows data for objects owned by the current user.

SELECT segment_name,
       segment_type,
       tablespace_name,
       SUM(bytes) / 1024 / 1024 AS size_mb
FROM user_segments
WHERE segment_type = 'TABLE'
  AND segment_name = '<TABLE_NAME>'
GROUP BY segment_name, segment_type, tablespace_name;
  • Replace <TABLE_NAME> with the table name you're interested in.

  • The result will also show the table size in MB.


3. Using ALL_TAB_COLUMNS (Approximate size using column stats)

If you need an approximate size based on the number of rows and average column length, you can query ALL_TAB_COLUMNS and ALL_TABLES.

SELECT t.table_name,
       SUM(c.data_length) / 1024 / 1024 AS estimated_size_mb
FROM all_tables t
JOIN all_tab_columns c
    ON t.table_name = c.table_name
WHERE t.table_name = '<TABLE_NAME>'
  AND t.owner = '<SCHEMA_NAME>'
GROUP BY t.table_name;
  • Replace <SCHEMA_NAME> with the schema and <TABLE_NAME> with the name of the table.

  • This method provides an estimated size based on column data lengths but doesn't account for actual storage blocks used (like DBA_SEGMENTS).


Key Points:

  • DBA_SEGMENTS is the most reliable method for getting the actual size.
  • If you only have access to the tables in your schema, use USER_SEGMENTS.
  • DBMS_SPACE provides detailed space usage but requires more complex setup.


Post a Comment

And that's all there is to it!

If anyone has any other questions or requests for future How To posts, you can either ask them in the comments or email me. Please don't feel shy at all!

I'm certainly not an expert, but I'll try my hardest to explain what I do know and research what I don't know.

Previous Post Next Post