ORACLE表空间管理(摘抄部分文章)

ORACLE表空间管理

第一章     ORACLE 区管理

ORACLE管理有两种方式:本地管理和字典管理。

字典管理:通过数据字典管理表空间的空间使用。

本地管理:本地管理不再利用数据字典来记录表空间里面区的使用情况,而是在每个表空间的数据文件的头部加入一个位图区,在其中记录每个区的使用情况。每当一个区被使用,或者被释放以供重新使用的时候,ORACLE都会更新数据文件头的这个记录。反映这个变化。

1.1            本地管理的优点

本地管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间中经常出现,当表空间的区的使用情况发生变化时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。

本地管理的表空间避免了在数据字典相应表里面写入空闲空间,已使用空间的信息,从而较少了数据字典表的竞争,提供了空间管理的并发性。

区的本地管理自动跟踪表空间里的空闲块,较少了手工合并自动空间的需要。

表空间里的区大小可以由ORACLE系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。

从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不在使用系统表空间的回滚段。因为有数据字典来管理的话,他会把相关的信息记录在数据字典的表里,从而产生回滚信息。

1.2            本地管理表空间管理机制

表空间是一种为段(表、索引等)提供空间的逻辑结构,所以在表空间中增加,删除段的时候,数据库就必须跟踪这些空间的使用。以下面的例子为例:

假如一个新创建的表空间包含了五个表

1……2……3……4……5……未用空间

当我们删除表4的时候,就有如下结果

1……2……3……空闲空间段……5……未用空间

很显然,ORACLE需要一个机制来管理表空间中各数据文件的这些分配或未分配的空间,为了跟踪这些可以使用的空间(包括未分配使用的和可以重复使用的),对于每一个空间,我们必须知道:

q  这个可用空间位于哪个数据文件

q  这个空间的尺寸有多大

q  如果它在用了,是哪个段占用了这个空间

直到8i之前,所有的表空间都是采用字典管理模式,为了确保能保存以上的信息,ORACLE使用了两个数据字典:UET$(已使用的区间)或FET$(空闲空间)。

SQL> desc UET$

 Name                    Null?    Type

 ----------------------- -------- ----------------

 SEGFILE#                NOT NULL NUMBER

 SEGBLOCK#               NOT NULL NUMBER

 EXT#                    NOT NULL NUMBER

 TS#                     NOT NULL NUMBER

 FILE#                   NOT NULL NUMBER

 BLOCK#                  NOT NULL NUMBER

 LENGTH                  NOT NULL NUMBER

 

SQL> desc FET$

 Name                    Null?    Type

 ----------------------- -------- ----------------

 TS#                     NOT NULL NUMBER

 FILE#                   NOT NULL NUMBER

 BLOCK#                  NOT NULL NUMBER

 LENGTH                  NOT NULL NUMBER

查询该表可以看到,每个使用空间或者空闲空间都在该表中对应一行。它的工作方式是当一个段被删除的时候,ORACLE就移动UET$中相应的行到FET$,这个过程的发生时连续的,而且可能发生等待。当并发性很高的时候,数据字典的争用就来了。另外有一个问题就是,当表的空间很不连续或者表空间里有大量的碎片引起这两个表的增大,那么也会引起数据库性能的下降。

本地表空间管理正是为了解决这一问题来的,在表空间的管理上,ORACLE将存储信息保存在表空间的头部的位图中,而不是保存在数据字典中。通过这样的方式,再分配回收空间的时候,表空间就可以独立的完成操作而不用与其他对象关系。

由于11G的所有表空间默认都是通过本地管理区的。所以FET$表和UET$表的记录为空。

SQL> SELECT  TABLESPACE_NAME,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT FROM dba_tablespaces;

TABLESPACE_NAME EXTENT_MANAGEMENT              SEGMENT_SPACE_MANA

--------------- ------------------------------ ------------------

SYSTEM          LOCAL                          MANUAL

SYSAUX          LOCAL                          AUTO

UNDOTBS1        LOCAL                          MANUAL

TEMP            LOCAL                          MANUAL

USERS           LOCAL                          AUTO

EXAMPLE         LOCAL                          AUTO

TEST            LOCAL                          AUTO

VPX             LOCAL                          AUTO

T2              LOCAL                          AUTO

TEMP2           LOCAL                          MANUAL

BIGTS           LOCAL                          AUTO

UNDO2           LOCAL                          MANUAL

12 rows selected.

SQL> select * from UET$;

no rows selected

SQL> select * from FET$;

no rows selected

1.3            本地管理表空间实例

通过创建一个表,然后不断INSERT 数据,查看区的分配情况

SQL> CREATE TABLE AUTO_EXTENT AS SELECT * FROM USER_TABLES WHERE 1=2;

 

Table created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM USER_TABLES;

 

964 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

964 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

 

9 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

1928 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

 

17 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

3856 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

 

18 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

7712 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

AUTO_EXTENT            18       1     268928    1048576        128

AUTO_EXTENT            19       1     269056    1048576        128

 

20 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

15424 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

AUTO_EXTENT            18       1     268928    1048576        128

AUTO_EXTENT            19       1     269056    1048576        128

AUTO_EXTENT            20       1     269184    1048576        128

AUTO_EXTENT            21       1     269312    1048576        128

AUTO_EXTENT            22       1     269440    1048576        128

AUTO_EXTENT            23       1     269568    1048576        128

 

24 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

30848 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

AUTO_EXTENT            18       1     268928    1048576        128

AUTO_EXTENT            19       1     269056    1048576        128

AUTO_EXTENT            20       1     269184    1048576        128

AUTO_EXTENT            21       1     269312    1048576        128

AUTO_EXTENT            22       1     269440    1048576        128

AUTO_EXTENT            23       1     269568    1048576        128

AUTO_EXTENT            24       1     269696    1048576        128

AUTO_EXTENT            25       1     269824    1048576        128

AUTO_EXTENT            26       1     269952    1048576        128

AUTO_EXTENT            27       1     270080    1048576        128

AUTO_EXTENT            28       1     270208    1048576        128

AUTO_EXTENT            29       1     270336    1048576        128

AUTO_EXTENT            30       1     270464    1048576        128

AUTO_EXTENT            31       1     270592    1048576        128

 

32 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

61696 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

AUTO_EXTENT            18       1     268928    1048576        128

AUTO_EXTENT            19       1     269056    1048576        128

AUTO_EXTENT            20       1     269184    1048576        128

AUTO_EXTENT            21       1     269312    1048576        128

AUTO_EXTENT            22       1     269440    1048576        128

AUTO_EXTENT            23       1     269568    1048576        128

AUTO_EXTENT            24       1     269696    1048576        128

AUTO_EXTENT            25       1     269824    1048576        128

AUTO_EXTENT            26       1     269952    1048576        128

AUTO_EXTENT            27       1     270080    1048576        128

AUTO_EXTENT            28       1     270208    1048576        128

AUTO_EXTENT            29       1     270336    1048576        128

AUTO_EXTENT            30       1     270464    1048576        128

AUTO_EXTENT            31       1     270592    1048576        128

AUTO_EXTENT            32       1     270720    1048576        128

AUTO_EXTENT            33       1     270848    1048576        128

AUTO_EXTENT            34       1     270976    1048576        128

AUTO_EXTENT            35       1     271104    1048576        128

AUTO_EXTENT            36       1     271232    1048576        128

AUTO_EXTENT            37       1     271360    1048576        128

AUTO_EXTENT            38       1     271488    1048576        128

AUTO_EXTENT            39       1     271616    1048576        128

AUTO_EXTENT            40       1     271744    1048576        128

AUTO_EXTENT            41       1     271872    1048576        128

AUTO_EXTENT            42       1     272000    1048576        128

AUTO_EXTENT            43       1     272128    1048576        128

AUTO_EXTENT            44       1     272256    1048576        128

AUTO_EXTENT            45       1     272384    1048576        128

AUTO_EXTENT            46       1     272512    1048576        128

AUTO_EXTENT            47       1     272640    1048576        128

AUTO_EXTENT            48       1     272768    1048576        128

 

49 rows selected.

 

SQL> INSERT INTO AUTO_EXTENT SELECT * FROM AUTO_EXTENT;

 

123392 rows created.

 

SQL> SELECT SEGMENT_NAME ,EXTENT_ID,FILE_ID,BLOCK_ID,BYTES,BLOCKS FROM DBA_EXTENTS WHERE SEGMENT_NAME='AUTO_EXTENT';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID      BYTES     BLOCKS

--------------- --------- ------- ---------- ---------- ----------

AUTO_EXTENT             0       1     268432      65536          8

AUTO_EXTENT             1       1     268440      65536          8

AUTO_EXTENT             2       1     268448      65536          8

AUTO_EXTENT             3       1     268456      65536          8

AUTO_EXTENT             4       1     268464      65536          8

AUTO_EXTENT             5       1     268472      65536          8

AUTO_EXTENT             6       1     268480      65536          8

AUTO_EXTENT             7       1     268488      65536          8

AUTO_EXTENT             8       1     268496      65536          8

AUTO_EXTENT             9       1     268504      65536          8

AUTO_EXTENT            10       1     268512      65536          8

AUTO_EXTENT            11       1     268520      65536          8

AUTO_EXTENT            12       1     268528      65536          8

AUTO_EXTENT            13       1     268536      65536          8

AUTO_EXTENT            14       1     268544      65536          8

AUTO_EXTENT            15       1     268552      65536          8

AUTO_EXTENT            16       1     268672    1048576        128

AUTO_EXTENT            17       1     268800    1048576        128

AUTO_EXTENT            18       1     268928    1048576        128

AUTO_EXTENT            19       1     269056    1048576        128

AUTO_EXTENT            20       1     269184    1048576        128

AUTO_EXTENT            21       1     269312    1048576        128

AUTO_EXTENT            22       1     269440    1048576        128

AUTO_EXTENT            23       1     269568    1048576        128

AUTO_EXTENT            24       1     269696    1048576        128

AUTO_EXTENT            25       1     269824    1048576        128

AUTO_EXTENT            26       1     269952    1048576        128

AUTO_EXTENT            27       1     270080    1048576        128

AUTO_EXTENT            28       1     270208    1048576        128

AUTO_EXTENT            29       1     270336    1048576        128

AUTO_EXTENT            30       1     270464    1048576        128

AUTO_EXTENT            31       1     270592    1048576        128

AUTO_EXTENT            32       1     270720    1048576        128

AUTO_EXTENT            33       1     270848    1048576        128

AUTO_EXTENT            34       1     270976    1048576        128

AUTO_EXTENT            35       1     271104    1048576        128

AUTO_EXTENT            36       1     271232    1048576        128

AUTO_EXTENT            37       1     271360    1048576        128

AUTO_EXTENT            38       1     271488    1048576        128

AUTO_EXTENT            39       1     271616    1048576        128

AUTO_EXTENT            40       1     271744    1048576        128

AUTO_EXTENT            41       1     271872    1048576        128

AUTO_EXTENT            42       1     272000    1048576        128

AUTO_EXTENT            43       1     272128    1048576        128

AUTO_EXTENT            44       1     272256    1048576        128

AUTO_EXTENT            45       1     272384    1048576        128

AUTO_EXTENT            46       1     272512    1048576        128

AUTO_EXTENT            47       1     272640    1048576        128

AUTO_EXTENT            48       1     272768    1048576        128

AUTO_EXTENT            49       1     272896    1048576        128

AUTO_EXTENT            50       1     273024    1048576        128

AUTO_EXTENT            51       1     273152    1048576        128

AUTO_EXTENT            52       1     273280    1048576        128

AUTO_EXTENT            53       1     273408    1048576        128

AUTO_EXTENT            54       1     273536    1048576        128

AUTO_EXTENT            55       1     273664    1048576        128

AUTO_EXTENT            56       1     273792    1048576        128

AUTO_EXTENT            57       1     273920    1048576        128

AUTO_EXTENT            58       1     274048    1048576        128

AUTO_EXTENT            59       1     274176    1048576        128

AUTO_EXTENT            60       1     274304    1048576        128

AUTO_EXTENT            61       1     274432    1048576        128

AUTO_EXTENT            62       1     274560    1048576        128

AUTO_EXTENT            63       1     274688    1048576        128

AUTO_EXTENT            64       1     274816    1048576        128

AUTO_EXTENT            65       1     274944    1048576        128

AUTO_EXTENT            66       1     275072    1048576        128

AUTO_EXTENT            67       1     275200    1048576        128

AUTO_EXTENT            68       1     275328    1048576        128

AUTO_EXTENT            69       1     275456    1048576        128

AUTO_EXTENT            70       1     275584    1048576        128

AUTO_EXTENT            71       1     275712    1048576        128

AUTO_EXTENT            72       1     275840    1048576        128

AUTO_EXTENT            73       1     275968    1048576        128

AUTO_EXTENT            74       1     276096    1048576        128

AUTO_EXTENT            75       1     276224    1048576        128

AUTO_EXTENT            76       1     276352    1048576        128

AUTO_EXTENT            77       1     276480    1048576        128

AUTO_EXTENT            78       1     276608    1048576        128

AUTO_EXTENT            79       1     276736    8388608       1024

 

80 rows selected.

 

SQL>

从结果上看,当自动分配的时候,第一个区分配了8个块,当数据增加的时候,当分配到1M空间的时候,我们还要求分配新的空间,数据库认为这个表很大,所以就一次性分了128个数据块。如果我们再增加表的大小,数据库会分配多个1M,以后就8M为大小分配,再以后就64M大小分配。总之是一个原则,数据越大,未来分配的区就越大。

第二章     ORACLE段空间管理

ORACLE 9i以前,表的剩余空间的管理和分配时由链接列表FREELIST来完成的。由于FREELIST存在串行的问题,因而容易引起段头的争用。

自动段空间管理(ASSM)使用了位图取代链接列表FREELIST,它是一个二进制的数组,能否迅速有效地管理存储扩展和剩余区块(freeblock)。

2.1 手工段空间管理(MSSM

在手工段管理模式下,主要有两个参数来对空闲的块进行管理,分别是PCTFREEPCTUSED

如果是ASSM的话,则是只有PCTFREEPCTUSED不再生效。


PCTUSED:代表ORACLE试图为每个数据块维持的已用空间最低百分比,如果一个块的已用空间低于PCTUSED,则将该数据库放回到空闲列表中。当高于PCTFREE水位后,再次掉到PCTFREE水位下的时候,并不立即设置为FREE。而必须是掉到PCTUSED水位以下才可以变为FREE。以下图为例


q  FREE状态下开始插入数据,状态为FREE

q  当插入到80%的时候,进入PCTFREE=20的部分,这时候该快在FREELIST里被删除,不允许INSERT

q  当发生DELETE或者UPDATE变小,那么掉到PCTFREEPCTUSED的中间,FREELIST里仍然没有这个快,插入仍然被屏蔽

q  当继续发生DELETE或者UPDATE表笑,掉到PCTUSED以下,FREELIST从新记录该块

2.2 自动段管理(ASSM

自动段使用数据库内位图来管理块的空闲状态,分别用一级位图,二机位图,三级位图来处理。

相比于MSSMASSM具有以下优势

q  更容易管理,不需要认为控制PCTFREEPCTUSED,FREELIST

q  空间使用更有效果

q  并发插入性能更加有效

实验

1.        创建一个本地管理的表空间,采用段自动管理方式

SQL> CREATE TABLESPACE DEMO DATAFILE '/u01/app/oracle/oradata/demo01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT AUTO;

Tablespace created.

2.        创建一个表,分析表的结构

SQL> CREATE TABLE demotab(x number) tablespace demo STORAGE(INITIAL 1000K);

 

Table created.

SQL> select TABLE_NAME,INITIAL_EXTENT,NEXT_EXTENT,PCT_FREE,PCT_USED FROM user_tables WHERE TABLE_NAME='DEMOTAB';

 

TABLE_NAME                     INITIAL_EXTENT NEXT_EXTENT   PCT_FREE   PCT_USED

------------------------------ -------------- ----------- ---------- ----------

DEMOTAB                               1024000     1048576         10

 

SQL>

SQL> exec show_space('demotab','auto','T','Y');

Total Blocks............................128

Total Bytes.............................1048576

Unused Blocks...........................125

Unused Bytes............................1024000

Last Used Ext FileId....................12

Last Used Ext BlockId...................128

Last Used Block.........................3

*************************************************

The segment is analyzed

0% -- 25% free space blocks.............0

0% -- 25% free space bytes..............0

25% -- 50% free space blocks............0

25% -- 50% free space bytes.............0

50% -- 75% free space blocks............0

50% -- 75% free space bytes.............0

75% -- 100% free space blocks...........0

75% -- 100% free space bytes............0

Unused Blocks...........................0

Unused Bytes............................0

Total Blocks............................0

Total bytes.............................0

 

PL/SQL procedure successfully completed.

 

SQL>

从这里可以看出,表头占了3个块的大小。

SQL> SELECT SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS,BYTES FROM Dba_extents t WHERE   t.segment_name = 'DEMOTAB';

 

SEGMENT_NAME    EXTENT_ID FILE_ID   BLOCK_ID     BLOCKS      BYTES

--------------- --------- ------- ---------- ---------- ----------

DEMOTAB                 0      12        128          8      65536

DEMOTAB                 1      12        136          8      65536

DEMOTAB                 2      12        144          8      65536

DEMOTAB                 3      12        152          8      65536

DEMOTAB                 4      12        160          8      65536

DEMOTAB                 5      12        168          8      65536

DEMOTAB                 6      12        176          8      65536

DEMOTAB                 7      12        184          8      65536

DEMOTAB                 8      12        192          8      65536

DEMOTAB                 9      12        200          8      65536

DEMOTAB                10      12        208          8      65536

DEMOTAB                11      12        216          8      65536

DEMOTAB                12      12        224          8      65536

DEMOTAB                13      12        232          8      65536

DEMOTAB                14      12        240          8      65536

DEMOTAB                15      12        248          8      65536

 

16 rows selected.

dba_extents表中可以看到,表头是从第128个块开始的。直接dump 128,129,130这几个块进行分析。DUMP出来的文件在UDUMP路径下。

SQL> ALTER SYSTEM DUMP DATAFILE 12 BLOCK 128;

System altered.

 

SQL> ALTER SYSTEM DUMP DATAFILE 12 BLOCK 129;

System altered.

 

SQL> ALTER SYSTEM DUMP DATAFILE 12 BLOCK 130;

System altered.

SQL>

查看DUMP出来的文件

Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_32242.trc

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1

System name:    Linux

Node name:      gzyl.mgx

Release:        2.6.32-431.el6.x86_64

Version:        #1 SMP Sun Nov 10 22:19:54 EST 2013

Machine:        x86_64

Instance name: orcl

Redo thread mounted by this instance: 1

Oracle process number: 21

Unix process pid: 32242, image: oracle@gzyl.mgx (TNS V1-V3)

 

 

*** 2016-10-18 20:17:02.034

*** SESSION ID:(73.14402) 2016-10-18 20:17:02.034

*** CLIENT ID:() 2016-10-18 20:17:02.034

*** SERVICE NAME:(SYS$USERS) 2016-10-18 20:17:02.034

*** MODULE NAME:(sqlplus@gzyl.mgx (TNS V1-V3)) 2016-10-18 20:17:02.034

*** ACTION NAME:() 2016-10-18 20:17:02.034

 

Start dump data blocks tsn: 13 file#:12 minblk 128 maxblk 128

Block dump from cache:

Dump of buffer cache at level 4 for tsn=13, rdba=50331776

BH (0x8fff0208) file#: 12 rdba: 0x03000080 (12/128) class: 8 ba: 0x8fe8c000

  set: 9 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25

  dbwrid: 0 obj: 80828 objn: 80828 tsn: 13 afn: 12 hint: f

  hash: [0xbe22af40,0xbe22af40] lru: [0x91f9c2b0,0x85f94600]

  ckptq: [NULL] fileq: [NULL] objq: [0xbaa0cab8,0x85f94628]

  st: XCURRENT md: NULL tch: 3

  flags: block_written_once redo_since_read

  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [4]

  cr pin refcnt: 0 sh pin refcnt: 0

Block dump from disk:

buffer tsn: 13 rdba: 0x03000080 (12/128)

scn: 0x0000.070778a6 seq: 0x01 flg: 0x04 tail: 0x78a62001

frmt: 0x02 chkval: 0x946f type: 0x20=FIRST LEVEL BITMAP BLOCK

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007F26329EF800 to 0x00007F26329F1800

7F26329EF800 0000A220 03000080 070778A6 04010000  [ ........x......]

7F26329EF810 0000946F 00000000 00000000 00000000  [o...............]

7F26329EF820 00000000 00000000 00000000 00000000  [................]

        Repeat 1 times

7F26329EF840 00000000 00000000 00000000 00000004  [................]

7F26329EF850 FFFFFFFF 0000000D 00000003 00000010  [................]

7F26329EF860 00010002 00000000 00000000 00000000  [................]

7F26329EF870 00000000 00000003 00000000 00000000  [................]

7F26329EF880 00000000 00000000 00000000 00000000  [................]

7F26329EF890 03000081 00000000 00000000 00000003  [................]

7F26329EF8A0 00000008 03000083 00000000 00000000  [................]

7F26329EF8B0 00000000 00000000 00000000 00000001  [................]

7F26329EF8C0 00013BBC 00183D6E 00000000 03000080  [.;..n=..........]

7F26329EF8D0 00000008 00000000 03000088 00000008  [................]

7F26329EF8E0 00000008 00000000 00000000 00000000  [................]

7F26329EF8F0 00000000 00000000 00000000 00000000  [................]

        Repeat 8 times

7F26329EF980 00000000 00000000 00000000 00001011  [................]

7F26329EF990 00000000 00000000 00000000 00000000  [................]

        Repeat 485 times

7F26329F17F0 00000000 00000000 00000000 78A62001  [............. .x]

Dump of First Level Bitmap Block

 --------------------------------

   nbits : 4 nranges: 2         parent dba:  0x03000081   poffset: 0    

   unformatted: 13      total: 16        first useful block: 3     

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 0     

 

   Extent Map Block Offset: 4294967295

   First free datablock : 3     

   Bitmap block lock opcode 0

   Locker xid:     :  0x0000.000.00000000

   Inc #: 0 Objd: 80828

  HWM Flag: HWM Set

      Highwater::  0x03000083  ext#: 0      blk#: 3      ext size: 8    

  #blocks in seg. hdr's freelists: 0    

  #blocks below: 0    

  mapblk  0x00000000  offset: 0    

  --------------------------------------------------------

  DBA Ranges :

  --------------------------------------------------------

   0x03000080  Length: 8      Offset: 0     

   0x03000088  Length: 8      Offset: 8     

 

   0:Metadata   1:Metadata   2:Metadata   3:unformatted

   4:unformatted   5:unformatted   6:unformatted   7:unformatted

   8:unformatted   9:unformatted   10:unformatted   11:unformatted

   12:unformatted   13:unformatted   14:unformatted   15:unformatted

  --------------------------------------------------------

End dump data blocks tsn: 13 file#: 12 minblk 128 maxblk 128

 

*** 2016-10-18 20:17:03.966

Start dump data blocks tsn: 13 file#:12 minblk 129 maxblk 129

Block dump from cache:

Dump of buffer cache at level 4 for tsn=13, rdba=50331777

BH (0x8efe6418) file#: 12 rdba: 0x03000081 (12/129) class: 9 ba: 0x8ed82000

  set: 12 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25

  dbwrid: 0 obj: 80828 objn: 80828 tsn: 13 afn: 12 hint: f

  hash: [0xbe3e2d20,0xbe3e2d20] lru: [0x82fdd420,0x99fd0dd0]

  ckptq: [NULL] fileq: [NULL] objq: [0xbaa67a00,0x99fd0df8]

  st: XCURRENT md: NULL tch: 3

  flags: block_written_once redo_since_read

  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [5]

  cr pin refcnt: 0 sh pin refcnt: 0

Block dump from disk:

buffer tsn: 13 rdba: 0x03000081 (12/129)

scn: 0x0000.070778c8 seq: 0x01 flg: 0x04 tail: 0x78c82101

frmt: 0x02 chkval: 0xbb99 type: 0x21=SECOND LEVEL BITMAP BLOCK

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007F26329EF800 to 0x00007F26329F1800

7F26329EF800 0000A221 03000081 070778C8 04010000  [!........x......]

7F26329EF810 0000BB99 00000000 00000000 00000000  [................]

7F26329EF820 00000000 00000000 00000000 00000000  [................]

        Repeat 1 times

7F26329EF840 00000000 00000000 00000000 03000082  [................]

7F26329EF850 00000008 00000008 00000000 00000000  [................]

7F26329EF860 00000000 00000000 00013BBC 00000001  [.........;......]

7F26329EF870 00000000 03000080 00010005 03000090  [................]

7F26329EF880 00010005 030000A0 00010005 030000B0  [................]

7F26329EF890 00010005 030000C0 00010005 030000D0  [................]

7F26329EF8A0 00010005 030000E0 00010005 030000F0  [................]

7F26329EF8B0 00010005 00000000 00000000 00000000  [................]

7F26329EF8C0 00000000 00000000 00000000 00000000  [................]

        Repeat 498 times

7F26329F17F0 00000000 00000000 00000000 78C82101  [.............!.x]

Dump of Second Level Bitmap Block

   number: 8       nfree: 8       ffree: 0      pdba:     0x03000082

   Inc #: 0 Objd: 80828

  opcode:0

 xid:

  L1 Ranges :

  --------------------------------------------------------

   0x03000080  Free: 5 Inst: 1

   0x03000090  Free: 5 Inst: 1

   0x030000a0  Free: 5 Inst: 1

   0x030000b0  Free: 5 Inst: 1

   0x030000c0  Free: 5 Inst: 1

   0x030000d0  Free: 5 Inst: 1

   0x030000e0  Free: 5 Inst: 1

   0x030000f0  Free: 5 Inst: 1

 

  --------------------------------------------------------

End dump data blocks tsn: 13 file#: 12 minblk 129 maxblk 129

 

*** 2016-10-18 20:17:06.350

Start dump data blocks tsn: 13 file#:12 minblk 130 maxblk 130

Block dump from cache:

Dump of buffer cache at level 4 for tsn=13, rdba=50331778

BH (0x8afb9f28) file#: 12 rdba: 0x03000082 (12/130) class: 4 ba: 0x8a8d8000

  set: 11 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25

  dbwrid: 0 obj: 80828 objn: 80828 tsn: 13 afn: 12 hint: f

  hash: [0xbe2d3780,0xbe2d3780] lru: [0x8dfeba80,0x9df99a50]

  ckptq: [NULL] fileq: [NULL] objq: [0xbaa76f50,0x9df99a78]

  st: XCURRENT md: NULL tch: 5

  flags: block_written_once redo_since_read

  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [2]

  cr pin refcnt: 0 sh pin refcnt: 0

Block dump from disk:

buffer tsn: 13 rdba: 0x03000082 (12/130)

scn: 0x0000.070778cb seq: 0x01 flg: 0x04 tail: 0x78cb2301

frmt: 0x02 chkval: 0x9440 type: 0x23=PAGETABLE SEGMENT HEADER

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x00007F26329EF800 to 0x00007F26329F1800

7F26329EF800 0000A223 03000082 070778CB 04010000  [#........x......]

7F26329EF810 00009440 00000000 00000000 00000000  [@...............]

7F26329EF820 00000000 00000010 00000080 00000A9C  [................]

7F26329EF830 00000000 00000003 00000008 03000083  [................]

7F26329EF840 00000000 00000000 00000000 00000000  [................]

        Repeat 1 times

7F26329EF860 00000003 00000008 03000083 00000000  [................]

7F26329EF870 00000000 00000000 00000000 03000080  [................]

7F26329EF880 03000080 00000000 00000000 00000000  [................]

7F26329EF890 00000000 00000000 00000000 00000000  [................]

        Repeat 3 times

7F26329EF8D0 00000001 00002000 00000000 00001434  [..... ......4...]

7F26329EF8E0 00000000 03000081 00000001 030000F0  [................]

7F26329EF8F0 03000081 00000000 00000000 00000000  [................]

7F26329EF900 00000000 00000000 00000010 00000000  [................]

7F26329EF910 00013BBC 10000000 03000080 00000008  [.;..............]

7F26329EF920 03000088 00000008 03000090 00000008  [................]

7F26329EF930 03000098 00000008 030000A0 00000008  [................]

7F26329EF940 030000A8 00000008 030000B0 00000008  [................]

7F26329EF950 030000B8 00000008 030000C0 00000008  [................]

7F26329EF960 030000C8 00000008 030000D0 00000008  [................]

7F26329EF970 030000D8 00000008 030000E0 00000008  [................]

7F26329EF980 030000E8 00000008 030000F0 00000008  [................]

7F26329EF990 030000F8 00000008 00000000 00000000  [................]

7F26329EF9A0 00000000 00000000 00000000 00000000  [................]

        Repeat 144 times

7F26329F02B0 03000080 03000083 03000080 03000088  [................]

7F26329F02C0 03000090 03000091 03000090 03000098  [................]

7F26329F02D0 030000A0 030000A1 030000A0 030000A8  [................]

7F26329F02E0 030000B0 030000B1 030000B0 030000B8  [................]

7F26329F02F0 030000C0 030000C1 030000C0 030000C8  [................]

7F26329F0300 030000D0 030000D1 030000D0 030000D8  [................]

7F26329F0310 030000E0 030000E1 030000E0 030000E8  [................]

7F26329F0320 030000F0 030000F1 030000F0 030000F8  [................]

7F26329F0330 00000000 00000000 00000000 00000000  [................]

        Repeat 144 times

7F26329F0C40 00000000 00000000 03000081 00000000  [................]

7F26329F0C50 00000000 00000000 00000000 00000000  [................]

        Repeat 185 times

7F26329F17F0 00000000 00000000 00000000 78CB2301  [.............#.x]

  Extent Control Header

  -----------------------------------------------------------------

  Extent Header:: spare1: 0      spare2: 0      #extents: 16     #blocks: 128  

                  last map  0x00000000  #maps: 0      offset: 2716 

      Highwater::  0x03000083  ext#: 0      blk#: 3      ext size: 8    

  #blocks in seg. hdr's freelists: 0    

  #blocks below: 0    

  mapblk  0x00000000  offset: 0    

                   Unlocked

  --------------------------------------------------------

  Low HighWater Mark :

      Highwater::  0x03000083  ext#: 0      blk#: 3      ext size: 8    

  #blocks in seg. hdr's freelists: 0    

  #blocks below: 0    

  mapblk  0x00000000  offset: 0    

  Level 1 BMB for High HWM block: 0x03000080

  Level 1 BMB for Low HWM block: 0x03000080

  --------------------------------------------------------

  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0     

  L2 Array start offset:  0x00001434

  First Level 3 BMB:  0x00000000

  L2 Hint for inserts:  0x03000081

  Last Level 1 BMB:  0x030000f0

  Last Level II BMB:  0x03000081

  Last Level III BMB:  0x00000000

     Map Header:: next  0x00000000  #extents: 16   obj#: 80828  flag: 0x10000000

  Inc # 0

  Extent Map

  -----------------------------------------------------------------

   0x03000080  length: 8    

   0x03000088  length: 8    

   0x03000090  length: 8    

   0x03000098  length: 8    

   0x030000a0  length: 8    

   0x030000a8  length: 8    

   0x030000b0  length: 8    

   0x030000b8  length: 8    

   0x030000c0  length: 8    

   0x030000c8  length: 8    

   0x030000d0  length: 8    

   0x030000d8  length: 8    

   0x030000e0  length: 8    

   0x030000e8  length: 8    

   0x030000f0  length: 8    

   0x030000f8  length: 8    

 

  Auxillary Map

  --------------------------------------------------------

   Extent 0     :  L1 dba:  0x03000080 Data dba:  0x03000083

   Extent 1     :  L1 dba:  0x03000080 Data dba:  0x03000088

   Extent 2     :  L1 dba:  0x03000090 Data dba:  0x03000091

   Extent 3     :  L1 dba:  0x03000090 Data dba:  0x03000098

   Extent 4     :  L1 dba:  0x030000a0 Data dba:  0x030000a1

   Extent 5     :  L1 dba:  0x030000a0 Data dba:  0x030000a8

   Extent 6     :  L1 dba:  0x030000b0 Data dba:  0x030000b1

   Extent 7     :  L1 dba:  0x030000b0 Data dba:  0x030000b8

   Extent 8     :  L1 dba:  0x030000c0 Data dba:  0x030000c1

   Extent 9     :  L1 dba:  0x030000c0 Data dba:  0x030000c8

   Extent 10    :  L1 dba:  0x030000d0 Data dba:  0x030000d1

   Extent 11    :  L1 dba:  0x030000d0 Data dba:  0x030000d8

   Extent 12    :  L1 dba:  0x030000e0 Data dba:  0x030000e1

   Extent 13    :  L1 dba:  0x030000e0 Data dba:  0x030000e8

   Extent 14    :  L1 dba:  0x030000f0 Data dba:  0x030000f1

   Extent 15    :  L1 dba:  0x030000f0 Data dba:  0x030000f8

  --------------------------------------------------------

 

   Second Level Bitmap block DBAs

   --------------------------------------------------------

   DBA 1:   0x03000081

 

End dump data blocks tsn: 13 file#: 12 minblk 130 maxblk 130

 

show_space()存储过程代码

CREATE OR REPLACE PROCEDURE show_space (p_segname_1 IN varchar2,

                                        p_space IN varchar2 DEFAULT 'MANUAL' ,

                                        p_type_1 IN varchar2 DEFAULT 'TABLE' ,

                                        p_analyzed IN varchar2 DEFAULT 'N' ,

                                        p_owner_1 IN varchar2 DEFAULT USER

)

AS

   p_segname              VARCHAR2 (100);

   p_type                 VARCHAR2 (10);

   p_owner                VARCHAR2 (30);

 

   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 p (p_label IN varchar2, p_num IN number)

   IS

   BEGIN

      DBMS_OUTPUT.put_line (RPAD (p_label, 40, '.') || p_num);

   END;

BEGIN

   p_segname                 := UPPER (p_segname_1);          -- rainy changed

   p_owner                   := UPPER (p_owner_1);

   p_type                    := p_type_1;

 

   IF (p_type_1 = 'i' OR p_type_1 = 'I')

   THEN                                                        --rainy changed

      p_type   := 'INDEX';

   END IF;

 

   IF (p_type_1 = 't' OR p_type_1 = 'T')

   THEN                                                        --rainy changed

      p_type   := 'TABLE';

   END IF;

 

   IF (p_type_1 = 'c' OR p_type_1 = 'C')

   THEN                                                        --rainy changed

      p_type   := 'CLUSTER';

   END IF;

 

 

   DBMS_SPACE.unused_space (segment_owner => p_owner,

                            segment_name => p_segname,

                            segment_type => p_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

   );

 

   IF p_space = 'MANUAL' OR (p_space <> 'auto' AND p_space <> 'AUTO')

   THEN

      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

      );

 

      p ('Free Blocks', l_free_blks);

   END IF;

 

   p ('Total Blocks', l_total_blocks);

   p ('Total Bytes', l_total_bytes);

   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);

 

 

   /*IF the segment is analyzed */

   IF p_analyzed = 'Y'

   THEN

      DBMS_SPACE.space_usage (segment_owner => p_owner,

                              segment_name => p_segname,

                              segment_type => p_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

      );

      DBMS_OUTPUT.put_line (RPAD (' ', 50, '*'));

      DBMS_OUTPUT.put_line ('The segment is analyzed');

      p ('0% -- 25% free space blocks', l_fs1_blocks);

      p ('0% -- 25% free space bytes', l_fs1_bytes);

      p ('25% -- 50% free space blocks', l_fs2_blocks);

      p ('25% -- 50% free space bytes', l_fs2_bytes);

      p ('50% -- 75% free space blocks', l_fs3_blocks);

      p ('50% -- 75% free space bytes', l_fs3_bytes);

      p ('75% -- 100% free space blocks', l_fs4_blocks);

      p ('75% -- 100% free space bytes', l_fs4_bytes);

      p ('Unused Blocks', l_unformatted_blocks);

      p ('Unused Bytes', l_unformatted_bytes);

      p ('Total Blocks', l_full_blocks);

      p ('Total bytes', l_full_bytes);

   END IF;

END;

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27056898/viewspace-2126692/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27056898/viewspace-2126692/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值