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

2014-11-24 14:40:32 · 作者: · 浏览: 0
显示段的空间使用的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;

  <
> 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 A