处理Oracle数据库报错:ORA-30036: 无法按 8 扩展段 (在还原表空间 ‘UNDOTBS1’ 中)、扩展表空间解决

艺帆风顺 发布于 2025-04-02 14 次阅读


一、问题背景

程序执行出错,提示:

IPCrossConnection数据处理失败: java.sql.BatchUpdateException: ORA-30036: 无法按 8 扩展段 (在还原表空间 'UNDOTBS1' 中)

二、查询表空间信息

SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'UNDOTBS1';

    SELECT * FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'UNDOTBS1';
    FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS LOST_WRITE_PROTECT1 /opt/oracle/oradata/CSGZTDBDG/datafile/o1_mf_undotbs1_k98g46ro_.dbf 4 UNDOTBS1 34359721984 4194302 AVAILABLE 4 YES 34359721984 4194302 640 34358624256 4194168 ONLINE OFF2 /opt/oracle/oradata/CSGZTDBDG/datafile/o1_mf_undotbs1_01.dbf 201 UNDOTBS1 33554432000 4096000 AVAILABLE 201 YES 33554432000 4096000 64000 33553383424 4095872 ONLINE OFF3 /opt/oracle/oradata/CSGZTDBDG/datafile/newtemp_0920_.dbf 202 UNDOTBS1 209715200 25600 AVAILABLE 202 NO 0 0 0 208666624 25472 ONLINE OFF4 /opt/oracle/oradata/CSGZTDBDG/datafile/newtemp2_0920_.dbf 203 UNDOTBS1 209715200 25600 AVAILABLE 203 NO 0 0 0 208666624 25472 ONLINE OFF5 /opt/oracle/oradata/CSGZTDBDG/datafile/newtemp3_0920_.dbf 204 UNDOTBS1 209715200 25600 AVAILABLE 204 NO 0 0 0 208666624 25472 ONLINE OFF6 /data_mpathc/oradata/CSGZTDBDG/datafile/UNDOTBS1_152.dbf 216 UNDOTBS1 34359721984 4194302 AVAILABLE 216 YES 34359721984 4194302 262144 34358624256 4194168 ONLINE OFF7 /data_mpathc/oradata/CSGZTDBDG/datafile/UNDOTBS1_153.dbf 221 UNDOTBS1 32212254720 3932160 AVAILABLE 221 NO 0 0 0 32211206144 3932032 ONLINE OFF
      FILE_NAME: 数据文件的文件名,包含文件路径。FILE_ID: 数据文件在数据库中的唯一标识符。TABLESPACE_NAME: 表空间的名称。BYTES: 数据文件的大小,以字节为单位。BLOCKS: 数据文件包含的块数。一个块通常是8KB。STATUS: 数据文件的当前状态,这里显示为AVAILABLE,表示该数据文件可用。RELATIVE_FNO: 相对文件编号。AUTOEXTENSIBLE: 是否允许数据文件自动扩展,YES表示允许,NO表示不允许。MAXBYTES: 数据文件允许的最大大小,以字节为单位。MAXBLOCKS: 数据文件允许的最大块数。INCREMENT_BY: 当数据文件自动扩展时,每次扩展的大小,以块为单位。USER_BYTES: 表空间中用户数据使用的大小,以字节为单位。USER_BLOCKS: 表空间中用户数据使用的块数。ONLINE_STATUS: 表空间的当前状态,ONLINE表示表空间在线,可用。LOST_WRITE_PROTECT: 数据文件是否丢失了写入保护,OFF表示没有丢失写入保护。分析:
      UNDOTBS1表空间包含7个数据文件。数据文件大小各不相同,最大的两个文件分别是/opt/oracle/oradata/CSGZTDBDG/datafile/o1_mf_undotbs1_k98g46ro_.dbf和/data_mpathc/oradata/CSGZTDBDG/datafile/UNDOTBS1_152.dbf,大小均为34359721984字节。除了最大的两个文件,其他文件都设置为不可自动扩展 (AUTOEXTENSIBLE 为 NO)。所有数据文件都处于在线状态 (ONLINE_STATUS 为 ONLINE),并且没有丢失写入保护 (LOST_WRITE_PROTECT 为 OFF)。补充说明:
      UNDOTBS1 表空间通常用来存放回滚段,用于事务的回滚操作。newtemp开头的文件可能是临时表空间的组成部分,用于存放临时数据。数据库管理员可以根据实际情况调整表空间的大小、自动扩展设置等参数。

      二、增加表空间并检查

      ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '/data_mpathc/oradata/CSGZTDBDG/datafile/UNDOTBS1_157.dbf' SIZE 32768M ;

      增加表空间并自动扩展

      ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '/data_mpathc/oradata/CSGZTDBDG/datafile/UNDOTBS1_157.dbf' SIZE 32768M  AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED;

      查看是否存在表空间限制:

      SELECT * FROM DBA_TS_QUOTAS WHERE TABLESPACE_NAME = 'UNDOTBS1';

      若存在限制,则进行修改:

      ALTER TABLESPACE UNDOTBS1 MAXSIZE UNLIMITED;

      查看该表总表空间大小:

        ###单位以MB显示SELECT SUM(bytes) / 1024 / 1024 AS "Total Tablespace Size (MB)"FROM dba_data_filesWHERE tablespace_name = 'UNDOTBS1';
        ###单位以GB显示SELECT SUM(bytes) / 1024 / 1024 / 1024 AS "Total Tablespace Size (GB)"FROM dba_data_filesWHERE tablespace_name = 'UNDOTBS1';