问题描述
开发环境中做测试时,发现某个tablespace空间不足,再根据下面的sql定位到是其中一个LOBSEGMENT数据库对象占很大的空间(在我们系统中对应的字段类型是BLOB),故要做清理操作,以减少空间占有。
注意,下面sql中的表空间名字,用ZZZ代替,需根据实际情况替换。
SELECT OWNER, TABLESPACE_NAME, SEGMENT_NAME, SEGMENT_TYPE, PARTITION_NAME, ROUND(BYTES/(1024*1024),2) SIZE_MB
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION',
'INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION', 'TEMPORARY', 'LOBINDEX', 'LOBSEGMENT', 'LOB PARTITION')
AND TABLESPACE_NAME = 'ZZZ'
ORDER BY BYTES DESC;
注意,SEGMENT_NAME, SEGMENT_TYPE这两个字段。
SEGMENT_TYPE = LOBSEGMENT
LOBSEGMENT的系统命名规则是
SYS_LOB(10 digit object_id)C(5 digit col#)$$
解决步骤
利用下面的2条sql查出该对象的相关信息:
注意下面值的不同;
select object_name,status from dba_objects where object_id='xxxxxxxxxx';
## object_id 这里写LOBSEGMENT名字里SYS_LOB后的10位数字。
SELECT owner, table_name, column_name
FROM dba_lobs
WHERE segment_name = 'SYS_LOB<<identifier>>$$';
确定好该LOBSEGMENT对象来自于哪个table的哪个字段,然后做一个清理操作。
- 将该表导出
- 删除表,删除表要使用truncate,truncate table xxxxx;
- 再导入,没有释放空间,则需要情况一下回收站,执行 purge table xxxx;
或者清空一下回收站
purge recyclebin;
相关知识
LOB类型
oracle中内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。
CLOB 数据类型
它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符
NCLOB 数据类型
它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。
BLOB 数据类型
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。
BFILE 数据类型
二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155772.html