显示段的空间使用的SHOW_SPACE 高水位HWM

CREATE OR REPLACE PROCEDURE show_space
(                                       
 p_segname_1 IN VARCHAR2,                                       
 p_type_1 IN VARCHAR2 DEFAULT 'TABLE', --t = TABLE; tp=TABLE PARTITION; tsp=TABLE SUBPARTITION                                       
 p_space IN VARCHAR2 DEFAULT 'AUTO', --manual; auto                                       
 p_analyzed IN VARCHAR2 DEFAULT 'Y', --  y  n                                       
 p_partition_1 IN VARCHAR2 DEFAULT NULL, --partition name                                       
 p_owner_1 IN VARCHAR2 DEFAULT USER -- users

                                       )

-- command ;sqlplus  

-- set serveroutput on

  -- exec show_space('SHARK_TRADERECORD','T','AUTO','Y',NULL);  表
  -- exec show_space('SHARK_TRADERECORD_HISTORY','TP','AUTO','Y','SYS_P30','SHARK');     分区表
  -- exec show_space('SHARK_TRADERECORD_PARTITION','TABLE SUBPARTITION','AUTO','Y','SYS_SUBP1442');      子分区表

AUTHID CURRENT_USER
 AS
  p_segname VARCHAR2(100);
  p_type VARCHAR2(30);
  p_owner VARCHAR2(30);
  p_partition VARCHAR2(50);
  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;
  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

  p_segname := UPPER(p_segname_1);
  p_owner := UPPER(p_owner_1);
  p_type := p_type_1;
  p_partition := UPPER(p_partition_1);

  IF (p_type_1 = 't' OR p_type_1 = 'T')   THEN
    p_type := 'TABLE';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'tp' OR p_type_1 = 'TP')   THEN
    p_type := 'TABLE PARTITION';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'tsp' or p_type_1 = 'TSP') THEN
    p_type := 'TABLE SUBPARTITION';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'i' OR p_type_1 = 'I')   THEN
    p_type := 'INDEX';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'ip' OR p_type_1 = 'IP')   THEN
    p_type := 'INDEX PARTITION';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'isp' OR p_type_1 = 'ISP')   THEN
    p_type := 'INDEX SUBPARTITION';
    GOTO exec;
  END IF;

  IF (p_type_1 = 'c' OR p_type_1 = 'C')   THEN
    p_type := 'CLUSTER';
    GOTO exec;
  END IF;

  <<exec>>

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

  IF p_space = 'MANUAL' OR (p_space <> 'auto' AND p_space <> 'AUTO')   THEN  
    DBMS_SPACE.FREE_BLOCKS(segment_owner => p_owner,                           
                           segment_name => p_segname,                           
                           segment_type => p_type,                           
                           partition_name => p_partition,                           
                           freelist_group_id => 0,                           
                           free_blks => l_free_blks
                           );
 
    p('Free Blocks', l_free_blks);  
  END IF;

  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);
  p('HWM AT BlockID', l_LastUsedExtFileId + l_LAST_USED_BLOCK - 1);
  p('HWM AT BlockS', l_total_blocks - l_unused_blocks);

  /*IF the segment is analyzed */

  IF p_analyzed = 'Y'   THEN  
    DBMS_SPACE.SPACE_USAGE(segment_owner => p_owner,                           
                           segment_name => p_segname,                           
                           segment_type => p_type,                           
                           partition_name => p_partition,                           
                           unformatted_blocks => l_unformatted_blocks,                           
                           unformatted_bytes => l_unformatted_bytes,                           
                           fs1_blocks => l_fs1_blocks,                           
                           fs1_bytes => l_fs1_bytes,                           
                           fs2_blocks => l_fs2_blocks,                           
                           fs2_bytes => l_fs2_bytes,                           
                           fs3_blocks => l_fs3_blocks,                           
                           fs3_bytes => l_fs3_bytes,                           
                           fs4_blocks => l_fs4_blocks,                           
                           fs4_bytes => l_fs4_bytes,                           
                           full_blocks => l_full_blocks,                           
                           full_bytes => l_full_bytes);
 
    DBMS_OUTPUT.put_line(RPAD('', 50, '*'));  
    DBMS_OUTPUT.put_line('Thesegment is analyzed');
 
    p('0% -- 25% free spaceblocks', l_fs1_blocks);  
    p('0% -- 25% free spacebytes', l_fs1_bytes);  
    p('25% -- 50% free spaceblocks', l_fs2_blocks);  
    p('25% -- 50% free spacebytes', l_fs2_bytes);  
    p('50% -- 75% free spaceblocks', l_fs3_blocks);  
    p('50% -- 75% free spacebytes', l_fs3_bytes);  
    p('75% -- 100% free spaceblocks', l_fs4_blocks);  
    p('75% -- 100% free spacebytes', l_fs4_bytes);  
    p('Unused Blocks', l_unformatted_blocks);  
    p('Unused Bytes', l_unformatted_bytes);  
    p('Total Blocks', l_full_blocks);  
    p('Total bytes', l_full_bytes);
 
  END IF;

END;


Total Blocks............................6400
Total Bytes.............................52428800
Unused Blocks...........................0
Unused Bytes............................0
Last Used Ext FileId....................5
Last Used Ext BlockId...................412800
Last Used Block.........................128
HWM AT BlockID..........................132
HWM AT BlockS...........................6400

Thesegment is analyzed
0% -- 25% free spaceblocks..............1
0% -- 25% free spacebytes...............8192
25% -- 50% free spaceblocks.............0
25% -- 50% free spacebytes..............0
50% -- 75% free spaceblocks.............1
50% -- 75% free spacebytes..............8192
75% -- 100% free spaceblocks............39
75% -- 100% free spacebytes.............319488
Unused Blocks...........................0
Unused Bytes............................0
Total Blocks............................6251
Total bytes.............................51208192
PL/SQL procedure successfully completed

你可能感兴趣的:(显示段的空间使用的SHOW_SPACE 高水位HWM)