首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回收未使用的oracle lob空间“非lob数据”

回收未使用的oracle lob空间“非lob数据”
EN

Stack Overflow用户
提问于 2014-05-13 20:03:09
回答 2查看 4.2K关注 0票数 0

朋友..。

DB: Oracle 11gR2

OS: Linux

我有这个lob段(基本文件,非附件),它占用了100 GB的存储空间,我查询了"dba_extents",dbms_lob.getlength(lob_col)并找出了

代码语言:javascript
复制
Total storage occupied: 100 GB

Lob Data: 70 GB

non Lob Data (storage - lob data): 30 GB

根据oracle 386341.1的说法,非lob数据可以是空闲空间和/或撤消空间,因为lob段存储lob段空间下的撤消数据,因此很难找到可用的空闲空间或仅仅是撤消段。

问题:

  1. 如何准确地找到当我们使用移动表空间命令收缩表时,可以回收多少空闲空间?
  2. 我是否可以假设“非LOB数据”作为当前的空闲空间,一旦段被缩小,将恢复相同的空间?

如果开发人员清除某个表lob并执行它将从数据库中请求更多的撤销(最终将成为免费的),那么这个回收空间的练习将不值得。

代码语言:javascript
复制
output of dbms_space.unused_space
=================================
total block : 11900000
total bytes : 102208345855
unused blocks: 0
unused bytes : 0
last used extent file id : 345
last used extent block id: 856800
last used block: 8192

基本上,我的目标是从lob列中回收所有可用的空间。

EN

回答 2

Stack Overflow用户

发布于 2014-05-14 06:18:16

在更改表之前,请从dba_segments中检查表的大小,并在执行以下语法后检查表的大小,以便知道您已回收多少空间。

用于回收LOB空间的语法是:

代码语言:javascript
复制
SQL> ALTER TABLE <table_name> MODIFY LOB (<lob_column>) (SHRINK SPACE);

这也将帮助您收回空间。

代码语言:javascript
复制
ALTER TABLE test MOVE LOB(image) STORE AS ( TABLESPACE lob_dat1 ) 
/

85.shtml

票数 0
EN

Stack Overflow用户

发布于 2015-06-23 10:39:26

对于将来的参考,.Another在这种情况下可以做的事情是,我们可以缩小LOB的相应表。

首先,通过运行下面的查询,我们可以找到特定LOB的相应表

代码语言:javascript
复制
  select  a.table_name,  a.segment_name , b.bytes/1024/1024 from dba_lobs a, dba_segments b where a.segment_name = b.segment_name and a.owner = b.owner and b.segment_name=<LOB_NAME>;

然后,使用上面查询中的表名,我们可以使用

代码语言:javascript
复制
Alter table <TABLE_NAME> enable row movement;
Alter table <TABLE_NAME> shrink space cascade;
Alter table <TABLE_NAME> disable row movement;

这将缩小表和表的相应LOB,以收回未使用的空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23640562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档