oracle Lob对象空间回收测试
备注:转自网络
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对象空间回收测试的更多相关文章
- Oracle查看对象空间使用情况show_space
tom大神写了一个用于查看Oracle数据库对象空间使用情况. 以下演示一下怎样使用: –工具源代码 CREATE OR REPLACE PROCEDURE show_space(p_segname ...
- 由Oracle 11g SYSAUX 和 SYSTEM 表空间回收引发的联想
0x00--目的 整理一下以前一个SYSTEM表空间和SYSAUX表空间使用率达到99%上限的处理思路和相关知识点,好记性不如烂笔头 0x01--表空间使用率现状 通过查询可得知目前表空间使用情况如下 ...
- Oracle数据库对象(表空间/同义词/序列/视图/索引)
数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...
- oracle数据库表空间文件收缩实例
Oracle数据文件收缩实例 数据文件的作用 HWM的基本概念 查看数据文件的使用情况 包括内容:数据文件大小,已经used空间,free空间,hwm信息 select /*+ ordered use ...
- oracle之 Oracle LOB 详解
一. 官方说明 Oracle 11gR2 文档: LOB Storage http://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294 ...
- Oracle创建表空间和表
创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表.表空间是逻辑上的划分.方便管理的.数据表空间 (Tablesp ...
- 简易对象垃圾回收框架 for Delphi
(一).缘起 1.1 我的一个出错程序 程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端. 开发工具:Delhpi 5 相关技术:客户端通过与服务端建立Socket连接来模拟一组电话机的拨入. ...
- LOB对象在数据泵导出、导入后查询对象数量发现丢失
问题描述:问题:源库的某个Schema使用数据泵Expdp元数据整体导出,在目标库导入且成功后,逻辑验证用户对象,发现缺失.分析查询后,缺失的对象,都是LOB类型(并不是所有的LOB都无法导入,是大部 ...
- ORACLE修改表空间方法
一.使用imp/exp.先导出源库,再创建新库把表空间创建好,然后再导入.(据说这样可以,前提是新的库里面不能有与源库相同名字的表空间.有待验证!) 二.使用脚本进行修改.据目前所了解,正长情况下需要 ...
随机推荐
- netty源码解解析(4.0)-7 线程模型-IO线程EventLoopGroup和NIO实现(二)
把NIO事件转换成对channel unsafe的调用或NioTask的调用 processSelectedKeys()方法是处理NIO事件的入口: private void processSelec ...
- Spark新手入门——3.Spark集群(standalone模式)安装
主要包括以下三部分,本文为第三部分: 一. Scala环境准备 查看二. Hadoop集群(伪分布模式)安装 查看三. Spark集群(standalone模式)安装 Spark集群(standalo ...
- 序列化(pickle,shelve,json,configparser)
一,序列化 在我们存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据结构,这个过程叫序列化,不同的序列化,结果也不同,但是目的是一样的,都是为了存储和传输. 在 ...
- C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)
int [] numbers = new int[5]; // 长度为5,元素类型为 int.string[,] names = new string[5,4]; // 5*4 的二维数组byte[] ...
- 【Core】在mvc使用EF
引用DLL: 继续上一篇的内容我们来添加EF实体: 首先:工具> NuGet程序包管理器>程序包管理器控制台: Install-Package Microsoft.EntityFramew ...
- java_分数
题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要 ...
- JavaScript 把字符串类型转换成日期类型
今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 var str = "1997-3-12"; var d = new Date ...
- 百度地图坐标偏移,微信小程序地图偏移问题,腾讯地图坐标偏移
解决方案: 如果用百度的地图获取的坐标点,在微信小程序内使用,就会出现偏移 算法(lat和lng是经纬度,球面坐标): To_B是转到百度,To_G是转到GCJ-02(谷歌,高德,腾讯) var TO ...
- 【c++】删除string中指定的字符
使用string::iterator(字符串迭代器)从开始 str.begin() 迭代到最后 str.end() ,再使用string.erase(const_iterator p)函数来删除迭代器 ...
- 怎么在ReactNative里面使用Typescript
今天来搞一搞怎么搭建一个可以使用Typescript的ReactNative环境好吧,一句废话不多说,直接开始好吧 1.全局安装create-react-native-app yarn global ...