본문 바로가기

데이터베이스

[DB(오라클)] 디스크 용량 부족 시 확인할 점

1. undo tablespace 용량 부족

tablespace의 용량을 늘리던가 혹은 undo retention 시간을 확인하고 해당 시간 이후에 작업을 실행해야합니다.

DB는 ACID를 지원하는데 이는 작업 완료 시 commit 하여 DB에 반영하고, 문제 있을 시에는 rollback하여 작업 취소를 하는 것입니다. REDO는 오라클에서 어떤 작업이든 redo log에 기록을 하는 것이고, undo는 undo segment에 저장된 값을 이용해서 원래의 값으로 복원하는 기능을 합니다.

따라서 redo는 복구 할 때 사용자가 했던 작업을 그대로 다시하지만, undo는 했던 작업을 반대로 해서 작업을 원상태로 돌립니다.

해당 작업을 하고 있을 시, 장애 발생하면 redo와 undo는 다음과 같은 동작을 수행합니다. SMON이 Instance Recovery를 수행하기 때문에 redo작업을 수행합니다. 

* pmon :  프로세스 감시 역할 / commit 안 된 작업 rollback, lock 해제 등

* smon : Instance Recovery, undo segment 줄임 등

update t1
set no = no + 1
where id = 1;

[REDO]

update t1
set no = no + 1
where id = 1;

 

[UNDO]

update t1
set no = no - 1
where id = 1;

2. 아카이브 로그 모드(Archive log mode)

DML, DDL 작업 시 모든 기록이 redo log에 저장이 됩니다. 오라클의 redo 로그파일은 계속 늘어나는 것이 아니라 몇 개 만들어 놓고 번갈아 가면서 기록하는 구조이기 때문에 내용이 너무 많아지면 내용이 덮어쓰여질 수 있습니다. 그렇기 때문에 redo log file을 다른 디렉토리에 저장하여 운영하는 방식입니다. 하지만  대용량 transaction일 수록 redo log에 저장되는 양이 많아 지고 해당 테이블스페이스에 용량에 많은 부담이 갈 수 있습니다. 따라서 table, index 생성 시 혹은 ALTER 통해서 no logging 옵션을 붙여야 합니다. no archive log mode는 운영 환경에서 적용할 수 없기 때문입니다. 만약 그래도 용량이 부족하다고 하면 drop table 후 purge recyclebin 통해서 용량 확보 해야합니다. 물론 no logging 하더라도 redo log를 쓰지만 현저히 적습니다.

 

3. 특정 테이블의 세그먼트 별 디스크 용량을 확인해서 문제를 파악하는 방식

 

'데이터베이스' 카테고리의 다른 글

InfluxDB 사용하는 이유 및 특징  (0) 2023.01.07
오라클 구조  (0) 2022.09.21
[DB(오라클)] 용어정리  (0) 2022.08.15
[DB(오라클)] 데이터 저장 구조  (0) 2022.08.12
[DB] Index  (0) 2022.07.31