备注:转自网络

SQL> create table t(time date,text clob);
SQL> begin
for i in 1 .. 10000 loop
insert into t values(sysdate,rpad('a', 4000, 'a'));
commit;
end loop;
end;
/

SQL> select count(*) from t; --10000

SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 83886080
SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --40000000
SQL> delete from t;
SQL> commit;
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 83886080
SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null
可以看见删掉以后,空间没有释放,再次想表中插入10000跳记录。

SQL> begin
for i in 1 .. 10000 loop
insert into t values(sysdate,rpad('a', 4000, 'a'));
commit;
end loop;
end;
/

SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 167772160

SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --40000000
SQL> delete from t;
SQL> commit;

TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 167772160
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null
----------空间依然没有释放,下面释放空间。
SQL> alter table t modify lob (text) (shrink space);
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 65536
SQL> select sum(dbms_lob.getlength(text)) as bytes from t; --输出为null

SQL> begin
for i in 1 .. 10000 loop
insert into t values(sysdate,rpad('a', 4000, 'a'));
commit;
end loop;
end;
/

SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 83886080
SQL> truncate table t;
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 65536
可以看见truncate会释放空间。

SQL> begin
for i in 1 .. 10000 loop
insert into t values(sysdate,rpad('a', 4000, 'a'));
commit;
end loop;
end;
/

SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 83886080
SQL> delete from t;
SQL> commit;
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 83886080
SQL> alter table t move lob(text) store as(tablespace tab1);
SQL> select table_name, column_name, segment_name, a.bytes from dba_segments a join dba_lobs b using (owner, segment_name) where b.table_name = 'T';
TABLE_NAME COLUMN_NAME SEGMENT_NAME BYTES
------------------------------ -------------------- ------------------------------ ----------
T TEXT SYS_LOB0000102100C00002$$ 65536
move表空间也会释放空间。

oracle Lob对象空间回收测试的更多相关文章

  1. Oracle查看对象空间使用情况show_space

    tom大神写了一个用于查看Oracle数据库对象空间使用情况. 以下演示一下怎样使用: –工具源代码 CREATE OR REPLACE PROCEDURE show_space(p_segname ...

  2. 由Oracle 11g SYSAUX 和 SYSTEM 表空间回收引发的联想

    0x00--目的 整理一下以前一个SYSTEM表空间和SYSAUX表空间使用率达到99%上限的处理思路和相关知识点,好记性不如烂笔头 0x01--表空间使用率现状 通过查询可得知目前表空间使用情况如下 ...

  3. Oracle数据库对象(表空间/同义词/序列/视图/索引)

    数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

  4. oracle数据库表空间文件收缩实例

    Oracle数据文件收缩实例 数据文件的作用 HWM的基本概念 查看数据文件的使用情况 包括内容:数据文件大小,已经used空间,free空间,hwm信息 select /*+ ordered use ...

  5. oracle之 Oracle LOB 详解

    一.  官方说明 Oracle 11gR2 文档: LOB Storage http://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294 ...

  6. Oracle创建表空间和表

    创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...

  7. 简易对象垃圾回收框架 for Delphi

    (一).缘起 1.1 我的一个出错程序 程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端. 开发工具:Delhpi 5 相关技术:客户端通过与服务端建立Socket连接来模拟一组电话机的拨入. ...

  8. LOB对象在数据泵导出、导入后查询对象数量发现丢失

    问题描述:问题:源库的某个Schema使用数据泵Expdp元数据整体导出,在目标库导入且成功后,逻辑验证用户对象,发现缺失.分析查询后,缺失的对象,都是LOB类型(并不是所有的LOB都无法导入,是大部 ...

  9. ORACLE修改表空间方法

    一.使用imp/exp.先导出源库,再创建新库把表空间创建好,然后再导入.(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间.有待验证!) 二.使用脚本进行修改.据目前所了解,正长情况下需要 ...

随机推荐

  1. System V 与 POSIX 简介与对比

    当我们在 Linux 系统中进行进程间通信时,例如信号量,消息队列,共享内存等方式,会发现有System V以及POSIX两种类型.今天我们就来简单介绍下它们. POSIX: POSIX(Portab ...

  2. 如何调试Javascript代码以及网页代码

    做过网页开发的都知道,不过你是用php还是asp.net以及java开发的网站,在开发过程中,web网页展示页面肯定会出现或多或少的问题.这里我推荐使用谷歌浏览器进行Web网页的调试以及错误信息定位. ...

  3. C# 获取用户IP地址(转载)

    [ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...

  4. 安装Eclipse时遇到”java was started but returned exit code = 13“如何解决?

    有的时候运行开发工具时会出现java was started but returned exit code = 13......的提示,绝大多数的问题都是版本问题: 我们可以打开命令行工具cmd 输入 ...

  5. GridView控件的属性、事件

    GridView控件的属性 属性 描述 AllowPaging 指示该控件是否支持分页. AllowSorting 指示该控件是否支持排序. AutoGenerateColumns 指示是否自动地为数 ...

  6. Idea中JDK为1.8,还提示Diamond types are not supported at this language level

    project的java level 已经核实确实为8,但是IDEA里面仍然会有如下图的提示: 通过查看项目设置,发现project的java level 也是8. 然后继续检查其他模块 如modul ...

  7. quartz部署出现找不到表的情况,错误提示: Table 'heart_beat.QRTZ_LOCKS' doesn't exist

    描述一下,本地可以,部署到Linux就不行,Linux上的数据库是本地直接拷贝上去的,项目环境是Spring Boot2.1.Shiro.MyBatis.Redis.swagger.Bootstrap ...

  8. 项目开发版本控制----Git

    版本控制的工具我早之前用的svn,后来换成了git.同样是版本控制,为什么要换呢?肯定是有原因的啦~ 一.Git和SVN的比较 svn的优缺点 优点: 1.管理方便,逻辑明确,符合一般人思维习惯. 2 ...

  9. 关于git的一个错误提示

    一般clone仓库后如果,remote -v或者add出现如下的错误的话: Not a git repository (or any of the parent directories): .git需 ...

  10. js 中导出excel 较长数字串会变成科学计数法

    在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...