如何收回索引的空闲空间

zjkk1011 2013-12-31 04:09:47
10号数据文件只有一个段,是一个索引

select e.segment_name ,max(block_id + blocks - 1) HWM
from dba_extents e
where file_id = 10
group by e.segment_name ;

SEGMENT_NAME HWM
--------------------- ----------
ASC_MSG_PARA_MID_IDX 16498704

查询可释放的空间

select file# ,df.bytes/1024/1024 file_M,
free_M ,HWM ,
(df.bytes - HWM * df.BLOCK_SIZE)/1024/1024 release_M
from v$datafile df
left join (select file_id ,sum(bytes)/1024/1024 free_M
from dba_free_space
group by file_id) fs
on df.file# = fs.file_id
left join (select file_id ,max(block_id + blocks - 1) HWM
from dba_extents
group by file_id) e
on df.file# = e.file_id
where file# = 10
order by 1;

FILE# FILE_M FREE_M HWM RELEASE_M
---------- ---------- ---------- ---------- ----------
10 128924 27.69 16498704 27.88

对索引重建

alter index ASC_MSG_PARA_MID_IDX rebuild online;


但是重建后再次执行上面的查询,水位升高了,空闲空间也增加了
FILE# FILE_M FREE_M HWM RELEASE_M
---------- ---------- ---------- ---------- ----------
10 139924 128873 17907984 17.87

请问这是什么原因呢?我要怎样释放这个数据文件的空间呢?
...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxiaofeng1021 2014-03-03
  • 打赏
  • 举报
回复
原因就是 在创建表后,你在这个过程中有过增删改过表中的索引字段 update还有delete都会导致索引占用空间变大! 还有很多曾经使用的索引占用空间没有被使用 如果一直存在大量的update还有delete会导致索引不可用! 使用重建索引会提高空间利用率和空闲空间 索引空间只能够重建索引来提高利用空间的效率
******************* 实践教学 ******************* 计算机与通信学院 2010年秋季学期 操作系统 课程设计 题 目:磁盘空间管理模拟实验 专业班级: 08级计算机1班 姓 名: 学 号: 指导教师: ****** 成 绩: 目 录 摘 要 3 前 言 4 正 文 5 1. 实验目的 5 2. 设计思想 5 3. 实验结构图 6 4. 各模块的伪码算法 7 5. 测试分析 10 6. 测试结果 10 7. 源程序 14 总 结 20 参考文献 21 致 谢 22 摘 要 要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。存储介 质上某个文件不再需要时,又要收回它所占的存储空间作为空闲块。用户作业在执行期 间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们 分配存储空间收回它所占的存储空间。如何实现存储空间的分配和收回,取决于对空 闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张 位示图(简称位图)来指示磁盘存储空间的使用情况),空闲块链接法(在UNIX操作系 统中,把磁盘存储空间空闲块成组链接)。 关键词:磁盘的分配和回收管理;位示图;成组链接。 前 言 通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问 题的能力。学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的 物理地址过程。学会用模拟UNIX系统的成组链接法实现磁盘空间的管理。了解UNIX的命 令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编 译C程序,学会利用gcc、gdb编译、调试C程序。希望通过本次设计过程可以提高自己的 分析问题的能力和实际动手的能力,将学到的知识用于实践中。 正 文 实验目的 磁盘格式化时,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫 做块)。这些空间就是用来存放用户文件的。当用户的文件不再需要时,就应该删除。把 一个文件存放到磁盘上时,可以组织成连续文件,链接文件,索引文件等。因此,磁盘空间 的分配方法也有两种,一种是连续空间的分配;一种是不连续空间的分配(又叫动态分配) 。如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。通过本实验,使学 生对磁盘空间的分配与回收有一个较深入的理解。 设计思想 位示图法: 一个简单的管理方法是用一张位示图(简称位图)来指示磁盘存储空间的使用情况。 一个盘组的分块确定后,根据分配的总块数决定位图由多少个字组成,位图中的每一位与 盘组分块一一对应。位示图是一张可以反映磁盘空间是否被占有的模拟图,用一个二维 数组表示磁盘的空间,数组内每一个元素表示磁盘内相应的分块,数组元素为"1"表示该 块已被占,"0"表示该块为空。数组元素位置与磁盘分块一一对应,即可描述出磁盘空间 的利用情况。 成组链接法: 首先定义磁盘分配数组并初始化,9个一维数组分别表示9个空闲块,程序运行时,先 将专用块A〔0〕复制到内存中,然后进行功能选择,分配时,查MA,从中找出空闲块号 ,当一组的空闲块只剩第一块时,应把该块中指出的下一组的空闲块数和块号复制到专 用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块内容(下一组 链接情况)复制到内存,再为申请者分配。 回收时,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组 不满规定块数时,将归还块登记入该组,若当前组已满,则另建一新组,这时归还块作 为新一组的第一块,应把内存中登记的一组链接情况MA复制到归还块中,然后在MA这重 新登记一个新组。显示分组情况。系统初始化时先将专用块内容读入 内存 ,当有申请空闲块要求时,就直接在内存专用块中找到哪些块是空闲的,每分配一块后 把空闲块数减 1。但要把一组中第一块分配出去之前,可以先把登记在该块中的下一组的块号保存在专 用块中(此时 ,原专用块中的信息巳经无用了 ,因它指示的一组空闲块都已分配掉)。当中文组空闲块分配完后,则将下一组内容读入 内存专用块中,以便继续分配时查找。 实验结构图 各模块的伪码算法 1) 对位示图法 定义分配函数: void assign() { unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid; for(i=0 ,k=0;i<5;i++) {q=size[i] ; j=0; while(1) { j++ ; if((q%2)==0) { if(j==1) size[i]+=1; else {for(m=1;m

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧