2024년 1월 29일 4교시+5교시 앞부분 : 컨트롤파일과 데이터파일들이 몽땅 깨졌을 때 RMAN으로 복구하기 / 컨트롤파일과 리두로그 파일이 깨졌을 때 RMAN으로 복구하기
먼저 백업본이 있는지 체크하기
RMAN> list backup;
백업본이 있을 때만 아래의 수행 시나리오 따라하기,
백업본이 없으면 따라하면 안됨
<<시나리오 n.>>
컨트롤파일과 데이터파일들이 몽땅 깨졌을 때 RMAN 으로 복구하기
(이거 아무래도 아까 헐크가 질문한 것 때문에 선생님이 해주시는 것 같은데...
역시 선생님 다정보스)
1. DB 내리기
SYS@ora11g> shutdown immediate
2. 컨트롤 파일과 데이터파일 몽땅 지우기
SYS@ora11g> ! rm /u01/app/oracle/oradata/ora11g/*.ctl
SYS@ora11g> ! rm /u01/app/oracle/oradata/ora11g/*.dbf
3. DB 올리기
SYS@ora11g> startup
DB 가 노마운트 단계까지밖에 올라올 수 없다. (당연하겠지...)
SYS@ora11g> startup
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 448791588 bytes
Database Buffers 255852544 bytes
Redo Buffers 5419008 bytes
ORA-00205: error in identifying control file, check alert log for more info
4. 컨트롤 파일부터 백업본으로 restore하기 (2024년 1월 29일 1교시 참고)
RMAN 에게 받아놓은 백업본들 중 가장 최근 것 찾아서 깨진 컨트롤파일 리스토어하라고 시키기
RMAN> restore controlfile from autobackup;
(만약 autobackup 하라는 명령이 안 먹히면 백업파일 위치 직접 찾아서 수동으로 리스토어하기)
RMAN> restore controlfile from autobackup;
Starting restore at 29-JAN-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK
recovery area destination: /u01/app/oracle/fast_recovery_area
database name (or database unique name) used for search: ORA11G
channel ORA_DISK_1: AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159556836_lvgy6o0s_.bkp found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159556836_lvgy6o0s_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oracle/oradata/ora11g/control01.ctl
Finished restore at 29-JAN-24
5. 방금 백업한 컨트롤파일로 마운트 단계까지 DB 올리기
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
6. 데이터파일들이 깨졌으므로 데이터베이스 레벨로 리스토어 restore database;
RMAN> restore database;
RMAN> restore database;
Starting restore at 29-JAN-24
Starting implicit crosscheck backup at 29-JAN-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK
Crosschecked 1 objects
Finished implicit crosscheck backup at 29-JAN-24
Starting implicit crosscheck copy at 29-JAN-24
using channel ORA_DISK_1
Finished implicit crosscheck copy at 29-JAN-24
searching for all files in the recovery area
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_24/o1_mf_s_1159108019_lv17x4mh_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_25/o1_mf_s_1159197667_lv3zgmts_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_25/o1_mf_s_1159205985_lv47ll9f_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159523107_lvfx8n4v_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159524434_lvfyl37q_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159524816_lvfyy0ls_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159548717_lvgp8x9d_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159549990_lvgqjqbb_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159556836_lvgy6o0s_.bkp
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/ora11g/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /u01/app/oracle/oradata/ora11g/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/ora11g/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /u01/app/oracle/oradata/ora11g/example01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/oracle/oradata/ora11g/undotbs01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_29/o1_mf_nnndf_TAG20240129T190640_lvgy5k83_.bkp
channel ORA_DISK_1: piece handle=/u01/app/oracle/fast_recovery_area/ORA11G/backupset/2024_01_29/o1_mf_nnndf_TAG20240129T190640_lvgy5k83_.bkp tag=TAG20240129T190640
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 29-JAN-24
7. 껍데기만 만들어놓은 데이터파일들 사용할 수 있는 상태로 만들기
RMAN> recover database;
RMAN> recover database;
Starting recover at 29-JAN-24
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 1 is already on disk as file /u01/app/oracle/oradata/ora11g/redo01.log
archived log file name=/u01/app/oracle/oradata/ora11g/redo01.log thread=1 sequence=1
media recovery complete, elapsed time: 00:00:01
Finished recover at 29-JAN-24
(나는 제대로 수행되었지만 여기서 SCN 번호가 안 맞는다고 에러 발생할 수도 있다...
다른 친구는 에러 발생했다고 함. 특정SCN 번호를 주면서 저 번호 전까지만 복구 가능하다고 했다고...
만약 그럴 경우에는 아래를 참고)
7-1. SCN 번호 어쩌고 하면서 오류가 발생할 경우:
RMAN>
run
{
set until scn = 주어진SCN번호
restore database;
recover database;
}
입력하면 된다.
7-2. 그런데 만약 여기서 위의 명령어가 수행되지 않고 또 오류가 발생한다면?
그건 지난주 금요일 (2024년 1월 26일 5교시) 에 발생했던 오류와 같은 오류이므로
(DB 를 자꾸 리셋로그로 열어서 발생한 오류)
똑같은 방식으로 해결하면 된다. (해결방법은 해당 문서 맨 끝부분에)
7-2-1. 인카네이션 번호 보기
RMAN> list incarnation of database;
7-2-2. 인카네이션 번호 1번으로 셋업하기
RMAN> reset database to incarnation 1;
7-2-3. 위에서 실패했던 명령어 다시 수행하기
RMAN>
run
{
set until scn = scn 번호; --- 끝에 세미콜론 꼭 붙여주기
restore database;
recover database;
}
(그런데 빈지노 말로는 인카네이션 번호 1번으로 셋업해서
list incarnation 했을 때 리스트가 하나밖에 안 나오는데도 그 상태에서 또 오류가 났대... 헐...
이럴 때는 어쩔 수 없이 그냥 콜드 백업으로 덮어씌워어야 한다고 하시네...)
8. DB 리셋로그로 열기 (컨트롤파일이 깨졌기 때문에 DB 를 무조건 resetlogs 로 열어야 한다.)
RMAN> alter database open resetlogs;
database opened
9. 백업 새로 받기
RMAN> backup as compressed backupset database;
10. 필요없는 백업본, 아카이브파일 몽땅 다 지우기
RMAN> list backup;
RMAN> report obsolete;
RMAN> delete obsolete;
RMAN> crosscheck archivelog all;
RMAN> list archivelog all;
RMAN> delete archivelog all;
시나리오 <<n+n>>
리두로그 파일과 컨트롤파일이 깨졌을 때
1. DB 내리기
SYS@ora11g> shutdown immediate
2. 컨트롤 파일 날리고 리두로그 파일 날리기
SYS@ora11g> ! rm /u01/app/oracle/oradata/ora11g/*.ctl
SYS@ora11g> ! rm /u01/app/oracle/oradata/ora11g/*.log
컨트롤 파일도 컨트롤 파일이지만
커런트 리두로그 그룹이 날아감:
이렇게 되면 이제 DB 를 방금 전과 같은 상태로 복구할 방법은 영영 없게 되어버리고 말았다.
3. DB 노마운트 단계까지 올리기 (당연히 올라오다 말고 오류 발생)
SYS@ora11g> startup
SYS@ora11g> startup
ORACLE instance started.
Total System Global Area 711430144 bytes
Fixed Size 1367004 bytes
Variable Size 448791588 bytes
Database Buffers 255852544 bytes
Redo Buffers 5419008 bytes
ORA-00205: error in identifying control file, check alert log for more info
4. RMAN 을 이용해서, 가장 최근에 받아놓은 백업본으로 컨트롤파일 리스토어하기
RMAN> restore controlfile from autobackup;
만약 이 명령어가 먹히지 않는다면: 백업본의 위치를 알아내서 수동으로 복구 작업을 해주어야 한다.
(2024년 1월 29일 1교시 내용 참고)
RMAN> restore controlfile from autobackup;
Starting restore at 29-JAN-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=171 device type=DISK
recovery area destination: /u01/app/oracle/fast_recovery_area
database name (or database unique name) used for search: ORA11G
channel ORA_DISK_1: AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159558509_lvgztyb3_.bkp found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORA11G/autobackup/2024_01_29/o1_mf_s_1159558509_lvgztyb3_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oracle/oradata/ora11g/control01.ctl
Finished restore at 29-JAN-24
컨트롤파일 복구 완료
5. 휴 일단 한시름 덜었다... 이제 DB 마운트 단계까지 올리기
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
6. 컨트롤파일은 복구되었지만 실제 데이터파일의 물리적인 내용은 손상되어 있을 수 있기 때문에
데이터파일도 물리적으로 복구해주기
RMAN> restore database;
7. 현재 커런트한 리두로그는 없어졌지만 아무튼 그 전까지는 아카이브 적용하기
RMAN> recover database;
RMAN> recover database;
Starting recover at 29-JAN-24
using channel ORA_DISK_1
starting media recovery
unable to find archived log
archived log thread=1 sequence=1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/29/2024 19:58:26
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 1 and starting SCN of 2220917
그런데 커런트 리두로그가 없어서 오류 발생:
복구하려면 몇 번 SCN 번호부터의 리두가 필요하다고 하면서 번호를 알려준다.
그런데 우리는 리두 날리고 없잖아?
그래서
8.
RMAN>
run
{
set until scn = 2220917;
restore database;
recover database;
}
난 리두 없어서 못주겠으니까 니가 말하는 그 SCN 번호 시점까만 복구해달라고 요청하기
(RMAN 에서의 캔슬 베이스 리커버리)
RMAN> run
{
set until scn = 2220917;
restore database;
recover database;
}2> 3> 4> 5> 6>
executing command: SET until clause
Starting restore at 29-JAN-24
using channel ORA_DISK_1
skipping datafile 1; already restored to file /u01/app/oracle/oradata/ora11g/system01.dbf
skipping datafile 2; already restored to file /u01/app/oracle/oradata/ora11g/sysaux01.dbf
skipping datafile 4; already restored to file /u01/app/oracle/oradata/ora11g/users01.dbf
skipping datafile 5; already restored to file /u01/app/oracle/oradata/ora11g/example01.dbf
skipping datafile 6; already restored to file /u01/app/oracle/oradata/ora11g/undotbs01.dbf
restore not done; all files read only, offline, or already restored
Finished restore at 29-JAN-24
Starting recover at 29-JAN-24
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 29-JAN-24
SCN 번호 2220917 번까지 리커버리 완료
9. 리셋로그로 DB 열기
RMAN> alter database open resetlogs;
database opened
10. 여러 가지 확인 작업
select a.group#, b.sequence#, a.member, b.bytes/1024/1024MB, b.archived, b.status
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;
리두 확인
SYS@ora11g> ! ls /u01/app/oracle/oradata/ora11g/*.log
/u01/app/oracle/oradata/ora11g/redo01.log
/u01/app/oracle/oradata/ora11g/redo02.log
/u01/app/oracle/oradata/ora11g/redo03.log
리두로그 파일이 생성되어 있는지 확인
11. 그럼 이제 새로 백업받고
RMAN> backup as compressed backupset database;
12. 백업정책상 쓸모없는 것들 다 지우기
RMAN> report obsolete;
RMAN> delete obsolete;
Do you really want to delete the above objects (enter YES or NO)? yes
RMAN> crosscheck archivelog all;
RMAN> list expired archivelog all;
RMAN> delete expired archivelog all;
2024년 1월 30일 1교시 모든 데이터파일, 컨트롤파일, 리두로그 파일이 손상되었을 때 RMAN으로 복구하기 (2) | 2024.01.30 |
---|---|
2024년 1월 29일 5교시 백업셋과 백업피스 크기 제한하기, 이미지 카피 백업 (0) | 2024.01.29 |
2024년 1월 29일 3교시 RMAN advise failure, repair failure (0) | 2024.01.29 |
2024년 1월 29일 2교시 헌 DB 새 DB 로 만들기, 초기 파라미터 파일이 깨졌을 때의 대처 방법(DBID) (0) | 2024.01.29 |
2024년 1월 29일 1교시 RMAN clear 명령어, 컨트롤파일이 깨진 경우 RMAN 으로 복구하기 (0) | 2024.01.29 |