• Oracle 表数据段收缩示例


    Oracle 表数据段收缩示例

    创建测试表
    conn ahern/ahern
    create table tab_test(code varchar2(20));

    插入10000条数据到表中
    declare
      intsize number;
    begin
      for i in 1 .. 10000 loop
        insert into tab_test (code) values ('abcd');
        commit;
      end loop;
    end;
    /

    查看该表占用的段空间大小
    SQL> col segment_name for a20
    SQL> select segment_name,bytes from user_segments where segment_name='TAB_TEST';

    SEGMENT_NAME              BYTES
    -------------------- ----------
    TAB_TEST                 196608

    删除表中数据
    SQL> delete from tab_test;

    已删除 10000 行。

    SQL> commit;

    提交完成。

    再次查看该表占用的段空间大小,发现删除数据后段空间并没有得到释放
    SQL> select segment_name,bytes from user_segments where segment_name='TAB_TEST';

    SEGMENT_NAME              BYTES
    -------------------- ----------
    TAB_TEST                 196608

    开启表的行移动
    SQL> alter table tab_test enable row movement;

    表已更改。

    收缩段空间
    SQL> alter table tab_test shrink space;

    表已更改。

    再次查看该表占用的段空间大小,空间已经释放
    SQL> select segment_name,bytes from user_segments where segment_name='TAB_TEST';

    SEGMENT_NAME              BYTES
    -------------------- ----------
    TAB_TEST                  65536
    注意:从user_segments里面查询到的是段空间已经被释放,但是从 user_tables 或者 dba_tables 数据字典查询你会发现这里记录并未及时更新,因为需要等到下次数据库自动维护统计信息后才会更新,手动收集统计信息或者做表分析也可以更新里面的记录。
    alter table table_name shrink compact/space; compact 将块中的数据放在一起,但不释放空闲空间,高水位也不会下降,支持DML操作。space 释放空闲空间,高水位下降,会锁定表不支持其它DML操作,对数据库性能影响比较大。

     

  • 相关阅读:
    Linux常用锁
    前端--第一个前端程序
    Python的比较运算符查询表
    Linux查找命令
    【FastCAE源码阅读7】视图方向切换按钮实现原理
    关于埋点上报
    新电脑验机步骤(1)
    openwrt 时区设置无效问题
    http协议简介:http各个版本的区别,http与https的区别,http与websocket的区别
    数据库简答带答案
  • 原文地址:https://blog.csdn.net/baidu_17517885/article/details/139446443