Truncate table 会同时删除表相应的LOB 段吗?--不会

测试一:rhel5 ;ora10203

SQL> create user lixora identified by lixora default tablespace users;

User created.

SQL> grant dba to lixora;

Grant succeeded.

SQL> conn lixora/lixora

Connected.

SQL>  select count(*) from user_segments;

COUNT(*)

----------

0

SQL>  create table t(x clob);

Table created.

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

SQL> select segment_name, segment_type, bytes

2   from user_segments;

SEGMENT_NAME                                                                      SEGMENT_TYPE            BYTES

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

SYS_IL0000085497C00001$$                                                          LOBINDEX                65536   -----初始分配大小

SYS_LOB0000085497C00001$$                                                      LOBSEGMENT          65536

T                                                                          
         TABLE                          65536

SQL> SQL>  insert into t select lpad(segment_name,8192) from dba_segments;        ----插入测试数据

4780 rows created.

SQL> commit;

Commit complete.

SQL> select segment_name, segment_type, bytes

2     from user_segments;

SEGMENT_NAME                                                                      SEGMENT_TYPE            BYTES

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

SYS_IL0000085497C00001$$                                                          LOBINDEX                65536

SYS_LOB0000085497C00001$$                                                      LOBSEGMENT          40894464

T                                                                                   TABLE                       327680

------truncate 表

SQL>  truncate table t;

Table truncated.

SQL> select segment_name, segment_type, bytes

2   from user_segments;

SEGMENT_NAME                                                                      SEGMENT_TYPE            BYTES

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

SYS_IL0000085497C00001$$                                                          LOBINDEX                65536

SYS_LOB0000085497C00001$$                                                      LOBSEGMENT        65536      -------lob 段空间已经释放了,但lob 段仍然存在

T                                                                                          
TABLE                       65536

-------尝试手工去回收lob 段空间

SQL>  alter table t modify lob(x) (shrink space);

Table altered.

SQL> select segment_name, segment_type, bytes

2     from user_segments;

SEGMENT_NAME                                                                      SEGMENT_TYPE            BYTES

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

SYS_IL0000085497C00001$$                                                          LOBINDEX                65536  -------lob 段仍然存在

SYS_LOB0000085497C00001$$                                                      LOBSEGMENT         65536   ------lob 段仍然存在

T                                                                                 
 TABLE                       65536

oracle 11g 的版本中测试和上述现象一致。

总结:

在truncate table 时,如果表中含有lob 字段,相应的log segment 是不会被清理掉的,但是空间会被回收。

时间: 2024-10-24 13:10:27

Truncate table 会同时删除表相应的LOB 段吗?--不会的相关文章

sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)

我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别. 我们先看一下truncate table的说明:删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少. truncate table的语

TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。

TRUNCATE 删除表,无法回退.默认选择为整个表的内容,所以不能加条件.DELETE 删除表,可以回退.可以带where 条件.建议使用delete.但是TRUNCATE 删除表数据比delete要快. 使用TRUNCATE TABLE语句 TRUNCATE TABLE语句提供了一种删除表中所有记录的快速方法.因为TRUNCATE TABLE语句不记录日志,只记录整个数据页的释放操作,而DELETE语句对每一行修改都记录日志,所以使用TRUNCATE TABLE语句进行删除操作总是比没有指定

删除表数据delete和truncate

TRUNCATE 命令用法语法TRUNCATE TABLE name 参数name 是要截断的表的名称或要删除其全部行的表的名称. 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志

oracle 中删除表 drop delete truncate

oracle 中删除表 drop delete truncate 相同点,使用drop delete truncate 都会删除表中的内容 drop table 表名 delete from 表名(后面不跟where语句,则也删除表中所有的数据) truncate table 表名 区别 首先delete 属于DML,当不commit时时不生效的 而truncate 和 drop 则是直接生效的,不能回滚. truncate 和 delete 不删除表的结构,只是针对表中的内容删除 drop语句

TRUNCATE TABLE 与 DELETE table 区别

语法 TRUNCATE TABLE name;参数  TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行. TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. 原因: DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项. TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRUNCATE TABLE 删除表中的所有行,但表结构

sql语句中----删除表数据的"三兄弟"

说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大------drop 出没场合:drop table  tb --tb表示数据表的名字,下同 绝招:删除内容和定义,释放空间.简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表, 例如:一个班就是一个表,学生就是表中的数据,学生的职务就是定义 drop table class,就是把整

Truncate Table 用法

TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作. 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删除其全部行的表的名称. 注释 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过

truncate table 和delete

delete table 和 truncate table 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where<search_condition>] 将XS表中的所有行数据删除 delete XS 执行完后,发现XS表中的数据都删除了,但是表的结构什么都还在. truncate truncate table语句将删除指定表中所有数据,因此也称其为清除表数据语句,一般格式如下 truncate table name

postgresql 删除表数据

2种方式都只删数据,保留表结构 第一 ,适用数据量较小的情况 delete from tablename; 第二,适合删除大量数据,速度快 TRUNCATE TABLE tablename; 若该表有外键,要用级联方式删所有关联的数据 TRUNCATE TABLE tablename CASCADE; 版权声明:本文为博主原创文章,未经博主允许不得转载.