대용량 데이터 작업(INSERT, DELETE, UPDATE)은 데이터베이스 성능과 안정성에 큰 영향을 미칠 수 있습니다. DBA는 이러한 작업을 수행할 때 시스템 자원, 로그 사용량, 병목 현상 등을 모니터링하여 데이터 손실과 성능 저하를 방지해야 합니다.
Redo Log는 데이터베이스 변경 사항을 기록하며, 데이터 복구에 필수적입니다. 대량 작업 시 Redo Log와 Archive Log는 빠르게 증가하기 때문에 다음 사항을 점검해야 합니다.
Redo Log 용량:
ALTER SYSTEM SWITCH LOGFILE 명령을 통해 수동으로 로그 스위치를 실행하며, 적절한 용량인지 확인합니다.
Redo Log 파일이 너무 작으면 빠르게 순환하면서 작업 병목이 발생할 수 있습니다.
-- REDO LOG 파일 상태
select thread#,l.group#,f.member,l.bytes/1024/1024 mb, l.status, l.archived
from v$log l, v$logfile f
where l.group#=f.group#
order by thread#,l.group#,thread#,f.member;
Archive Log 공간 확인:
Archive Log가 저장되는 디스크 공간(FRA: Fast Recovery Area)을 점검합니다. 공간 부족 시 작업 중단 또는 데이터 손실이 발생할 수 있습니다.
-- archive log 사용량
select name,
round(space_limit/1024/1024/1024,2) as space_limit,
round(space_used/1024/1024/1024,2) as space_used,
round(round(space_used/1024/1024/1024,2)/round(space_limit/1024/1024/1024,2)*100,2) as percent,
space_reclaimable,
number_of_files,
con_id
from v$recovery_file_dest;
FRA 설정 확인:
SHOW PARAMETER db_recovery_file_dest_size;
대량 작업은 Undo Tablespace 사용량을 급격히 증가시킬 수 있습니다. Undo는 트랜잭션을 롤백하거나 읽기 일관성을 보장하는 데 필요합니다.
Undo Tablespace 사용량 확인:
SELECT a.tablespace_name, a.file_name, a.bytes/1024/1024 AS size_mb, b.tablespace_size*8/1024 AS max_size_mb
FROM dba_data_files a, v$undostat b;
Autoextend 여부 확인: Undo Tablespace가 Autoextend 상태인지 점검하여 공간 부족을 방지합니다:
ALTER DATABASE DATAFILE '/path_to_undo_file' AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
-- 현재 undo tablespace 사용량
select owner,segment_name,status,sum(bytes)/1024/1024 as mb_used
from dba_undo_extents
where tatus ='active'
group by owner,segment_name,status
order by mb_used desc;
-- 어떤 세션이 undo를 사용하고 있는지 확인
select to_char(s.sid)||','||to_char(s.serial#) sid_serial,
nvl(s.username,'NONE') orauser,
s.program,
r.name undoseg,
t.used_ublk*to_number(x.value)/1024/1024||'M' "undo"
from v_$rollname r, v_$session s, v_$transaction t, v_$parameter x
where s.taddr = t.addr
and r.usn=t.xidusn(+)
and x.name='db_block_size'
order by undo desc;
cf) DML 작업을 하다가 기본적인 명령어를 sqlplus에 입력했는데도 엄청 로딩 걸리면서 조회가 되지 않을 때, archive log 가 FULL 인지 확인해봐야한다.
su - oracle
rman target /
delete archivelog all completed before 'sysdate-3';