ORA-16038: log 2 sequence# 11 cannot be archived
개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2011. 10. 28. 00:04
- db_recovery_file_dest_size가 default 값인 2G 일 때 발생하는 Error
기본적인 oracle 환경은 아래와 같다.
C:\>sqlplus /nolog
SQL> conn /as sysdba
SQL>startup
SQL> show parameter p_d 혹은 SQL> show parameter recovery
아래와 같이 select * from v$recovery_file_dest; 를 해보면 default값인 2G가 잡혀있는 것을 알 수 있다. 유사한 구문은 select name, floor(space_limit/1024/1024) "Size MB", ceil(space_used/1024/1024) "Used MB" from v$recovery_file_dest order by name; 이다.
아래의 로그를 분석해보면 다음과 같다.
두번째 online redo log buffer의 11번째 sequence에서 archive를 할 수 없다는 것을 알 수 있다.
아래의 그림을 보면 recovery_file_dest의 size가 거의 fulll임을 알 수 있다.
recovery_file_dest의 size가 설정 값의 한계에 다달아 문제가 발생했음을 알 수 있다.
아래의 명령문을 쓰면 mount 단계인 것을 알 수있다. SQL> startup open 을 해도 open이 되지 않음을 알 수 있다.
SQL> select status from v$instance;
두번째 online redo log buffer의 11번째 sequence에서 archive를 할 수 없어서 그 이후 데이터는 모두 loss가 났음을 알 수 있다. 두번째 redo log파일이 손상되었기 때문에 복구 작업을 진행해야 한다.
cancel 기반 recovery를 진행하겠다. 기본적으로 SQL> recover database until cancel; 은 mount 단계에서 진행한다. 현재 mount 단계이기 때문에 복구를 바로 진행하도록 하겠다.
1. 존재하는 archive 파일을 적용한다.
SQL> recover database until cancel;
2. Control files, Redo log files, Data files의 SCN(System Change Number)를 동일하게 맞추어 준다.
SQL> alter database open resetlogs;
3. SQL> archive log list 를 통하여 초기화된 log sequence 번호를 확인해 보자.
4. SQL> alter system switch logfile; 을 통해 switch log가 되는지 확인해 본다.
5. 2G로 잡혀있는 DB_RECOVERY_FILE_DEST_SIZE를 100G로 아주 아주 넉넉하게 변경해 보자.
SQL> shutdown immediate
SQL> startup mount
SQL> show parameter recovery
SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE = 100G;
SQL> startup open
P.S. 참고
ORA-16038과 관련, Redo log file이 올라오지 않을 때
http://majesty76.tistory.com/54
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
NT상에서 오라클 8i 제거 (0) | 2011.10.28 |
---|---|
ORACLE 9i CONTROL FILE BACKUP (0) | 2011.10.28 |
올바른 데이터 유형을 사용하라(이펙티브 오라클, THOMAS KYTE저, P.510) (0) | 2011.10.23 |
특정 시점의 DB 복구하기 (0) | 2011.10.23 |
PK, FK 설정 예제와 제약 조건 확인하기 (0) | 2011.10.23 |