Oracle的show_space存储过程


Tom大师写的show_space的其中一个版本. 常用于存储空间的分析.

  1. create or replace procedure show_space(p_segname   in varchar2,  
  2.                                        p_owner     in varchar2 default user,  
  3.                                        p_type      in varchar2 default 'TABLE',  
  4.                                        p_partition in varchar2 default nullas  
  5.   l_free_blks          number;  
  6.   l_total_blocks       number;  
  7.   l_total_bytes        number;  
  8.   l_unused_blocks      number;  
  9.   l_unused_bytes       number;  
  10.   l_lastusedextfileid  number;  
  11.   l_lastusedextblockid number;  
  12.   l_last_used_block    number;  
  13.   l_segment_space_mgmt varchar2(255);  
  14.   l_unformatted_blocks number;  
  15.   l_unformatted_bytes  number;  
  16.   l_fs1_blocks         number;  
  17.   l_fs1_bytes          number;  
  18.   l_fs2_blocks         number;  
  19.   l_fs2_bytes          number;  
  20.   l_fs3_blocks         number;  
  21.   l_fs3_bytes          number;  
  22.   l_fs4_blocks         number;  
  23.   l_fs4_bytes          number;  
  24.   l_full_blocks        number;  
  25.   l_full_bytes         number;  
  26.   
  27.   procedure p(p_label in varchar2, p_num in number) is  
  28.   begin  
  29.     dbms_output.put_line(rpad(p_label, 40, '.') ||  
  30.                          to_char(p_num, '999,999,999,999'));  
  31.   end;  
  32. begin  
  33.   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'  
  34.     into l_segment_space_mgmt  
  35.     using p_segname, p_partition, p_partition, p_owner;  
  36.   
  37.   --     exception   
  38.   --             when too_many_rows   
  39.   --             then   
  40.   --             dbms_output.put_line('This must be a partitioned table,use p_partition => ');   
  41.   --             return;   
  42.   --     end;   
  43.   
  44.   l_segment_space_mgmt := 'AUTO';  
  45.   
  46.   if l_segment_space_mgmt = 'AUTO' then  
  47.     dbms_space.space_usage(p_owner,  
  48.                            p_segname,  
  49.                            p_type,  
  50.                            l_unformatted_blocks,  
  51.                            l_unformatted_bytes,  
  52.                            l_fs1_blocks,  
  53.                            l_fs1_bytes,  
  54.                            l_fs2_blocks,  
  55.                            l_fs2_bytes,  
  56.                            l_fs3_blocks,  
  57.                            l_fs3_bytes,  
  58.                            l_fs4_blocks,  
  59.                            l_fs4_bytes,  
  60.                            l_full_blocks,  
  61.                            l_full_bytes,  
  62.                            p_partition);  
  63.     
  64.     p('Unformatted Blocks  ', l_unformatted_blocks);  
  65.     p('FS1 Blocks (0-25)   ', l_fs1_blocks);  
  66.     p('FS2 Blocks (25-50)  ', l_fs2_blocks);  
  67.     p('FS3 Blocks (50-75)  ', l_fs3_blocks);  
  68.     p('FS4 Blocks (75-100) ', l_fs4_blocks);  
  69.     p('Full Blocks         ', l_full_blocks);  
  70.   else  
  71.     dbms_space.free_blocks(segment_owner     => p_owner,  
  72.                            segment_name      => p_segname,  
  73.                            segment_type      => p_type,  
  74.                            freelist_group_id => 0,  
  75.                            free_blks         => l_free_blks);  
  76.   end if;  
  77.   
  78.   dbms_space.unused_space(segment_owner             => p_owner,  
  79.                           segment_name              => p_segname,  
  80.                           segment_type              => p_type,  
  81.                           partition_name            => p_partition,  
  82.                           total_blocks              => l_total_blocks,  
  83.                           total_bytes               => l_total_bytes,  
  84.                           unused_blocks             => l_unused_blocks,  
  85.                           unused_bytes              => l_unused_bytes,  
  86.                           last_used_extent_file_id  => l_lastusedextfileid,  
  87.                           last_used_extent_block_id => l_lastusedextblockid,  
  88.                           last_used_block           => l_last_used_block);  
  89.   
  90.   p('Total Blocks ', l_total_blocks);  
  91.   p('Total Bytes  ', l_total_bytes);  
  92.   p('Total MBytes ', trunc(l_total_bytes / 1024 / 1024));  
  93.   p('Unused Blocks', l_unused_blocks);  
  94.   p('Unused Bytes ', l_unused_bytes);  
  95.   p('Last Used Ext FileId', l_lastusedextfileid);  
  96.   p('Last Used Ext BlockId', l_lastusedextblockid);  
  97.   p('Last Used Block', l_last_used_block);  
  98. end;  

相关内容