【问题标题】:ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS'ORA-30036: 无法在撤消表空间 'UNDOTBS' 中将段扩展 8
【发布时间】:2016-12-01 14:07:50
【问题描述】:

我正在运行具有以下 PL/SQL 块的 cron 作业:

declare  
  begin  
--insert into DB_LOGS_TEMP table from DB_LOGS table  
INSERT INTO DB_LOGS_TEMP SELECT * FROM DB_LOGS WHERE DB_LOG_ID NOT IN(SELECT DB_LOG_ID from DB_LOGS_TEMP );  
--keep the lat 10 records and delete other records  
DELETE DB_LOGS where rowid  in (  
select rid from (  
select t.rowid rid,  
       row_number() over(partition by T.DB_LOG_ID order by T.TIMESTAMP desc) as rn  
from DB_LOGS t)  
where rn > 10);  
end;  

DB_LOGS 表有 10247302 行。当 cron 作业运行时,它会抛出 ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS' 的错误。增加 tablespce 是这个问题的唯一解决方案吗?如何做到这一点? UNDOTBS 有 524288000 个字节。

【问题讨论】:

  • 您可能在没有提交的情况下删除了许多记录。也许您应该更频繁地循环查看发布提交的表。你可以这样做还是必须在同一个交易中?

标签: oracle cron segment tablespace


【解决方案1】:

它对我有用,同时增加了表空间并启用了自动扩展。

 ALTER DATABASE DATAFILE '/vg01lv11/oracle//data/undotbs_d1_O2P00R11.dbf' AUTOEXTEND ON MAXSIZE 10g;

ALTER DATABASE DATAFILE '/vg01lv11/oracle//data/undotbs_d1_O2P00R11.dbf'
       RESIZE 1000M;

【讨论】:

  • 小心;您可能还想设置 maxsize,这样 Oracle 就不会填满您的文件系统。为了防止数据文件超过 10g,你可以说: ALTER DATABASE DATAFILE '/vg01lv11/oracle//data/undotbs_d1_O2P00R11.dbf' AUTOEXTEND ON MAXSIZE 10g;
  • 我会改变@Mark
【解决方案2】:

如果您负担得起在不同事务中删除:

DECLARE
  i PLS_INTEGER;
BEGIN
  --insert into DB_LOGS_TEMP table from DB_LOGS table
  INSERT INTO DB_LOGS_TEMP
  SELECT *
  FROM DB_LOGS
  WHERE DB_LOG_ID NOT IN
    (SELECT DB_LOG_ID FROM DB_LOGS_TEMP
    );
  COMMIT;
  i:=50;
  --keep the lat 10 records and delete other records
  WHILE i>=10
  LOOP
    DELETE DB_LOGS
    WHERE rowid IN
      (SELECT rid
      FROM
        (SELECT t.rowid rid,
          row_number() over(partition BY T.DB_LOG_ID order by T.TIMESTAMP DESC) AS rn
        FROM DB_LOGS t
        )
      WHERE rn > i
      );
    COMMIT;
    i:=i-5;
  END LOOP;
END;

【讨论】:

  • 它对我有用,同时增加了表空间并启用了自动扩展。我不认为交易是真正的问题。
  • @Andrew 是的,您的 UNDO TBS 非常小。但是要小心这个巨大的删除,它们可能会增加你的 UNDO。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多