Sometimes it is required to measure how much space a tables occupy in Oracle. The size sum-up table and its co-related indexes, partitions, lobs, lob partitions. here are two SQL scripts, first one listed all tables own by a specific user and second one include tablespace too.
SELECT segment_name, sum(size_mb) size_mb
FROM (
SELECT CASE WHEN x.segment_type in ('LOBSEGMENT','LOB PARTITION') THEN
(SELECT table_name FROM dba_lobs y WHERE y.segment_name= x.segment_name)
WHEN x.segment_type='LOBINDEX' THEN
(SELECT table_name FROM dba_lobs y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in('INDEX','INDEX PARTITION','INDEX SUBPARTITION') THEN
(SELECT y.table_name FROM dba_indexes y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in ('TABLE SUBPARTITION', 'TABLE PARTITION','TABLE')
THEN x.segment_name END segment_name
,round(sum(x.bytes)/(1024*1024),2) size_mb
FROM dba_segments x
WHERE x.owner ='SCOTT'
GROUP BY x.segment_name, x.segment_type
)
GROUP BY segment_name
ORDER BY size_mb DESC;
SELECT segment_name, tablespace_name, sum(size_mb) size_mb
FROM (
SELECT CASE WHEN x.segment_type in ('LOBSEGMENT','LOB PARTITION') THEN
(SELECT table_name FROM dba_lobs y WHERE y.segment_name= x.segment_name)
WHEN x.segment_type='LOBINDEX' THEN
(SELECT table_name FROM dba_lobs y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in('INDEX','INDEX PARTITION','INDEX SUBPARTITION') THEN
(SELECT y.table_name FROM dba_indexes y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in ('TABLE SUBPARTITION', 'TABLE PARTITION','TABLE')
THEN x.segment_name END segment_name
, x.tablespace_name
, round(sum(x.bytes)/(1024*1024),2) size_mb
FROM dba_segments x
WHERE x.owner ='SCOTT'
GROUP BY x.segment_name, x.tablespace_name,x.segment_type
)
GROUP BY segment_name, tablespace_name
ORDER BY size_mb DESC;
SELECT segment_name, sum(size_mb) size_mb
FROM (
SELECT CASE WHEN x.segment_type in ('LOBSEGMENT','LOB PARTITION') THEN
(SELECT table_name FROM dba_lobs y WHERE y.segment_name= x.segment_name)
WHEN x.segment_type='LOBINDEX' THEN
(SELECT table_name FROM dba_lobs y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in('INDEX','INDEX PARTITION','INDEX SUBPARTITION') THEN
(SELECT y.table_name FROM dba_indexes y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in ('TABLE SUBPARTITION', 'TABLE PARTITION','TABLE')
THEN x.segment_name END segment_name
,round(sum(x.bytes)/(1024*1024),2) size_mb
FROM dba_segments x
WHERE x.owner ='SCOTT'
GROUP BY x.segment_name, x.segment_type
)
GROUP BY segment_name
ORDER BY size_mb DESC;
SELECT segment_name, tablespace_name, sum(size_mb) size_mb
FROM (
SELECT CASE WHEN x.segment_type in ('LOBSEGMENT','LOB PARTITION') THEN
(SELECT table_name FROM dba_lobs y WHERE y.segment_name= x.segment_name)
WHEN x.segment_type='LOBINDEX' THEN
(SELECT table_name FROM dba_lobs y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in('INDEX','INDEX PARTITION','INDEX SUBPARTITION') THEN
(SELECT y.table_name FROM dba_indexes y WHERE y.index_name = x.segment_name)
WHEN x.segment_type in ('TABLE SUBPARTITION', 'TABLE PARTITION','TABLE')
THEN x.segment_name END segment_name
, x.tablespace_name
, round(sum(x.bytes)/(1024*1024),2) size_mb
FROM dba_segments x
WHERE x.owner ='SCOTT'
GROUP BY x.segment_name, x.tablespace_name,x.segment_type
)
GROUP BY segment_name, tablespace_name
ORDER BY size_mb DESC;
3 comments:
Learn data visualization and analytics with a comprehensive tableau developer course designed for real-world business insights.
Enroll in the best power bi course to master data visualization, dashboards, and real-world analytics with hands-on projects.
An Android mobile app development course teaches end-to-end development.It focuses on real-world projects.This Android mobile app development course supports career success.It is reliable.
Post a Comment