解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展

向Oracle 11g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误:
ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展。

查看表空间,发现表空间大小已达到32G,但创建表空间时已设置了无限扩展(初始空间为20G),磁盘空间没满,说明表空间无法进行自动扩展了。

sys 登陆 oracle

查看Oracle的 DB_BLOCK_SIZE

SQL> select value from v$parameter where name ='db_block_size';
VALUE
---------------------------------------------------------------
8192

本机数据库的数据块大小为8K,算出本机Oracle 单个表空间数据文件的最大值为:
4194304 * 8/1024 = 32768M (32G);

所以既使创建表空间时设置了 autoextend on maxsize unlimited,其最大空间也是不会超过32G。

注:
1、表空间数据文件容量与DB_BLOCK_SIZE有关,在初始建库时,DB_BLOCK_SIZE要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小;
2、ORACLE的物理文件最大只允许4194304(2^22)个数据块;

#查看表空间
select * from   dba_tablespaces;

#查看表空间是否自动增
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

#表空间文件位置
select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;  

列出所有表空间的使用情况:

SELECT a.tablespace_name "表空间名称", 

total / (1024 * 1024) "表空间大小(M)", 

free / (1024 * 1024) "表空间剩余大小(M)", 

(total - free) / (1024 * 1024 ) "表空间使用大小(M)", 

total / (1024 * 1024 * 1024) "表空间大小(G)", 

free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 

(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 

round((total - free) / total, 4) * 100 "使用率 %" 

FROM (SELECT tablespace_name, SUM(bytes) free 

FROM dba_free_space 

GROUP BY tablespace_name) a, 

(SELECT tablespace_name, SUM(bytes) total 

FROM dba_data_files 

GROUP BY tablespace_name) b 

WHERE a.tablespace_name = b.tablespace_name ;

解决方法

第一步、查看表空间是否自动增长

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;--查看表空间是否自动增长

 

第二步、如果报错的表空间没有开启自动增加 ,则开启

ALTER DATABASE DATAFILE '/ora11g/data/oradata/lfzldb/LFZL.DBF' AUTOEXTEND ON NEXT 1024M ;--每次自动增长1024M

补充当自动增长表空间也无效的情况

当表空间为最大值,100%没办法自增的时候,这时可以考虑新增一个数据文件

 Alter tablespace 表空间名 add datafile '数据文件存放的路径' size 数据文件大小M autoextend on next 每次自增长大小M Maxsize UNLIMITED 
--例子
 Alter tablespace LFZL add datafile '/ora11g/data/oradata/lfzldb/LFZL2.DBF' size 10240M autoextend on next 1024M Maxsize UNLIMITED

添加成功后,查看情况

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值