iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >show_space改良版,增加表分区索引分区自动识别
  • 372
分享到

show_space改良版,增加表分区索引分区自动识别

2024-04-02 19:04:59 372人浏览 泡泡鱼
摘要

new_show_space.sql.zip REM REM   based on previous show_space scri

show_space改良版,增加表分区索引分区自动识别 new_show_space.sql.zip

REM
REM   based on previous show_space script, now it can 
REM   identify all partition_name for table or index-
REM   automatically without specifying partition_name.
REM
REM   Usage:
REM      exec show_space('TABLE','OWNER','TABLE_NAME');
REM      or
REM      exec show_space('TABLE PARTITION','TEST','P_TAB','PART1');
REM
REM      exec show_space('INDEX','TEST','IDX_TAB');
REM      or
REM      exec show_space('INDEX PARTITION','TEST','IDX_TAB','IDX_PART1');
REM
REM   Edited by mx at 2020/03/27
REM   
-- based on previous procedure show_space from Internet.
set serveroutput on
CREATE 
  OR REPLACE PROCEDURE show_space (
    v_segment_type IN VARCHAR2 DEFAULT 'TABLE',
    v_segment_owner IN VARCHAR2 DEFAULT USER,
    v_segment_name IN VARCHAR2,
    v_partition_name IN VARCHAR2 DEFAULT NULL,
    v_space IN VARCHAR2 DEFAULT 'AUTO',
    v_analyzed IN VARCHAR2 DEFAULT 'Y' 
  ) AS 
p_segment_type VARCHAR2 ( 30 );
p_segment_owner VARCHAR2 ( 30 );
p_segment_name VARCHAR2 ( 50 );
p_partition_name VARCHAR2 ( 30 );
p_partitioned VARCHAR2 ( 5 );
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 print ( p_label IN VARCHAR2, p_num IN NUMBER ) IS BEGIN
  dbms_output.put_line ( rpad( p_label, 40, '.' ) || p_num );
  
END;
PROCEDURE analyze_space (
  f_segment_type IN VARCHAR2,
  f_segment_owner IN VARCHAR2,
  f_segment_name IN VARCHAR2,
  f_partition_name IN VARCHAR2 
  ) IS BEGIN
  dbms_space.unused_space (
    segment_owner => f_segment_owner,
    segment_name => f_segment_name,
    segment_type => f_segment_type,
    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,
    partition_name => f_partition_name 
  );
  IF
    v_space = 'MANUAL' 
    OR ( v_space <> 'auto' AND v_space <> 'AUTO' ) THEN
      dbms_space.free_blocks (
        segment_owner => f_segment_owner,
        segment_name => f_segment_name,
        segment_type => f_segment_type,
        freelist_group_id => 0,
        free_blks => l_free_blks,
        partition_name => f_partition_name 
      );
    print ( 'Free Blocks', l_free_blks );
    
  END IF;
  IF
    ( f_partition_name IS NULL ) THEN
      dbms_output.put_line (
        '--' || rpad( f_segment_owner || '.' || f_segment_name, 45, '-' ) 
      );
    ELSE dbms_output.put_line (
      '--' || rpad(
        f_segment_owner || '.' || f_segment_name || '.' || f_partition_name,
        45,
        '-' 
      ) 
    );
    
  END IF;
  print ( 'Total Blocks', l_total_blocks );
  print ( 'Total Bytes', l_total_bytes );
  print ( 'Unused Blocks', l_unused_blocks );
  print ( 'Unused Bytes', l_unused_bytes );
  print ( 'Last Used Ext FileId', l_LastUsedExtFileId );
  print ( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
  print ( 'Last Used Block', l_LAST_USED_BLOCK );

  IF
    v_analyzed = 'Y' THEN
      dbms_space.space_usage (
        segment_owner => f_segment_owner,
        segment_name => f_segment_name,
        segment_type => f_segment_type,
        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,
        partition_name => f_partition_name 
      );
    dbms_output.put_line ( 'The segment is analyzed.' );
    print ( '0% -- 25% free space blocks', l_fs1_blocks );
    print ( '0% -- 25% free space bytes', l_fs1_bytes );
    print ( '25% -- 50% free space blocks', l_fs2_blocks );
    print ( '25% -- 50% free space bytes', l_fs2_bytes );
    print ( '50% -- 75% free space blocks', l_fs3_blocks );
    print ( '50% -- 75% free space bytes', l_fs3_bytes );
    print ( '75% -- 100% free space blocks', l_fs4_blocks );
    print ( '75% -- 100% free space bytes', l_fs4_bytes );
    print ( 'Unused Blocks', l_unformatted_blocks );
    print ( 'Unused Bytes', l_unformatted_bytes );
    print ( 'Total Blocks', l_full_blocks );
    print ( 'Total bytes', l_full_bytes );
    dbms_output.put_line ( rpad( ' ', 48, '-' ) );
    
  END IF;
  
END;
BEGIN
  p_segment_name := upper( v_segment_name );
  p_segment_owner := upper( v_segment_owner );
  p_segment_type := upper( v_segment_type );
  p_partition_name := upper( v_partition_name );
IF
  ( v_segment_type = 'i' OR v_segment_type = 'I' ) THEN
    p_segment_type := 'INDEX';
    
  END IF;
  IF
    ( v_segment_type = 't' OR v_segment_type = 'T' ) THEN
      p_segment_type := 'TABLE';
    
  END IF;
  IF
    ( v_segment_type = 'c' OR v_segment_type = 'C' ) THEN
      p_segment_type := 'CLUSTER';
    
  END IF;
  SELECT
    partitioned INTO p_partitioned 
  FROM
    (
    SELECT
      partitioned 
    FROM
      all_tables 
    WHERE
      owner = p_segment_owner 
      AND table_name = p_segment_name UNION
    SELECT
      partitioned 
    FROM
      all_indexes 
    WHERE
      owner = p_segment_owner 
      AND index_name = p_segment_name 
    );
  IF
    ( p_segment_type = 'TABLE' AND p_partitioned = 'YES' ) THEN
      p_segment_type := 'TABLE PARTITION';
    FOR t IN (
      SELECT
        partition_name 
      FROM
        all_tab_partitions 
      WHERE
        table_owner = p_segment_owner 
        AND table_name = p_segment_name 
      ORDER BY
        to_number( regexp_substr( partition_name, '[0-9]*[0-9]', 1 ) ) 
      )
      loop
      analyze_space ( p_segment_type, p_segment_owner, p_segment_name, t.partition_name );
    
  END loop;
ELSIF ( p_segment_type = 'INDEX' AND p_partitioned = 'YES' ) THEN
  p_segment_type := 'INDEX PARTITION';
  FOR i IN (
    SELECT
      partition_name 
    FROM
      all_tab_partitions 
    WHERE
      table_owner = p_segment_owner 
      AND table_name = p_segment_name 
    ORDER BY
      to_number( regexp_substr( partition_name, '[0-9]*[0-9]', 1 ) ) 
    )
    loop
    analyze_space ( p_segment_type, p_segment_owner, p_segment_name, i.partition_name );
  
END loop;
ELSE analyze_space ( p_segment_type, p_segment_owner, p_segment_name, p_partition_name );
END IF;
EXCEPTION
  WHEN others THEN
  dbms_output.put_line('Usage:');
  dbms_output.put_line('- exec show_space(''table'',''owner'',''table_name'');');
  dbms_output.put_line('- exec show_space(''table partition'',''owner'',''table_name'',''partition_name'');');
  dbms_output.put_line('- exec show_space(''index'',''owner'',''index_name'');');
  dbms_output.put_line('- exec show_space(''index partition'',''owner'',''index_name'',''partition_name'');');
END;
/
您可能感兴趣的文档:

--结束END--

本文标题: show_space改良版,增加表分区索引分区自动识别

本文链接: https://www.lsjlt.com/news/46466.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql怎么自动增加分区
    本篇内容介绍了“mysql怎么自动增加分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#!/bin/ba...
    99+
    2024-04-02
  • 怎么理解数据库移动分区表和分区索引的表空间
    这篇文章主要介绍“怎么理解数据库移动分区表和分区索引的表空间”,在日常操作中,相信很多人在怎么理解数据库移动分区表和分区索引的表空间问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • oracle 12c中自增分区表 自动调整缓存分区的存储过程
        最近为了使用12c的强大的inmemory功能,新做了一个OGG从11gR2 RAC到12c的数据同步,分担主库的olap业务   &nb...
    99+
    2024-04-02
  • oracle分区表全局唯一索引失效导致无法增删改怎么办
    这篇文章主要为大家展示了“oracle分区表全局唯一索引失效导致无法增删改怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle分区表全局唯一索引失效...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作