zoukankan      html  css  js  c++  java
  • oracle extent 区(转)

    在Oracle的逻辑存储中,表空间由各种类型的段组成,而段则由区组成,区是段分配存储的单位。当建立一个表段时,Oracle为该段分配初始区,如果之后由于数据的插入,初始区装满后,将继续分配下一个区,区的大小在表段或者更高一级的存储参数中指定,下面通过实验的方式把分配的过程展示出来。 

          1. 在scott方案下建立初始表段

              SQL> conn scott/tiger
              已连接。

              SQL> create table t1
                   2  as
                   3  select * from dept where 1=3;

              表已创建。

          2. 查看段的初始区分配情况     

              SQL> select segment_name,extent_id,bytes from user_extents
                   2  where segment_name='T1';

              SEGMENT_NAME          EXTENT_ID      BYTES
              --------------------            ----------       ----------
               T1                                     0               65536

              可以看到段T1的初始区ID为0,大小为 65536 bytes;

          3. 向表段中插入数据,使Oracle为该段分配更多的区

              

              SQL> begin
                   2  insert into t1 select * from dept;
                   3  for i in 1..10 loop
                   4  insert into t1 select * from t1;
                   5  commit;
                   6  end loop;
                   7  end;
                   8  /

              PL/SQL 过程已成功完成。

              SQL> select segment_name,extent_id,bytes from user_extents
                   2  where segment_name='T1';

              SEGMENT_NAME          EXTENT_ID      BYTES
              --------------------          ----------        ----------
                         T1                            0            65536
                         T1                            1            65536
                         T1                            2            65536

              此时看到随着数据的插入,T1段动态扩展为三个区;

          4. 回收T1段的区

              

              SQL> delete t1;

              已删除4096行。

              

              SQL> select segment_name,extent_id,bytes from user_extents
                   2  where segment_name='T1';

              SEGMENT_NAME          EXTENT_ID      BYTES
              --------------------            ----------        ----------
                        T1                            0               65536
                        T1                            1               65536
                        T1                            2               65536

              此时表段的数据已经删除,但所有extent依然健在;

              SQL> truncate table t1;

              表被截断。

              SQL> select segment_name,extent_id,bytes from user_extents
                   2  where segment_name='T1';

              SEGMENT_NAME          EXTENT_ID      BYTES
               --------------------          ----------        ----------
                         T1                            0             65536

              截断表后,表的空间也同时回收,这与delete语句要区分开来.

  • 相关阅读:
    记一次 .NET 某智能服装智造系统 内存泄漏分析
    记一次 .NET 某化妆品 webapi 卡死分析
    记一次 .NET 某公交卡扣费系统 程序卡死分析
    去掉烦人的:要恢复页面吗?Chrome未正确关闭
    C#Excel转图片代码
    ArcEngine实现pagelayout中文本元素的属性对话框
    arcgis 模型版本问题最大
    Arcengine开发所遇错误解决方案(持续更新)
    ArcEngine IPageLayout 添加经纬网和公里网
    Arcengine的复制粘贴
  • 原文地址:https://www.cnblogs.com/javahuang/p/2953568.html
Copyright © 2011-2022 走看看