找出剩余空间
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
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