Truncate数据表背后的几个参数(二)

2015-07-16 12:09:56 · 作者: · 浏览: 24
。Data_object_id是内部段结构的编号信息。一旦进行truncate操作,就会认为是一个新段生成。


默认truncate操作下,Oracle会删除所有数据,回收所有段结构后重新分配一个新的extent。内部的段结构上,Oracle认为是在原来段头位置上重新分配的新段。


?


3、Truncate reuse storage行为


?


下面来测试一下reuse storage参数行为。首先需要重建表数据内容和充实段结构。


?


?


SQL> insert into t select * from dba_objects;


99693 rows inserted


?


SQL> commit;


Commit complete


?


?


SQL> select EXTENT_ID, FILE_ID, BLOCK_ID, BYTES, BLOCKS from dba_extents where segment_name='T' and owner='TEST';


?


?EXTENT_ID? ? FILE_ID? BLOCK_ID? ? ? BYTES? ? BLOCKS


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


? ? ? ? 0? ? ? ? ? 4? ? ? 28808? ? ? 65536? ? ? ? ? 8


? ? ? ? 1? ? ? ? ? 4? ? ? 28816? ? ? 65536? ? ? ? ? 8


(篇幅原因,有省略……)


? ? ? ? 26? ? ? ? ? 4? ? ? 30720? ? 1048576? ? ? ? 128


?


27 rows selected


?


SQL> select EXTENT_ID, FILE_ID, BLOCK_ID, BYTES, BLOCKS from dba_extents where segment_name='IDX_T_ID' and owner='TEST';


?


?EXTENT_ID? ? FILE_ID? BLOCK_ID? ? ? BYTES? ? BLOCKS


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


? ? ? ? 0? ? ? ? ? 4? ? ? 28936? ? ? 65536? ? ? ? ? 8


? ? ? ? 1? ? ? ? ? 4? ? ? 28840? ? ? 65536? ? ? ? ? 8


(篇幅原因,有省略……)


? ? ? ? 17? ? ? ? ? 4? ? ? 30208? ? 1048576? ? ? ? 128


?


18 rows selected


?


?


?


操作reuse storage。


?


?


SQL> truncate table t reuse storage;


?


Table truncated


?


?


?


SQL> select EXTENT_ID, FILE_ID, BLOCK_ID, BYTES, BLOCKS from dba_extents where segment_name='T' and owner='TEST';


?


?EXTENT_ID? ? FILE_ID? BLOCK_ID? ? ? BYTES? ? BLOCKS


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


? ? ? ? 0? ? ? ? ? 4? ? ? 28808? ? ? 65536? ? ? ? ? 8


? ? ? ? 1? ? ? ? ? 4? ? ? 28816? ? ? 65536? ? ? ? ? 8


(篇幅原因,有省略……)


? ? ? ? 26? ? ? ? ? 4? ? ? 30720? ? 1048576? ? ? ? 128


?


27 rows selected


?


SQL> select EXTENT_ID, FILE_ID, BLOCK_ID, BYTES, BLOCKS from dba_extents where segment_name='IDX_T_ID' and owner='TEST';


?


?EXTENT_ID? ? FILE_ID? BLOCK_ID? ? ? BYTES? ? BLOCKS


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


? ? ? ? 0? ? ? ? ? 4? ? ? 28936? ? ? 65536? ? ? ? ? 8


? ? ? ? 1? ? ? ? ? 4? ? ? 28840? ? ? 65536? ? ? ? ? 8


? ? ? ? 2? ? ? ? ? 4? ? ? 28904? ? ? 65536? ? ? ? ? 8


(篇幅原因,有省略……)


? ? ? ? 17? ? ? ? ? 4? ? ? 30208? ? 1048576? ? ? ? 128


?


18 rows selected


?


?


数据的确删除。


?


?


SQL> select count(*) from t;


?


? COUNT(*)


----------


? ? ? ? 0


?


?


Reuse storage情况下,段结构没有回收,数据却被删除了!从段结构情况看,Oracle依然视之为新段,data_object_id发生变化。


?


?


SQL> select object_name, object_id, data_object_id from dba_objects where owner='TEST' and object_name in ('T','IDX_T_ID');


?


OBJECT_NAME? ? ? OBJECT_ID DATA_OBJECT_ID


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


IDX_T_ID? ? ? ? ? ? 123667? ? ? ? 123670


T? ? ? ? ? ? ? ? ? 123666? ? ? ? 123671