본문 바로가기

DB/DBA

테이블스페이스가 얼마나 사용중인지...알수있는방법

 

/* tablespace size현황 */

select

a.tablespace_name name,

sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id ) bytes,

sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id ) -

sum(a.bytes)/count( distinct b.file_id ) used,

sum(a.bytes)/count( distinct b.file_id ) free,

100 * ( (sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id )) -

(sum(a.bytes)/count( distinct b.file_id ) )) /

(sum(b.bytes)/count( distinct a.file_id||'.'||a.block_id )) pct_used

from dba_free_space a,

dba_data_files b

where a.tablespace_name = b.tablespace_name

group by a.tablespace_name

/

 

select a.tablespace_name, b.total total, b.total - a.free used,

a.free free , round(100 * ((b.total - a.free)/b.total))||'%' used_space

from (select tablespace_name, sum(bytes) free from dba_free_space group by tablespace_name) a,

(select tablespace_name, sum(bytes)total from dba_data_files group by tablespace_name) b

where b.tablespace_name = a.tablespace_name

/

 

/* tablespace extent현황 */

select segment_name object_name , segment_type object_type,

tablespace_name , round(sum(bytes)/1024/1024,2) Mb,

sum(decode(extent_id,0, bytes, 0))/1024 initial_ex,

sum(decode(extent_id, 1, bytes, 0))/1024 next_ex,

max(extent_id)+1 extents , sum(bytes)/1024 ttlsize

from user_extents Where segment_type='TABLE'

group by segment_name, segment_type, tablespace_name

/

 

/* tablespace 사용현황 */

select

a.tablespace_name ts_name,

a.file_name f_name,

a.bytes/1024/1024 Mbytes,

b.phyrds p_reads,

b.phywrts p_writes,

b.phyblkrd p_b_reads,

b.phyblkwrt p_b_writes

from dba_data_files a,

v$filestat b

where a.file_id =b.file#

/

 

/* system tablespace 사용정보 */

select ts.name tb_space,

tf.file# file_id,

tf.blocks blocks,

sum(f.length) free,

count(*) pieces,

max(f.length) biggest,

min(f.length) smallest,

round(avg(f.length)) average,

sum(decode(sign(f.length-5),-1,f.length)) dead

from sys.fet$ f,

sys.file$ tf,

sys.ts$ ts

where ts.ts#=f.ts#

and ts.ts#=tf.ts#

and tf.file#=f.file#

group by ts.name,tf.file#,tf.blocks

order by ts.name,tf.file#,tf.blocks

/

 

/* table 사용현황 */

create or replace

procedure show_space

( p_segname in varchar2,

p_owner in varchar2 default user,

p_type in varchar2 default 'TABLE' )

as

l_free_blks number;

 

l_total_blocks number;

l_total_bytes number;

l_unused_blocks number;

l_unused_bytes number;

l_LastUsedExtFileId number;

l_LastUsedExtBlockId number;

l_LAST_USED_BLOCK number;

procedure p( p_label in varchar2, p_num in number )

is

begin

dbms_output.put_line( rpad(p_label,40,'.') || p_num );

end;

begin

dbms_space.free_blocks

( segment_owner => p_owner,

segment_name => p_segname,

segment_type => p_type,

freelist_group_id => 0,

free_blks => l_free_blks );

 

dbms_space.unused_space

( segment_owner => p_owner,

segment_name => p_segname,

segment_type => p_type,

total_blocks => l_total_blocks,

total_bytes => l_total_bytes,

unused_blocks => l_unused_blocks,

unused_bytes => l_unused_bytes,

LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,

LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,

LAST_USED_BLOCK => l_LAST_USED_BLOCK );

 

p( 'Free Blocks', l_free_blks );

p( 'Total Blocks', l_total_blocks );

p( 'Total Bytes', l_total_bytes );

p( 'Unused Blocks', l_unused_blocks );

p( 'Unused Bytes', l_unused_bytes );

p( 'Last Used Ext FileId', l_LastUsedExtFileId );

p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );

p( 'Last Used Block', l_LAST_USED_BLOCK );

end;

/

 

exec show_space( 'EMP' );