2016-07-27 5 views
0

내가 PL/SQL 블록을 다음 한 cron 작업을 실행하고 있습니다 :ORA-30036 : 실행 취소 테이블 스페이스에 8 세그먼트를 확장 할 수없는 'UNDOTBS'

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 테이블 10,247,302 행이 있습니다. cron 작업이 실행되면 ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS'과 같은 오류가 발생합니다. tablespce를 높이는 것이이 문제에 대한 유일한 해결책이며 어떻게해야합니까? UNDOTBS에는 524288000 바이트가 있습니다.

+0

많은 레코드를 커밋하지 않고 삭제할 수 있습니다. 어쩌면 커밋을 발행하는 테이블을 반복해야합니다. 그렇게 할 수 있습니까? 아니면 동일한 거래를해야합니까? – vercelli

답변

1

그것은 나를 위해 작동합니다.

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

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

주의하십시오. maxsize를 설정하기를 원할 수도 있으므로 Oracle은 파일 시스템을 채우지 않습니다. 데이터 파일이 10g을 초과하지 않도록하려면 다음과 같이 말할 수 있습니다. ALTER DATABASE DATAFILE '/vg01lv11/oracle//data/undotbs_d1_O2P00R11.dbf'MAXEXZE 10g; –

+0

나는 그 변화를 할 것이다 @ 마크 – Andrew

1

서로 다른 거래에서 삭제 감당할 수있는 경우 테이블 스페이스를 증가에 자동 확장을하는 동안

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; 
+0

테이블 스페이스를 늘리고 자동 확장 기능을 켜는 동안은 저에게 효과적입니다. 나는 그 거래가 실제적인 문제라고 생각하지 않는다. – Andrew

+1

@Andrew 예, 귀하의 UNDO TBS는 실제로 작았습니다. 하지만이 엄청난 삭제와 함께 carefull, 그들은 당신의 UNDO 성장할 수도 있습니다. – vercelli