报错信息:
ORA-01691: unable to extend lob segment YUNYAO.SYS_LOB0000152921C00013$$ by 1024 in tablespace USERS
针对此问题查了一些文章,排查到原因是表空间“USERS”的数据文件满了,到达最大值。
可能会出现的原因如下:
1、达到了数据文件的设定大小,未设置自动增长
2、数据文件设置了自动增长,但已达到单个数据文件最大支持的32G
3、磁盘物理存储空间不足
这里我排查到的问题原因是2,我这里会介绍1、2原因的解决办法,排查步骤如下:
查看数据文件地址
SELECT
a.tablespace_name "tbs name", b.NAME "file path"
FROM
dba_tablespaces a, v$datafile b, v$tablespace c
WHERE a.tablespace_name = c.NAME
AND c.ts# = b.ts#
通过地址找到对应文件,可以看到文件已达最大值(users03.dbf是我解决之后增加的文件)
还有另一种方式,查看表空间使用情况
--查询库中所有表空间使用情况
SELECT a.tablespace_name, --"表空间名称",
a.bytes / 1024 / 1024, --"表空间大小(M)",
(a.bytes - b.bytes) / 1024 / 1024, --"已使用空间(M)",
b.bytes / 1024 / 1024, --"空闲空间(M)",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) --"使用比"
FROM (SELECT tablespace_name, sum(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
FROM dba_free_space
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC
可以看到表空间的使用比,及空闲空间(此图为解决问题后的截图,解决之前使用比已超过99% )
如果问题原因是1,那么执行如下语句(这里是模仿我的情况写的例子,需将变量改为实际值)
--修改表空间大小
--alter database datafile '数据文件路径' resize 需扩展大小(单位M);
alter database datafile '/u01/app/oracle/oradata/ORCL/users02.dbf' resize 4096M
--修改表空间为自动增长
--alter database datafile '数据文件路径' autoextend on next 500M maxsize unlimited
alter database datafile '/u01/app/oracle/oradata/ORCL/users02.dbf' autoextend on next 500M maxsize unlimited
如果问题是2,那么执行如下语句,给表空间USERS增加数据文件user03.dbf,并设置默认大小为4096M,自动增长每次扩展500M,无上限(当然物理上限还是有的,32G)
ALTER TABLESPACE USERS ADD DATAFILE '/u01/app/oracle/oradata/ORCL/users03.dbf' SIZE 4096M AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED