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语句要区分开来.

  • 相关阅读:
    Android Studio连接真机
    day 4 __all__ 包 __init__.py
    day1 创建X00001文件1K
    day 3 模块
    day 2 异常传递 ,抛出
    day 1 异常基本功能
    day 7 __new___
    day 6 汽车4S店铺
    day 5 多态 类 静态
    day 4 继承
  • 原文地址:https://www.cnblogs.com/javahuang/p/2953568.html
Copyright © 2011-2022 走看看