ORA-01654错误:表空间满了,插入失败

1、查看表空间使用情况,是否是满了;

执行下边的sql语句

select a.tablespace_name,
       a.bytes / 1024 / 1024 "sum MB",
       (a.bytes - b.bytes) / 1024 / 1024 "used MB",
       b.bytes / 1024 / 1024 "free MB",
       round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "used%"
  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多,可见表空间已经满了

2、給表空间扩容。扩容有两种思路:一是直接扩大原表空间大小,二是 给该表空间增加额外的空间

查看表空间的路径,执行下边的sql

select tablespace_name,
       file_id,
       file_name,
       round(bytes / (1024 * 1024), 0) total_space
  from sys.dba_data_files
 order by tablespace_name

一、第一种方式:直接扩大原表空间大小

 

alter database datafile '/home/app/oracle/oradata/orcl/qhtj.dbf' resize 40000m

或者将原来表空间改为自增

--无限制,但是oracle最大一般是32g
alter database datafile '/home/app/oracle/oradata/orcl/qhtj.dbf' autoextend on next 10M maxsize unlimited;

二:第二种方法: 给该表空间增加额外的空间

增加32g有时候报下边的错误

 

查询ORACLE数据块大小

SQL>show parameter db_block_size

 db_block_size Maximum data file size

2kb 8Gb-2kb
4kb 16Gb-4kb
8kb 32Gb-8kb
16kb 64Gb-16kb
32kb 128Gb-32kb

这个限制是由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1个数据块。

由现象可以看出数据库的db_block_size是8K的,因此创建的每个表空间的大小不能超过32G,否则就会出现以上错误。

将表空间大小改为32G以下即可.

ALTER TABLESPACE TSP_EMR ADD DATAFILE '/oracle_data/orcl/TSP_EMR3.dbf' SIZE  30G AUTOEXTEND ON NEXT 200M MAXSIZE unlimited

这样就会创建成功了,如果数据库的数据量增加很快,可以增加多个这样的表空间,不然表空间满了就得手动想着去扩建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值