设为首页 加入收藏

TOP

验证:oracledelete数据库空间是可以重新被使用的(二)
2015-11-21 01:38:56 来源: 作者: 【 】 浏览:1
Tags:验证 oracledelete 数据库 空间 可以 重新 使用
/ num_rows) * 100, 2) as "RT%" 5 from dba_tables 6 where table_name = 'T_ITDBA_1'; TABLE_NAME NUM_ROWS CHAIN_CNT RT% ------------------------------ ---------- ---------- ---------- T_ITDBA_1 1291136 0 0 Elapsed: 00:00:00.06 经过查询,没有产生链表!那么这种更新,很有可能数据直接转移到新的块上还是?这种现象到底什么原因呢?对于这个问题,我重新实验

SQL> drop table T_ITDBA_1;
Table dropped.
Elapsed: 00:00:02.24
SQL> create table t_itdba_1 tablespace itdba_1 as select * from dba_extents;
Table created.
Elapsed: 00:00:16.58
SQL> exec dbms_stats.gather_table_stats(user,'T_ITDBA_1');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.23
SQL> select bytes/1024 ,segment_name from dba_segments where segment_name='T_ITDBA_1';
BYTES/1024 SEGMENT_NAME
---------- ------------------------------
       896 T_ITDBA_1
Elapsed: 00:00:00.25
SQL> 
查询该表数据行于数据块之间的对应关系


     75159          6      18589              87
     75159          6      18620             110
     75159          6      18626             108
     75159          6      18635              76
     75159          6      18657              97
     75159          6      18574             129
     75159          6      18577             132
     75159          6      18582             120

 OBJECT_ID    FILE_ID   BLOCK_ID COUNT(BLOCK_ID)
---------- ---------- ---------- ---------------
     75159          6      18588             127
     75159          6      18598              90
     75159          6      18604              78
     75159          6      18616             104
     75159          6      18617             107
     75159          6      18627             105
数据很多,我把它存放到一张表里
SQL> create table t_itdba_01 as 
select object_id, file_id, block_id, count(block_id) countt
  2    3    from (select rowid,
               dbms_rowid.rowid_object(rowid) object_id,
               dbms_rowid.rowid_relative_fno(rowid) file_id,
               dbms_rowid.rowid_block_number(rowid) block_id
  4    5    6    7            FROM T_ITDBA_1)
  8   group by object_id, file_id, block_id;
Table created.
Elapsed: 00:00:00.55

SQL> update T_ITDBA_1 set SEGMENT_NAME='abcde000000000000000000000';
10294 rows updated.
Elapsed: 00:00:00.26
SQL> commit;
Commit complete.
Elapsed: 00:00:00.05
SQL>  exec dbms_stats.gather_table_stats(user,'T_ITDBA_1');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.21
SQL> select table_name,
  2         num_rows,
  3         CHAIN_CNT,
  4         ROUND((CHAIN_CNT / num_rows) * 100, 2) as "RT%"
  5    from dba_tables
  6   where table_name = 'T_ITDBA_1';

TABLE_NAME                       NUM_ROWS  CHAIN_CNT        RT%
------------------------------ ---------- ---------- ----------
T_ITDBA_1                           10294          0          0

Elapsed: 00:00:00.06
SQL> select bytes/1024 ,segment_name from dba_segments where segment_name='T_ITDBA_1';

BYTES/1024 SEGMENT_NAME
---------- ------------------------------
       960 T_ITDBA_1

Elapsed: 00:00:00.01
SQL> 
占用空间增加,创建映射表
SQL> create table t_itdba_02 as 
  2  select object_id, file_id, block_id, count(block_id) countt
  3    from (select rowid,
  4                 dbms_rowid.rowid_object(rowid) object_id,
  5                 dbms_rowid.rowid_relative_fno(rowid) file_id,
  6                 dbms_rowid.rowid_block_number(rowid) block_id
  7            FROM T_ITDBA_1)
  8   group by object_id, file_id, block_id;
Table created.
Elapsed: 00:00:00.51
SQL> 
比对数据

?

?

SQL> select a.block_id, b.countt - a.countt
  2    from t_itdba_01 a, t_itdba_02 b
  3   where a.block_id = b.block_id
  4     and (b.countt - a.countt) <> 0;

no rows selected

Elapsed: 00:00:00.00
SQL> 
占用的空间增加,使用的块数没增加,难道仅仅使用块的free部分,碎片到底怎么产生的,还是我测试力度不够! 也就是说,数据库什么时候会用到delete 部分的数据空间??
1 exten 分配产生,2 行连接,3 行迁移

?

在分配上:做个实验

?

update T_ITDBA_1 set owner='2dfadafsfsafdsafdsf';

?

?

SQL> select segment_name,extent_id,block_id,bytes from dba_extents   where segment_name= 'T_ITDBA_1';
SEGMENT_NAME                    EXTENT_
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle创建用户及权限设置 下一篇Oracle学习(6):子查询

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: