using backup controfile 복구 시나리오
흠.. 계획했던 에러시나리오와 좀 다르게 갔지만, 이왕 한 거 한번 올려본다. 여기서는 using backup controlfile을 사용하는 복구 시나리오이다. 위의 구문을 사용하면 DB는 항상 resetlogs옵션으로 open시켜야 한다. 아래의 예에서 에러를 발생시키위해 한 짓거리에는 그리 신경쓰지 말긴바란다. 그냥, 복구를 어떻게 했느냐에 신경쓰면 되겠다.
암튼, 에러를 유발시키기 위해 다음과 같이 했다.
[에러를 발생하게 만들자] SQL> conn internal 암호 입력: 연결되었습니다.
컨트롤파일 백업해두자. SQL> alter database backup controlfile to 'c:oracleackupdbcontrol01.ctl';
데이타베이스가 변경되었습니다.
심심한데 데이터나 하나 넣자. SQL> conn kang/kang 연결되었습니다. SQL> insert into test values('merong', '메롱');
1 개의 행이 만들어졌습니다.
SQL> COMMIT;
커밋이 완료되었습니다.
SQL> connect internal 암호 입력: 연결되었습니다. SQL> shutdown 데이터베이스가 닫혔습니다. 데이터베이스가 마운트 해제되었습니다. ORACLE 인스턴스가 종료되었습니다.
자, current control file을 백업했던 놈으로 엎어 써버리자. SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol01.ctl 1개 파일이 복사되었습니다.
SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol02.ctl 1개 파일이 복사되었습니다.
SQL> host copy c:oracleackupdbcontrol01.ctl c:oracleoradatadbcontrol03.ctl 1개 파일이 복사되었습니다.
이제 startup을 하면 에러가 발생한다. SQL> startup ORACLE instance started.
Total System Global Area 189102108 bytes Fixed Size 75804 bytes Variable Size 89006080 bytes Database Buffers 99942400 bytes Redo Buffers 77824 bytes Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
[복구하기] 위에서 보듯이, DB가 뭔가 이상하다며 오라클이 open을 거부했다. resetlogs옵션으로 open하라고 하는데 그대로 하면 DB가 안 열린다.
SQL> shutdown abort ORACLE instance shut down. SQL> startup mount; ORACLE instance started.
Total System Global Area 189102108 bytes Fixed Size 75804 bytes Variable Size 89006080 bytes Database Buffers 99942400 bytes Redo Buffers 77824 bytes Database mounted.
아래 구문 신경써서 보아두면 좋다. until cancel은 사실 안해줘도 되지만.. 불완전복구(incomplete recovery)를 할 수도 있을까 싶은 생각이 들어서 해줬다. SQL> recover database until cancel using backup controlfile; ORA-00279: change 329875 generated at 05/06/2003 14:49:55 needed for thread 1 ORA-00289: suggestion : C:ORACLEORADATADBARCHIVEDBT001S00019.ARC ORA-00280: change 329875 for thread 1 is in sequence #19
Specify log: {=suggested | filename | AUTO | CANCEL} cancel ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01152: file 1 was not restored from a sufficiently old backup ORA-01110: data file 1: 'C:ORACLEORADATADBSYSTEM01.DBF'
ORA-01112: media recovery not started
위에서 보면 그냥 cancel을 쳐서 복구를 중단시켰는데, 메시지에 보듯이 복구가 시작되지 않았다고 한다. 왜? 위에서 빨간색으로 마크한 부분의 아카이브로그는 존재하지 않기 때문이었다. 미리 보여주고 해야 되는데.... 아래의 예를 보듯이, 로그 아카이빙은 sequence #18까지만 진행되었음을 알 수 있다.
SQL> select sequence# from v$archived_log;
SEQUENCE# ---------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
18 rows selected.
sequence #19는 아직 아카이빙이 되지 않았고, 이 놈은 online redo log file로 존재하고 있다. 아래에 보면, log group 3이 sequence# 19를 가짐을 알 수 있다.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIM ------------- --------- 1 1 17 1048576 1 YES INACTIVE 309670 30-APR-03
2 1 18 1048576 1 YES INACTIVE 309764 30-APR-03
3 1 19 1048576 1 NO CURRENT 329873 06-MAY-03
group 3의 파일명을 파악한다. SQL> select * from v$logfile;
GROUP# STATUS ---------- ------- MEMBER -------------------------------------------------------------------------------- 3 C:ORACLEORADATADBREDO03.LOG
2 STALE C:ORACLEORADATADBREDO02.LOG
1 C:ORACLEORADATADBREDO01.LOG
SQL> recover database until cancel using backup controlfile; ORA-00279: change 329875 generated at 05/06/2003 14:49:55 needed for thread 1 ORA-00289: suggestion : C:ORACLEORADATADBARCHIVEDBT001S00019.ARC ORA-00280: change 329875 for thread 1 is in sequence #19
Specify log: {=suggested | filename | AUTO | CANCEL} C:ORACLEORADATADBREDO03.LOG online redo log file을 지정해 준다. Log applied. Media recovery complete. SQL> alter database open resetlogs;
Database altered.
SQL>
설명이 좀 부족한 감이 있지만.. 나머지 자세한 내용은 스스로!
| This article comes from dbakorea.pe.kr (Leave this line as is)
|