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;

表被截断。

[email protected]> 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;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 05:04:14

Oracle查看对象空间使用情况show_space的相关文章

Oracle查看表空间使用情况

 查看表空间使用情况 select upper(f.tablespace_name) "表空间名", d.tot_grootte_mb "表空间大小(m)", d.tot_grootte_mb - f.total_bytes "已使用空间(m)", to_char(round((d.tot_grootte_mb - f.total_bytes) / d.tot_grootte_mb * 100, 2), '990.99') "使用比

oracle 查看表空间使用情况

查看表空间剩余: select tablespace_name,sum(bytes)/1024/1024||'M' from dba_free_space group by tablespace_name 查看表空间总大小.使用大小.剩余大小,使用率.剩余率 select a.tablespace_name,a.bytes/1024/1024||'M' total,b.bytes/1024/1024||'M' used,c.bytes/1024/1024||'M' free ,trunc(b.b

zbb20170816 oracle Oracle 查看表空间、数据文件的大小及使用情况sql语句

oracle Oracle 查看表空间.数据文件的大小及使用情况sql语句 --表空间 --1G=1024MB --1M=1024KB --1K=1024Bytes --1M=11048576Bytes --1G=1024*11048576Bytes=11313741824Bytes SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) &qu

Linux:查看磁盘空间占用情况

Linux:查看磁盘空间占用情况 工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况.排查过程如下: 一.首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满. 二.进入根目录,因为最近常用的目录就是usr目录,所以用du -bs命令看一下常用的usr目录大小,由下图可见/usr目录占据了11g. 三.进入usr目录用find 命令找到大文件 然后把日志,压缩包什么的都清空: 原文地址:https://www.cnblogs.com/lizm166/p/

Oracle 查看表空间的大小及使用情况sql语句

SQL1: --1.查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name; --2.查看表空间物理文件的名称及大小 SELECT tablespace_name,

Oracle 查看 对象 持有 锁 的情况

同事在测试库上对一个表加字段,提示 ORA-00054, 资源忙. 应该是表对象的锁没有释放. 有关Oracle 锁的说明,参考: ORACLE锁机制 http://blog.csdn.net/tianlesoftware/article/details/4696896 用如下SQL 查看一下系统中相关对象上锁的情况: [sql] view plain copy <pre name="code" class="sql">/* Formatted on 2

Oracle 查看表空间大小及其扩展

在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成.系统中默认创建的几个表空间:SYSTEM,SYSAUX,USERS,UNDOTBS1,EXAMPLE,TEMP还有用户自己建立的表空间,可以对其进行分成三类 永久表空间                存放永久性数据,如表,索引等. 临时表空间                不能存放永久性对象,用于保存数据库排序,分组时产生的临时

oracle查看对象信息

1.查看某用户下所有对象的信息: SELECT owner, object_type, status, COUNT(*) count# FROM all_objects where owner='xxx' GROUP BY owner, object_type, status order by 2; 2.查看表行数(多个表)(需先分析表): 1 select 'analyze table '|| table_name||' compute statistics;' from user_table

oracle 查看表空间以及日志文件等系统文件

--1.查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name; --2.查看表空间物理文件的名称及大小  SELECT tablespace_name, file_