Control File 장애 복구
** Control File이 과거 버전이면 반드시 다시 만들어야 함(redo를 읽는건 datafile)
실습 1. Parameter File의 경로와 실제 파일 경로가 다른 경우 대처하기
==> Parameter File 에 적힌 control file 경로와 실제 control file 의 경로가 달라서 생기는 에러로 두 경로만 일치시키면 간단히 해결
※ 실습환경 만들기
SQL> create pfile from spfile;
-- control file 유실 상황 가정(rm)
SQL> shutdown immediate;
!rm /oracle11/oracle/flash_recovery_area/testdb/control02.ctl
SQL> startup
alert log 확인
※ 해결방법
-- 복구 수행 1) init파일의 ctl 파일 삭제 후 DB open(문제되는 2번 지우기)
* spfile로 운영시 spfile은 삭제 후 open
-- 복구 수행 2) 나머지 손상되지 않은 control file copy 후 DB open
!cp /oracle11/oracle/oradata/testdb/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;
SQL> alter database mount;
SQL> alter database open;
실습 2. Control File끼리 버전이 다른 경우 대처하기
==> Control file 끼리의 정보가 서로 다른 경우에 생기는 에러. Control file 끼리 정보를 맞춰주면 됨
※ 실습환경
-- 1. pfile control file 주석 후 pfile로 DB OPEN (spfile 있을 시 spfile 삭제)
-- 2. shutdown immediate
-- 3. startup
-- 4. 다시 pfile control file 주석 해제 후 DB OPEN 시 에러 확인
※ 해결방법
--버전 정보가 더 큰 파일을 작은 파일로 cp
cp /oracle11/oracle/oradata/testdb/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;
SQL> alter database mount;
SQL> alter database open;
실습 3. Old Control File 또는 Control File이 삭제되었을 경우 대처하기
1) noresetlogs : 리두 리셋 안함 (resetlogs는 redo에도 에러있을시 사용)
-- control file 재생성 스크립트 만들기
alter database backup controlfile to trace as '/oracle11/backup/20151229/control.sql';
* 공백 / 주석을 제거해야 합니다.
-- 실습환경 만들기
-- 과거 컨트롤 파일로 바꿔줌
cp /oracle11/backup/20151228/control01.ctl /oracle11/oracle/oradata/testdb/control01.ctl
cp /oracle11/backup/20151228/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;
SQL> startup
==> 반드시 control file 재생성 해주어야 함
SQL> shutdown immediate
* 해당 폴더에서 sqlplus 로 접속 후 @control.sql
-- control file 재생성 스크립트 만들기
alter database backup controlfile to trace as '/oracle11/backup/20151230/control.sql';
--장애상황 발생
--old 백업 본으로 현재 control file 덮어쓰기
alter database backup controlfile to '/oracle11/backup/20151230/control_bak.ctl'
drop table scott.recover_test1;
create table scott.recover_test1(a number);
insert into scott.recover_test1 values(1);
insert into scott.recover_test1 values(2);
insert into scott.recover_test1 values(3);
commit;
SQL> shutdown immediate
!cp /oracle11/backup/20151230/control_bak.ctl /oracle11/oracle/oradata/testdb/control01.ctl
!cp /oracle11/backup/20151230/control_bak.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;
-- startup 시 에러 확인
* 컨트롤 파일은 정상인데 시점정보가 맞지 않음(01589)
SQL> alter database noresetlogs;
* controlfile을 이용해서만 noresetlogs 가능(01610)
SQL> alter database resetlogs;
* control 파일은 과거 버전인데 system01.dbf는 최신버전 즉, 다 restore 해야 함(01152)
==> control file 재생성 판단
--shutdown 상태에서 수행
SQL> shutdown immediate
SQL> @/oracle11/backup/20151230/control.sql
SQL> alter database open;
control file 재생성 하기
--장애 상황 만들기
--01. 현재 online redo 확인
select a.group#, a.member, b.bytes/1024/1024 mb, b.sequence# "seq#", b.status, b.archived arc
from v$logfile a , v$log b
where a.group# = b.group#
order by 1,2;
-- inactive 이면서 arc가 YES인 리두로그 파일 확인 및 삭제
!rm /oracle11/oracle/oradata/testdb/redo03.log;
-- control file 확인
select * from v$controlfile;
-- 모든 control file 삭제
!rm /oracle11/oracle/oradata/testdb/control01.ctl;
!rm /oracle11/oracle/flash_recovery_area/testdb/control02.ctl;
-- shutdown immediate로 내릴 경우 에러 확인
SQL > shutdown immediate
SQL > shutdown abort
!cp /oracle11/backup/20151230/control01.ctl /oracle11/oracle/oradata/testdb/control01.ctl
!cp /oracle11/backup/20151230/control01.ctl /oracle11/oracle/flash_recovery_area/testdb/control02.ctl
SQL > startup
SQL > @control.sql (전에 만들어둔 noresetlogs 옵션)
** redo 파일이 없어져서 error
control.sql 파일의 noresetlogs를 resetlogs로 수정 한 후
SQL > @control.sql
SQL > alter database open;
##ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL > alter database open resetlogs;
Database altered.
1. 마운트 상태에서 alter database backup control file to trace as ‘....’; 명령어로 재생성 할 수 있는 스크립트 생성
2. 스크립트를 열어서 no resetlogs case와 resetlogs case를 구분해서 재생성 스크립트를 편집
3. DB shutdown 상태로 만든 후 위 2번에서 만든 스크립트를 실행시켜 DB를 마운트 까지 시킨 후 시작
'Study Note > Database' 카테고리의 다른 글
Log Miner 활용과 Redo log 장애 (0) | 2016.02.26 |
---|---|
Offline 백업 본을 이용한 DB 복구 (0) | 2016.02.26 |
Hot Backup (0) | 2016.02.26 |
Cold Backup (0) | 2016.02.26 |
No Archive log / Archive log (0) | 2016.02.26 |