본문 바로가기

IT관련

오라클 RMAN 블록 손상 (Block Corruption) 복구 (ORA-01578, ORA-01110)

대부분의 Database 들이 백업/복구 기능을 갖추고 있습니다. 그런데, 보통은 DB 전체를 복구하거나 데이터파일 단위까지 복구하는 정도 입니다.

오라클은 특정 데이터 블록(Data block)이 손상된 경우에, 데이터파일 전체를 복구하지 않고, 손상된 블록만 복구할 수 있습니다.

손상된 블록만 복구하는 것이기 때문에 빠르게 복구할 수 있는 장점이 있습니다.

 

데이터블록 손상은 여러 이유로 발생할 수 있는데, 일단 블록손상이 발생하면 해당블록에 작업하려고 할 때 아래와 같이 ORA-01578, ORA-01110 에러가 발생합니다.

 

 

sys 유저에서 v$database_block_corruption 뷰를 조회하면, 정확히 Block Corruption 이 발생한 파일#, 블록# 를 확인할 수 있습니다.

 

 

이렇게 확인이 되었으면, RMAN 에서 커맨드 한줄만 치면 복구가 됩니다.

 

 

손상된 블록이 한개인 경우는 위와 같이 하면 되고, 여러개인 경우는 아래와 같이 커맨드를 사용할 수 있습니다.

-- 1) recover 다음에 datafile 과 block 을 반복적으로 지정
RMAN> recover datafile 7 block 344
                      datafile 8 block 250;

-- 2) 아래의 커맨드는 v$database_block_corruption 뷰에 들어있는 모든 block 들을 복구
RMAN> recover corruption list;

 

 

손상된 블록이 복구되고나면, v$database_block_corruption 조회시 해당 데이터가 사라집니다.

 

 

손상된 블록을 가지고 있었던 테이블에 작업을 해보면, 이제는 에러없이 잘 되는 것을 확인할 수 있습니다.

 

 

별거 아닌 기능이라고 할 수도 있겠으나, Block 한개 에러난 것 때문에 전체 데이터파일을 복구하려면 다소 부담스러운데, 이렇게 간단하게 복구할 수 있는 점에서는 매우 유용할 수 있습니다.

 

이 Block Corruption 복구 기능은 의외로 다른 DBMS 에서는 지원되지 않는 경우가 많습니다.