免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 14980 | 回复: 30
打印 上一主题 下一主题

挑战oracle DBA 高手,oracle表空间 释放 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-15 11:16 |只看该作者 |倒序浏览
问题如下:
    在oracle 9i数据库中有一photo表,该表占用了很大的硬盘物理空间假设为100GB,假设对应的这张表的表空间就占用了100GB,现在把photo表中的50%的记录删除采用delete where的方式,按理来说现在腾出了近50GB的表空间出来。delete 删除后的空间 在oracle中这些空间被标记为unused block的块,也就是说photo这张表对对应的表空间还是占用了100GB,
    在再次插入数据到photo中这张表的时候,表空间自动增加,并没有去利用unused block的这些数据块,那么请问一下应该如何回收这些unused block块,我希望该表占用的表空间减少下来的同时,占用硬盘物理空间的大小也减少下来,用df查看... ...

注意:
   IBM Unix ,oracle 9i,
   表记录比较大,用imp/exp的方式去减少表空间是不合实际的。在表中有用到自增的(表空间->表空间名称->存储,选中了数据文件已满后自动扩展,增量5GB。)

[ 本帖最后由 wayjam 于 2006-6-15 12:37 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-15 12:36 |只看该作者
不能使用exp/imp 或者 备份后用truncate的方式去释放表空间。

招聘 : Linux运维
论坛徽章:
0
3 [报告]
发表于 2006-06-15 12:39 |只看该作者
move ?

论坛徽章:
0
4 [报告]
发表于 2006-06-15 14:25 |只看该作者
move应该可以释放。

论坛徽章:
0
5 [报告]
发表于 2006-06-15 23:59 |只看该作者
libin_ftsafe   (子陌红尘)   回复于 2005-02-18 13:38:14  得分 10
用:   
  alter   table   tb_name   move   tablespace   tbs_name;   
  来对表做空间迁移时只能移动非lob字段以外的数据,而如果我们要同时移动lob相关字段的数据,我们就必需用如下的含有特殊参数据的文句来完成,它就是:     
  alter   table   tb_name   move   tablespace   tbs_name   lob(col_lob1,col_lob2)   store   as(tablesapce   tbs_name);

缺省情况下,导入试图在与导出相同的表空间中创建对象。如果用户不具有那个表空间的权限,或者那个表空间不存在时,Oracle在用户帐户的缺省表空间中创建数据库对象。这些特性可以用于使用导出与导入在表空间之间移动数据库对象。要为USER_A将TABLESPACE_A的所有对象移动到TABLESPACE_B,应遵循以下步骤:   
   
  1   为USER_A导出TABLESPACE_A中的所有对象。   
   
  2   执行REVOKE   UNLIMITED   TABLESPACE   ON   TABLESPACE_A   FROM   USER_A;以收回任何授予用户帐户的无限制表空间权限。   
   
  3   执行ALTER   USER   USER_A   QUOTA   0   ON   TABLESPACE_A;以使USER_A帐户不能在TABLESPACE_A上创建任何对象。   
   
  4   删除TABLESPACE_A中USER_A拥有的所有对象。   
   
  5   执行ALTER   USER   USER_A   DEFAULT   TABLESPACE   TABLESPACE_B;以使TABLESPACE_B成为USER_A用户帐户的缺省表空间。Oracle试图将对象导入TABLESPACE_A,因为这些对象是从TABLESPACE_A导出的。注意用户不具有TABLESPACE_A上的配额。然后将查看用户的缺省表空间。在Oracle可以将数据导入TABLESPACE_B之前,必须给予USER_A用户该表空间上足够大的配额,如下步骤所示。   
   
  6   执行ALTER   USER   USER_A   QUOTA   UNLIMITED   ON   TABLESPACE_B;   
   
  7   导入被导出的数据库对象。缺省情况下,导入工具试图将它们导入到TABLESPACE_A中,然而,因为用户不具有这个表空间的配额,所以所有的对象将被创建在USER_A的缺省表空间TABLESPACE_B中。

论坛徽章:
0
6 [报告]
发表于 2006-06-16 00:00 |只看该作者
呵呵, 以上的内容我没有验证过, 有那位有相关的经历的朋友,给出好一点点解决方式。

论坛徽章:
0
7 [报告]
发表于 2006-06-16 00:03 |只看该作者
只有一个users表空间, 这个空间占用1000GB,其它没有空间好让你们去MOVE了, 真不好意, 看起来这个也不太现实了。

招聘 : Linux运维
论坛徽章:
0
8 [报告]
发表于 2006-06-16 10:30 |只看该作者
是不是还要限制 不能敲键盘阿!

论坛徽章:
0
9 [报告]
发表于 2006-06-16 10:44 |只看该作者
做move和exp/imp实际上差不多,而且exp/imp更简单些。
其他方法:
alter table ??? deallocate unused;
Use the deallocate_unused_clause to explicitly deallocate unused space at the end of the table, partition or subpartition, overflow data segment, LOB data segment, or LOB index and make the space available for other segments in the tablespace.
这一方法只能作用于table的最后,也就是说table中间部分的ununsed的表空间是不能被释放出来的。

所以,通过一定方法,表空间是有可能被释放的;但OS空间的释放,只可以通过下面的方法:
1.exp
2.drop tablespace
3.create tablespace
4.imp

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2006-06-16 16:53 |只看该作者
反正在实际使用中碰到这样的问题,只要条件许可,就逻辑导出重建后再导入,挺安全的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP