Oracle如何查看对象空间使用情况

69次阅读
没有评论

共计 3988 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章主要为大家展示了“Oracle 如何查看对象空间使用情况”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“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;12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

–用法演示

create table test_spaceASselect * from dba_tables;/1234
SYS@orcl  exec show_space(TEST_SPACE 1

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

已删除 3044 行。

SYS@orcl  commit;1

提交完成。

SYS@orcl  exec show_space(TEST_SPACE 1

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

表被截断。

SYS@orcl 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;

以上是“Oracle 如何查看对象空间使用情况”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3988字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)