oracle 空间对象,Oracle查看对象空间使用情况show_space

tom大神写了一个用于查看Oracle数据库对象空间使用情况。

下面演示一下如何使用:

–工具源码

CREATE OR REPLACE PROCEDURE show_space(p_segname IN VARCHAR2,

p_owner IN VARCHAR2 DEFAULT USER,

p_type IN VARCHAR2 DEFAULT ‘TABLE‘,

p_partition IN VARCHAR2 DEFAULT NULL) 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;

l_segment_space_mgmt VARCHAR2(255);

l_unformatted_blocks NUMBER;

l_unformatted_bytes NUMBER;

l_fs1_blocks NUMBER;

l_fs1_bytes NUMBER;

l_fs2_blocks NUMBER;

l_fs2_bytes NUMBER;

l_fs3_blocks NUMBER;

l_fs3_bytes NUMBER;

l_fs4_blocks NUMBER;

l_fs4_bytes NUMBER;

l_full_blocks NUMBER;

l_full_bytes NUMBER;

PROCEDURE p(p_label IN VARCHAR2,

p_num IN NUMBER) IS

BEGIN

dbms_output.put_line(rpad(p_label, 40, ‘.‘) ||

to_char(p_num, ‘999,999,999,999‘));

END;

BEGIN

EXECUTE IMMEDIATE ‘select ts.segment_space_management from dba_segments seg,dba_tablespaces ts where seg.segment_name = :p_segname and (:p_partition is null or seg.partition_name = :p_partition) and seg.owner = :p_owner and seg.tablespace_name=ts.tablespace_name‘

INTO l_segment_space_mgmt

USING p_segname, p_partition, p_partition, p_owner;

-- exception

-- when too_many_rows

-- then

-- dbms_output.put_line(‘This must be a partitioned table,use p_partition => ‘);

-- return;

-- end;

IF l_segment_space_mgmt = ‘AUTO‘ THEN

dbms_space.space_usage(p_owner, p_segname, p_type, l_unformatted_blocks,

l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes,

l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes,

l_fs4_blocks, l_fs4_bytes, l_full_blocks,

l_full_bytes, p_partition);

p(‘Unformatted Blocks ‘, l_unformatted_blocks);

p(‘FS1 Blocks (0-25) ‘, l_fs1_blocks);

p(‘FS2 Blocks (25-50) ‘, l_fs2_blocks);

p(‘FS3 Blocks (50-75) ‘, l_fs3_blocks);

p(‘FS4 Blocks (75-100) ‘, l_fs4_blocks);

p(‘Full Blocks ‘, l_full_blocks);

ELSE

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);

END IF;

dbms_space.unused_space(segment_owner => p_owner, segment_name => p_segname,

segment_type => p_type, partition_name => p_partition,

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(‘Total Blocks ‘, l_total_blocks);

p(‘Total Bytes ‘, l_total_bytes);

p(‘Total MBytes ‘, trunc(l_total_bytes / 1024 / 1024));

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;

–用法演示

create table test_space

AS

select * from dba_tables;

/

SYS@orcl> exec show_space(‘TEST_SPACE‘);

Total Blocks ……………………… 112

Total Bytes ……………………… 917,504

Total MBytes ……………………… 0

Unused Blocks……………………… 3

Unused Bytes ……………………… 24,576

Last Used Ext FileId……………….. 1

Last Used Ext BlockId………………. 115,608

Last Used Block……………………. 5

PL/SQL 过程已成功完成。

SYS@orcl> delete from test_space;

已删除3044行。

SYS@orcl> commit;

提交完成。

SYS@orcl> exec show_space(‘TEST_SPACE‘);

Total Blocks ……………………… 112

Total Bytes ……………………… 917,504

Total MBytes ……………………… 0

Unused Blocks……………………… 3

Unused Bytes ……………………… 24,576

Last Used Ext FileId……………….. 1

Last Used Ext BlockId………………. 115,608

Last Used Block……………………. 5

PL/SQL 过程已成功完成。

SYS@orcl> truncate table test_space;

表被截断。

[email protected]> exec show_space(‘TEST_SPACE’);

Total Blocks ……………………… 8

Total Bytes ……………………… 65,536

Total MBytes ……………………… 0

Unused Blocks……………………… 7

Unused Bytes ……………………… 57,344

Last Used Ext FileId……………….. 1

Last Used Ext BlockId………………. 101,872

Last Used Block……………………. 1

PL/SQL 过程已成功完成。

drop table test_space;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值