--查找表中数据的使用情况
declare
l_total_blocks number;
l_total_bytes number;
l_unused_blocks number;
l_unused_bytes number;
l_lastUsedExtFileId number;
l_lastUsedExtBlockId number;
l_lastUsedBlock number;
l_data_blocks number;
begin
dbms_space.unused_space('ZAKI',
'ZAKI',
'TABLE',
l_total_blocks,
l_total_bytes,
l_unused_blocks,
l_unused_bytes,
l_lastUsedExtFileId,
l_lastUsedExtBlockId,
l_lastUsedBlock);
select count(distinct dbms_rowid.rowid_block_number(rowid))
into l_data_blocks
from ZAKI; --使用的数据块个数
dbms_output.put_line('Total blocks: ' || l_total_blocks);
dbms_output.put_line('Unused blocks: ' || l_unused_blocks);
dbms_output.put_line('Used blocks: ' ||
(l_total_blocks - l_unused_blocks));
dbms_output.put_line('Data blocks: ' || l_data_blocks);
end;
一个segment的第一个区的第一个块是FIRST LEVEL BITMAP BLOCK,第二个块是SECOND LEVEL BITMAP BLOCK,这两个块是用来管理free block的,第三个块是PAGETABLE SEGMENT HEADER,这个块才是segment里的HEADER_BLOCK,再后面的块就是用来记录数据的。这就是一个新建表分配的一个区8个块有三个被使用5个未被使用。
各函数用法参见:http://psoug.org/reference/dbms_space.html