100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)

ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)

时间:2023-02-10 21:44:20

相关推荐

ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)

前言

今天某项目的一个Repository的正常CRUD操作,发现报错信息ORA-1653:unable to extend table by 1024 in tablespace,什么意思呢,就是表空间已满,无法扩展.

问题分析

USERS表空间是默认用户表空间,在创建一个用户并没有指定此用户使用表空间时,该用户所有信息都会放入到users表空间中,如果有指定则一般是用户名相关的表空.

--查看表空间文件select file_name t from dba_data_files t where t.tablespace_name='xxxx';--查看表记录大小select t.tablespace_name,t.TABLE_NAME,t.NUM_ROWS from all_tables t where t.tablespace_name='xxxx' order by num_rows desc;--查看表空间大小select t.file_name,t.tablespace_name,t.bytes/1024/1024 "bytes MB",t.maxbytes/1024/1024 "maxbytes MB" from t.dba_data_files where tablespace_name='xxx';

查询使用xxx表空间的表,按行级降序排序,一般多个表使用相同表空间,存在大量数据导致USER表占满,像刚才查看的这个问题的表,超过一千万条记录.

解决方案

扩展表空间:alter database datafile '/oracle/oradata/dba/users01.dbf' resize 30G;扩展到最大30G文件无法继续扩展,可增加数据文件:alter tablespace users add datafile 'users02.dbf' size 1024m autoextend on next 1024m maxsize 30G;truncate删除无用表释放空间,假如未释放,对TEST表进行收缩shrink,执行下面三个语句:

-- 启用行迁移:alter table TEST enable row movement;-- shrink表test:alter TABLE TEST shrink SPACE;-- 关闭行迁移:alter table TEST DISABLE row movement;

Oracle “高水位”

数据被删除后(无论是 delete 还是 truncate table),数据文件大小不一定会缩小, 是Oracle"高水位"所致,想要降低数据文件大小需降低高水位的正确做法是先降低HWM,再确定实际占有大小,再resize数据文件,执行如下4个语句:

查询表空间文件编号:select file#, name from v$datafile;根据文件 ID 查询这个数据文件最大数据块(data block)的编号:select max(block_id) from dba_extents where file_id=4;计算该表空间实际占用的空间,先查询数据块大小,默认是8192:select value from v$parameter where name='db_block_size'计算实际占用磁盘大小:select 65673*8/1024 from dual;把数据文件大小resize到比实际占用磁盘大小大一些就行了,这样数据文件大小就变小了,节约空间 :alter database datafile '/oracle/oradata/dba/users01.dbf' resize 600m;需要使用的表,修改表空间alter table xxx move tablespace new_tablespace,建表时需养成习惯,指定好表空间.

更多详情可以参考 <<Oracle官方Changing Datafile Size>>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。