回收带Lob字段表占用的空间

SQL> select object_name from user_objects;

no rows selected

SQL> select segment_name from user_segments;

no rows selected

SQL> create table test1 as select * from ecds.MSG_MESSAGELOG;

Table created.

SQL> select segment_name,segment_type from user_segments;

SEGMENT_NAME									  SEGMENT_TYPE
--------------------------------------------------------------------------------- ------------------
TEST1										  TABLE
SYS_IL0000324358C00006$$							  LOBINDEX
SYS_LOB0000324358C00006$$							  LOBSEGMENT

SQL> desc test1
 Name														   Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 ID														   NOT NULL VARCHAR2(50)
 M_MESGTYPE														    VARCHAR2(20)
 M_MESGSTATE														    VARCHAR2(100)
 M_OPERATEDATE														    TIMESTAMP(6)
 M_SUCCESSFULDATE													    TIMESTAMP(6)
 M_MESGCONTENT														    CLOB
 M_SENDORRECEIVE													    VARCHAR2(100)
 M_REPEATTIMES														    NUMBER(38)
 M_WORKDATE														    DATE
 M_ORIGSENDER														    VARCHAR2(100)
 M_ORIGSENDDATE 													    DATE
 M_MESGID														    VARCHAR2(100)
 M_FK_MESSAGESAVETIMEID 												    VARCHAR2(100)
 M_MSGTABLEID														    VARCHAR2(100)
 M_CREDTTM														    TIMESTAMP(6)
 M_ACCTSVCR														    VARCHAR2(100)
 M_MSGID4SUM														    VARCHAR2(100)
 M_ACCPTRSVCR														    VARCHAR2(100)

SQL> select min(m_origsenddate),max(m_origsenddate) from test1;

MIN(M_ORIGSE MAX(M_ORIGSE
------------ ------------
25-JUN-10    20-OCT-13

SQL> select count(*) from test1 a 
  2  where a.m_origsenddate >= date'2011-12-31';

  COUNT(*)
----------
    679430

SQL> select count(*) from test1 a;

  COUNT(*)
----------
   1004647
SQL> select segment_name,bytes/1024/1024 from user_segments;

SEGMENT_NAME									  BYTES/1024/1024
--------------------------------------------------------------------------------- ---------------
TEST1											     1088
SYS_IL0000324358C00006$$								    .1875
SYS_LOB0000324358C00006$$								     4464


SQL> delete from test1 a where a.m_origsenddate >= date'2011-12-31';

679430 rows deleted.

SQL> commit;

Commit complete.

----------------------------------------------------------------------------------------------------
SQL> select segment_name,bytes/1024/1024 from user_segments;

SEGMENT_NAME									  BYTES/1024/1024
--------------------------------------------------------------------------------- ---------------
TEST1											     1088
SYS_IL0000324358C00006$$								       29
SYS_LOB0000324358C00006$$								     4464

SQL> alter table test1 move;

Table altered.

SQL> commit;

Commit complete.

SQL> select segment_name,bytes/1024/1024 from user_segments;

SEGMENT_NAME									  BYTES/1024/1024
--------------------------------------------------------------------------------- ---------------
TEST1											      360
SYS_IL0000324358C00006$$								       29
SYS_LOB0000324358C00006$$								     4464


SQL> select segment_name,bytes/1024/1024,segment_type from user_segments;

SEGMENT_NAME									  BYTES/1024/1024 SEGMENT_TYPE
--------------------------------------------------------------------------------- --------------- ------------------
TEST1											      360 TABLE
SYS_IL0000324358C00006$$								       29 LOBINDEX
SYS_LOB0000324358C00006$$								     4464 LOBSEGMENT

一个Lob字段会自动创建索引

SQL>  alter table test1 modify lob(M_MESGCONTENT) (shrink space);

Table altered.

SQL> select segment_name,bytes/1024/1024,segment_type from user_segments;

SEGMENT_NAME									  BYTES/1024/1024 SEGMENT_TYPE
--------------------------------------------------------------------------------- --------------- ------------------
TEST1											      360 TABLE
SYS_IL0000324358C00006$$								       29 LOBINDEX
SYS_LOB0000324358C00006$$								1348.6875 LOBSEGMENT

此时空间回收

原文地址:https://www.cnblogs.com/hzcya1995/p/13352274.html