RMAN BACKUPS AND ARCHIVED LOG ISSUES =====================================
Scenario #1: ------------
1)RMAN이 모든 archived log들을 삭제할 때 실패하는 경우.
database는 두 개의 archive destination에 archive file을 생성한다. 다음과 같은 스크립트를 수행하여 백업후에 archived redo logfile을 삭제한다.
run { allocate channel c1 type 'sbt_tape'; backup database; backup archivelog all delete input; }
Archived redo logfile 삭제 유무를 확인하기 위해 CROSSCHECK 수행시 다음과 같은 메시지가 발생함.
RMAN> change archivelog all crosscheck;
RMAN-03022: compiling command: change RMAN-06158: validation succeeded for archived log RMAN-08514: archivelog filename= /oracle/arch/dest2/arcr_1_964.arc recid=19 stamp=368726072
2) 원인분석
이 문제는 에러가 아니다. RMAN은 여러 개의 arhive directory중 하나의
directoy안에 있는 archived file들만 삭제한다. 그래서 나머지 directory안의 archived log file들은 삭제되지 않고 남게 되는 것이다.
3) 해결책
RMAN이 강제로 모든 directory안의 archived log file들을 삭제하게 하기 위해서는 여러 개의 채널을 할당하여 각 채널이 각 archive destination안의 archived file을 백업하고 삭제하도록 해야 한다. 이것은 아래와 같이 구현될 수 있다.
run { allocate channel t1 type 'sbt_tape'; allocate channel t2 type 'sbt_tape'; backup archivelog like '/oracle/arch/dest1/%' channel t1 delete input archivelog like '/oracle/arch/dest2/%' channel t2 delete input; }
Scenario #2: ------------
1)RMAN이 archived log를 찾을 수 없어 백업이 실패하는 경우.
이 시나리오에서 database를 incremental backup한다고 가정한다. 이 경우 RMAN은 recover시 archived redo log대신에 incremental backup을 사용할 수 있기 때문에 백업 후 모든 archived redo log를 삭제하기 위해 OS utility를 사용한다. 그러나 다음 번 backup시 다음과 같은 Error를 만나게 된다.
RMAN-6089: archive log NAME not found or out of sync with catalog
2) 원인분석
이 문제는 OS 명령을 사용하여 archived log를 삭제하였을 경우 발생한다. 이때 RMAN은 archived log가 삭제되었다는 것을 알지 못한다. RMAN-6089는 RMAN이 OS 명령에 의해 삭제된 archived log가 여전히 존재하다고 생각하고 백업하려고 시도하였을 때 발생하게 된다.
3) 해결책
가장 쉬운 해결책은 archived log를 백업할 때 DELETE INPUT option을 사용하는 것이다. 예를 들면
run { allocate channel c1 type 'sbt_tape'; backup archivelog all delete input; }
두 번째로 가장 쉬운 해결책은 OS utility를 사용하여 archived log를 삭제한 후에 다음과 같은 명령어를 RMAN prompt상에서 수행하는 것이다.
RMAN>allocate channel for maintenance type disk; RMAN>change archivelog all crosscheck;
Oracle 8.0:
RMAN> change archivelog '/disk/path/archivelog_name' validate;
Oracle 8i:
RMAN> change archivelog all crosscheck ;
Oracle 9i:
RMAN> crosscheck archivelog all ;
catalog의 COMPATIBLE 파라미터가 8.1.5이하로 설정되어 있으면 RMAN은 찾을 수 없는 모든 archived log의 status를 "DELETED" 로 셋팅한다. 만약에 COMPATIBLE이 8.1.6이상으로 설정되어 있으면 RMAN은 Repository에서 record를 삭제한다. |