DBMS_SPACE查找使用和未使用的空间

来源:互联网 发布:淘宝卖家怎么贷款 编辑:程序博客网 时间:2024/06/04 20:09
找出剩余空间
DBA_FREE_SPACE字典视图可以查找表空间和数据文件中的可用空间信息,空间信息不包括数据库对象。
DBMS_SPACE程序包可以解决如下问题:
1.在一个新区进入前有多少可以使用的可用空间。
2.有多少数据块在高水位标记(HWM)之上。
DBA_EXTENTS和DBA_SEGMENTS字典视图可以提供关于分配给对象(如表和索引)的尺寸的大量信息,但是这些视图并不能得知已用空间使用率和可用空间使用率是多少。如果对表进行过分析,BLOCKS列将提供HWM-即表曾经达到的最高点。但是如果正在对表进行大量的DML操作,则HWM并不能准确指示表所使用的实际空间。DBMS_SPACE程序包是查找对象中已用空间和可用空间的理想工具。
DBMS_SPACE程序包有3个主要过程。UNUSED_SPACE过程提供一个对象段中的未用空间信息,FREE_BLOCKS过程提供一个段中可用块的数量信息,而SPACE_USAGE过程给出了块中空间使用的细节。


DECLARE
  V_TOTAL_BLOCKS              NUMBER;
  V_TOTAL_BYTES               NUMBER;
  V_UNUSED_BLOCKS             NUMBER;
  V_UNUSED_BYTES              NUMBER;
  V_LAST_USED_EXTENT_FILE_ID  NUMBER;
  V_LAST_USED_EXTENT_BLOCK_ID NUMBER;
  V_LAST_USED_BLOCK           NUMBER;
BEGIN
  DBMS_SPACE.UNUSED_SPACE(
                          
                          SEGMENT_OWNER             => 'SCOTT',
                          SEGMENT_NAME              => 'EMP',
                          SEGMENT_TYPE              => 'TABLE',
                          TOTAL_BLOCKS              => V_TOTAL_BLOCKS,
                          TOTAL_BYTES               => V_TOTAL_BYTES,
                          UNUSED_BLOCKS             => V_UNUSED_BLOCKS,
                          UNUSED_BYTES              => V_UNUSED_BYTES,
                          LAST_USED_EXTENT_FILE_ID  => V_LAST_USED_EXTENT_FILE_ID,
                          LAST_USED_EXTENT_BLOCK_ID => V_LAST_USED_EXTENT_BLOCK_ID,
                          LAST_USED_BLOCK           => V_LAST_USED_BLOCK);
  DBMS_OUTPUT.PUT_LINE('Number of Total Blocks :' || V_TOTAL_BLOCKS);
  DBMS_OUTPUT.PUT_LINE('Number of Bytes :' || V_TOTAL_BYTES);
  DBMS_OUTPUT.PUT_LINE('Number of Unused Blocks :' || V_UNUSED_BLOCKS);
  DBMS_OUTPUT.PUT_LINE('Number of UnUsed Bytes :' || V_UNUSED_BYTES);


END;




SQL> set serveroutput on;
SQL> 
SQL> DECLARE
  2    V_TOTAL_BLOCKS              NUMBER;
  3    V_TOTAL_BYTES               NUMBER;
  4    V_UNUSED_BLOCKS             NUMBER;
  5    V_UNUSED_BYTES              NUMBER;
  6    V_LAST_USED_EXTENT_FILE_ID  NUMBER;
  7    V_LAST_USED_EXTENT_BLOCK_ID NUMBER;
  8    V_LAST_USED_BLOCK           NUMBER;
  9  BEGIN
 10    DBMS_SPACE.UNUSED_SPACE(
 11  
 12                            SEGMENT_OWNER             => 'SCOTT',
 13                            SEGMENT_NAME              => 'EMP',
 14                            SEGMENT_TYPE              => 'TABLE',
 15                            TOTAL_BLOCKS              => V_TOTAL_BLOCKS,
 16                            TOTAL_BYTES               => V_TOTAL_BYTES,
 17                            UNUSED_BLOCKS             => V_UNUSED_BLOCKS,
 18                            UNUSED_BYTES              => V_UNUSED_BYTES,
 19                            LAST_USED_EXTENT_FILE_ID  => V_LAST_USED_EXTENT_FILE_ID,
 20                            LAST_USED_EXTENT_BLOCK_ID => V_LAST_USED_EXTENT_BLOCK_ID,
 21                            LAST_USED_BLOCK           => V_LAST_USED_BLOCK);
 22    DBMS_OUTPUT.PUT_LINE('Number of Total Blocks :' || V_TOTAL_BLOCKS);
 23    DBMS_OUTPUT.PUT_LINE('Number of Bytes :' || V_TOTAL_BYTES);
 24    DBMS_OUTPUT.PUT_LINE('Number of Unused Blocks :' || V_UNUSED_BLOCKS);
 25    DBMS_OUTPUT.PUT_LINE('Number of Used Bytes :' || V_UNUSED_BYTES);
 26  
 27  END;
 28  /
 
Number of Total Blocks :8
Number of Bytes :65536
Number of Unused Blocks :0
Number of Used Bytes :0
 
PL/SQL procedure successfully completed





原创粉丝点击