Block Corruption

BUMSOO·2024년 12월 16일

Backup & Recovery

목록 보기
14/18

블록 손상(block corruption) 후 블록단위로 복구

  • 블록을 읽거나 쓸때마다 일관성 검사가 수행된다.
    • 블록 버적
    • 블록 버퍼의 DBA값과 비교되는 캐시의 DBA(데이터 블록 주소)값
    • 활성화된 경우 블록 체크섬
  • 손상된 블록은 다음중 하나로 식별된다
    • Media 손상
    • 논리적 또는 소프트웨어 손상
  1. rowid를 이용해 데이터가 들어있는 block_id를 확인
select rowid , 
    dbms_rowid.rowid_object(rowid) as data_object_id, -- 오브젝트 ID
    dbms_rowid.rowid_relative_fno(rowid) as file_id, -- 데이터파일 ID
    dbms_rowid.rowid_block_number(rowid) as block_id, -- 블록 ID
    dbms_rowid.rowid_row_number(rowid) as row_slot, -- 로우 슬롯 ID
    employee_id
from hr.employees;

  1. file_id를 이용하여 file_name 확인
select file_name from dba_data_files where file_id=5;

  1. 의도적으로 블록을 손상시켜 장애 유발
    ! dd if=/dev/zero of=/u01/app/oracle/oradata/ORA19C/example01.dbf bs=8192 seek=168 count=2 conv=notrunc :

  1. 메모리에 있는 값을 불러올 수 도 있으니 메모리값 초기화
    alter system flush buffer_cache;

  2. 장애가 발생된걸 확인할 수 있다.

  1. rman에서 전체 체크
    validate database;
    - 문제가 없는 파일 같은 경우는 OK로 표시되지만, 문제가 있을 경우 FAILED로 표시됨

  2. 문제가 있는 데이터파일만 체크
    validate datafile 5;

  3. validate로는 문제가 생긴 block_id까지는 알 수 없어 list failure로 확인해야한다.

  4. rman을 통해 failure에 대한 advise를 받고 복구 스크립트 확인
    - recover을 block 단위로 하는걸 볼 수 있다.

  5. 자동복구
    repair failure;

0개의 댓글