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

向Oracle 19g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误:

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

查看表空间,发现表空间大小已达到32G,表空间无法进行自动扩展了。(初始空间为20G)


  1. 查看Oracle的 DB_BLOCK_SIZE

    sql 复制代码
    # sys 登陆 oracle
    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要根据实际需要,设置为 4K、8K、16K、32K、64K等几种大小;
    2. ORACLE的物理文件最大只允许4194304(2^22)个数据块;
  2. 查看表空间

    bash 复制代码
    # 查看表空间
    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;  

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

    bash 复制代码
    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 ;

解决

  1. 查看表空间是否自动增长

    sql 复制代码
    SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;-- 查看表空间是否自动增长
  2. 如果报错的表空间没有开启自动增加 ,则开启

    sql 复制代码
    ALTER DATABASE DATAFILE '/ora11g/data/oradata/lfzldb/LFZL.DBF' AUTOEXTEND ON NEXT 1024M ;	-- 每次自动增长1024M
  3. 当自动增长表空间也无效的情况

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

    sql 复制代码
     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

    添加成功后,查看情况

相关推荐
数据库急诊室_阿哲5 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋6 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子7 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T8 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡8 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata8 小时前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__8 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
zhanghaha13148 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
韩曙亮8 小时前
【错误记录】安卓 adb 调试 5037 端口占用排查 ( adb 的三层结构 | 找出本机占用 5037 的进程 )
android·数据库·adb·安卓·错误记录
瑞雪兆丰年兮9 小时前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web