问题现象
clob段异常增长,导致磁盘空间满,应用无法使用数据库。
问题风险及影响
lob段空间未复用,lob段空间扩张很大,影响磁盘占用合理分配。
空间不够,插入报错,影响业务。
问题影响的版本
所有版本
问题发生原因
lob类型删除后,空间不会立即复用,需要等待UNDO_RETENTION时间后,空间才会复用。
普通的数据类型表空间段,普通数据被删后插入到undo空间,删除后就可以复用。
lob数据因为太大,被删除后,lob自己就是一份undo数据,不插入到undo空间,所以需要保留undo_retention时间后,才能复用。
解决方式及规避方法
1、把tablespace的maxsize小于磁盘空间,按具体业务表大小配置,
2、undo_retention,如果业务插入数据频繁,且插入数据量多,建议配置小一些,按具体业务插入数据量。
3、如果插入数据量多,磁盘空间建议配置大些
问题分析和处理过程
表空间不够的表现
创建一个maxsize为3G的表空间,mydata,在该表空间创建表tmp1,该表有3个clob字段,如上。
做如下操作:
1、往tmp1表插入数据
2、delete table tmp1;
3、查看dba_segments视图mydata中的表空间段。
循环做上面3个操作,最后报错YAS-02007 no free extent in tablespace MYDATA,如下图所示:
磁盘空间不够的表现
tablespace不做限制,磁盘空间满了之后,插入数据的表现
create tablespace mydata datafile ‘?/dbfiles/mydata’ size 20G autoextend on next 128M maxsize unlimited databucket ‘?/local_fs/mydata’;
如下,数据库变成abnormal状态,插入报错返回。
解决方式,删掉一些日志或者不用的文档,释放空间,则能恢复。