问题现象

clob段异常增长,导致磁盘空间满,应用无法使用数据库。

问题风险及影响

lob段空间未复用,lob段空间扩张很大,影响磁盘占用合理分配。

空间不够,插入报错,影响业务。

问题影响的版本

所有版本

问题发生原因

lob类型删除后,空间不会立即复用,需要等待UNDO\_RETENTION时间后,空间才会复用。

普通的数据类型表空间段,普通数据被删后插入到undo空间,删除后就可以复用。

lob数据因为太大,被删除后,lob自己就是一份undo数据,不插入到undo空间,所以需要保留undo\_retention时间后,才能复用。

解决方式及规避方法

1、把tablespace的maxsize小于磁盘空间,按具体业务表大小配置,

2、undo\_retention,如果业务插入数据频繁,且插入数据量多,建议配置小一些,按具体业务插入数据量。

3、如果插入数据量多,磁盘空间建议配置大些

问题分析和处理过程

表空间不够的表现

【YashanDB知识库】表数据量不多,lob数据段有大量空间,插入数据报错_复用

创建一个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,如下图所示:

【YashanDB知识库】表数据量不多,lob数据段有大量空间,插入数据报错_插入数据_02

磁盘空间不够的表现

tablespace不做限制,磁盘空间满了之后,插入数据的表现

create tablespace mydata datafile '?/dbfiles/mydata' size 20G autoextend on next 128M maxsize unlimited databucket '?/local\_fs/mydata';

如下,数据库变成abnormal状态,插入报错返回。

【YashanDB知识库】表数据量不多,lob数据段有大量空间,插入数据报错_崖山数据库_03

【YashanDB知识库】表数据量不多,lob数据段有大量空间,插入数据报错_崖山数据库_04

解决方式,删掉一些日志或者不用的文档,释放空间,则能恢复。