向Oracle 11g数据库中批量插入数据,当插入4千万条数据后,报出如下错误:
ORA-01653: 表xx无法通过 8192 (在表空间 USERS 中) 扩展。
这个表空间是设置了自增的。导致这个问题的原因是创建数据库时,数据库块大小使用了默认的8kb,在oracle中表文件的容量DB_BLOCK_SIZE的关系是 maxsize=DB_BLOCK_SIZE×4194304;4194304=4G。结果刚好是32G,也就是说,数据块大小在8kb时,单文件的最大尺寸是32G,所以即使设置了自增,也最多只能存32G数据。
解决办法:
1、增加数据文件:alter tablespace xxx add datafile '/XX/XXX/XXX/XXx.dbf' size xxxxM,AUTOEXTEND ON NEXT xxxxM MAXSIZE UNLIMITED; 该办法可临时解决该问题。
2、使用大文件。oracle10g之后支持大文件。但是大文件只有一个数据文件,创建后不能通过增加数据文件的方式扩展,其他特性请自行查阅资料。
3、数据库重建,EXP导出数据,重建数据库,安装时选择合适的数据块大小。
最根本的应该是在创建数据库时就应该考虑到数据量的问题,选择好合适的数据块,但因为这个是测试数据库,所以没有考虑周全。我是临时增加了一个数据文件来解决的。
----查看表空间是否自增 select file_name,tablespace_name,autoextensible from dba_data_files; ----新增一个数据文件 alter tablespace USERS add datafile 'F:APPDWJORADATAORCLUSERS02.DBF' size 20480M autoextend on next 1024M Maxsize unlimited;
参考资料: 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展_D的博客-CSDN博客