ITPub博客

首页 > 数据库 > Oracle > data block extent and segment-02

data block extent and segment-02

原创 Oracle 作者:dotaddjj 时间:2011-09-17 01:10:53 0 删除 编辑

继续整理一下oracle体系中的data block exten and segment。

前几篇blog中提到了delete drop truncate和高水位线HWM关系。创建table或者index等对象会创建segment,分配extent,此时delete from table无法回收段内的数据扩展的,这些数据块会用于以后段内数据的插入更新操作。

扩展的回收:

oracle只是会对block更新,然后在local管理的tablespace对数据文件头部位图信息进行相应更新,数据文件的前两个块使用来记载数据文件头部信息,第三个块则是位图信息。

Alter system dump datafile 4 block min 1 max 3;

可以具体去dump数据文件数据块来查看其中特定数据块的信息。想了解原理的朋友可以多花点时间去深入下,当初对于这些抽象的东西确实花了时间 精力,但是后面又对理解更深入东东是必须的。

Delete:

当delete数据时,表段中的extent不会被回收。

Drop:

如果是drop表段,此时扩展 段都已经移除,释放的段内的block用于别的对象使用,同样会更新位图信息。

Truncate:

Truncate表段,截断表了,某种意义上truncate比drop更加难以恢复,truncate会新建一个段,分配一个minextent数据扩展用来和原来表的segment对应,删除原来的表段。

而且truncate table是无法flashback表级别闪回来恢复的,此时需要开启数据库级别闪回功能,利用闪回日志来恢复。

本地表空间管理:

当表段需求新的很大的extent时,字典管理tablespace会合并零散的extent来满足,不过在本地管理的表空间(locally managed tablespace)没有必要进行数据扩展合并,

位图中管理的是0 或者1的位图,0代表未分配,1代表已经分配使用的extent,所以可以间接地提到:碎片在本地管理表空间中已经不是问题(所有连续空间都可以被用于分配新数据扩展,而无需关心所用空间是如何被回收的)。

聚簇:

聚簇是包含多个聚簇下表的表段,移除表是不会回收聚簇的扩展的,当然truncate或者移除整个聚簇是可以的(哈希簇hash cluster除外)。

物化视图及其日志:

Oracle回收属于物化视图(materialized view)及其日志(materialized view log)的数据扩展的方式与表或簇相同。

索引段:

索引段的扩展也不会回收,只要索引存在,对应的索引段的扩展都不会被回收,当然移除表段,或者索引段是会回收扩展的。

临时段:

当sql的执行中涉及使用临时段,oracle会默认的创建一个临时段,并在不需要临时段时oracle自动回收此临时段到该临时段所在的表空间中(但是这个表空间是default tablespace还是temporary tablespace?,oracle concept中也没有具体提到,主要还是看临时段所在的tablespace吧,永久表空间也可以存储临时段,例如system表空间就能存储临时段。)

执行单一排序single sort,sql中需要临时排序时回分配一个临时段,排序完成后自动移除临时段,回收此数据扩展给此临时段的表空间。

但是对于多重排序,可能会使用临时表空间中转为排序而创建的排序段sort segment。

(每个实例中只会分配一个排序段,在排序操作使用后也不会被回收,继续供以后的多重排序使用)

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1055120/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662980