• Oracle查看对象空间使用情况show_space


    tom大神写了一个用于查看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;

    –使用方法演示

    create table test_space
    AS
    select * from dba_tables;
    /
    SYS@orcl> exec show_space('TEST_SPACE');

    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;

    已删除3044行。

    SYS@orcl> commit;

    提交完毕。

    SYS@orcl> exec show_space('TEST_SPACE');

    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;

    表被截断。

    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;
  • 相关阅读:
    HTML、CSS、JS 复习——序
    HTML + CSS短标题(二,三,四文字长度)两端对齐的方式
    Supper关键字
    java的重写
    java重载
    Java继承
    JAVA访问权限控制
    (转)java类初始化顺序
    Java 数组和集合
    Java 方法签名
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7203850.html
Copyright © 2020-2023  润新知