=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[1] 현재 data file, redo log file 에 이상이 없을 경우
   : 컨트롤 파일 재생성 - noresetlogs
 
1. 장애 발생 (old control file 띄우기)
 
SYS> select name from v$controlfile;
 
NAME
----------------------------------
/home/oracle/disk3/control01.ctl
/home/oracle/disk4/control02.ctl
/home/oracle/disk5/control03.ctl
 
 
SYS> shutdown immediate;
 
SYS> !
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
*.control_files='/home/oracle/disk3/control01.ctl','/home/oracle/disk4/control02.ctl'
#,'/home/oracle/disk5/control03.ctl'
 
 
SYS> starup
 
SYS> select name from v$controlfile;
 
NAME
--------------------------------------------------------------------------------
/home/oracle/disk3/control01.ctl
/home/oracle/disk4/control02.ctl
 
 
SYS> alter system checkpoint;
SYS> /
SYS> /
SYS> /
SYS> /
 
SYS> shutdown immediate;
 
SYS> !
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
*.control_files='/home/oracle/disk3/control01.ctl','/home/oracle/disk4/control02.ctl','/home/oracle/disk5/control03.ctl'
 
 
SYS> startup
ORACLE instance started.
 
Total System Global Area  285212672 bytes
Fixed Size                  1273276 bytes
Variable Size              92275268 bytes
Database Buffers          188743680 bytes
Redo Buffers                2920448 bytes
ORA-00214: control file '/home/oracle/disk3/control01.ctl' version 1128
inconsistent with file '/home/oracle/disk5/control03.ctl' version 1112
 
SYS> shutdown immediate;
 
$ cp /home/oracle/disk5/control03.ctl /home/oracle/disk3/control01.ctl
$ cp /home/oracle/disk5/control03.ctl /home/oracle/disk4/control02.ctl
 
SYS> startup
ORACLE instance started.
 
Total System Global Area  285212672 bytes
Fixed Size                  1273276 bytes
Variable Size              92275268 bytes
Database Buffers          188743680 bytes
Redo Buffers                2920448 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file
 
 
 
2. 해결(복구) 하기
 
① 스크립트로 컨트롤파일 재생성
   ⓐ 스크립트 만들기

 
SYS> select status from v$instance;
 
STATUS
------------------------
MOUNTED
 
 
 

SYS> alter database backup controlfile to trace as '/home/oracle/re11.sql';


 
SYS> shutdown immediate;
 

SYS>!
$ vi /home/oracle/re11.sql
○내용편집○
-- ←주석
주석이나 공백 들어가면 안된다. 나중에 다 지움.
 
실제쓰는 스크립트
noresetlogs용 59~79줄 ;있는 곳까지
resetlogs용 117줄 resetlogs부분만 다름
 
:set nu
:1,58d
G 젤마지막줄
:32,98d  = :32,.d (.은 커서가 있는 위치)
 
!!!!!!!!!스크립트 안에는 절대로 주석이나 공백이 있으면 안된다. (12,13 지우기)
 
주의 :
1. 데이터파일은 무조건 스크립트에 적혀있는 경로밑에 있어야 한다.
2. noresetlogs → 리두로그 문제 없는것 : 리두로그는 스크립트에 적어준 위치에 그대로 있어야 한다.
   resetlogs → 리두로그가 없다고 생각하고, 새로 만들어준다.


 
SYS> exit
 
 
 
 
   ⓑ 스크립트 실행 - DB Open
 

SYS> @re11  → DB shutdown 상태에서 실행해야 한다.


ORACLE instance started.
 
Total System Global Area  285212672 bytes
Fixed Size                  1273276 bytes
Variable Size              92275268 bytes
Database Buffers          188743680 bytes
Redo Buffers                2920448 bytes
 
Control file created.
 

SYS> select status from v$instance;  → 스크립트 실행하면 DB mount상태로 올라온다.


 
STATUS
------------------------
MOUNTED
 
SYS> alter database open;
 
Database altered.
 
SYS> select status from v$instance;
 
STATUS
------------------------
OPEN
 
 
 
 
 
 
 
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[2] 현재 data file, redo log file 에 이상이 있고 백업파일 있을 경우
   : 컨트롤파일 만들지 말고 using backup controlfile 옵션 주고 복구
 
1. 현재 상태 백업
SYS> select name from v$datafile;
SYS> select name from v$controlfile;
SYS> select memberfrom v$logfile;
SYS> shutdown immediate;
SYS> !
$ cp /home/oracle/oradata/testdb/* /data/backup/colse/
 
2. 장애 발생 (old control file 띄우기)
 
SYS> select name from v$controlfile;
 
NAME
----------------------------------
/home/oracle/disk3/control01.ctl
/home/oracle/disk4/control02.ctl
/home/oracle/disk5/control03.ctl
 
 
SYS> shutdown immediate;
 
SYS> !
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
*.control_files='/home/oracle/disk3/control01.ctl','/home/oracle/disk4/control02.ctl'
#,'/home/oracle/disk5/control03.ctl'
 
 
SYS> starup
 
SYS> select name from v$controlfile;
 
NAME
--------------------------------------------------------------------------------
/home/oracle/disk3/control01.ctl
/home/oracle/disk4/control02.ctl
 
 
SYS> alter system checkpoint;
SYS> /
SYS> /
SYS> /
SYS> /
 
SYS> shutdown immediate;
 
SYS> !
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
*.control_files='/home/oracle/disk3/control01.ctl','/home/oracle/disk4/control02.ctl','/home/oracle/disk5/control03.ctl'
 
 
SYS> startup
ORACLE instance started.
 
Total System Global Area  285212672 bytes
Fixed Size                  1273276 bytes
Variable Size              92275268 bytes
Database Buffers          188743680 bytes
Redo Buffers                2920448 bytes
ORA-00214: control file '/home/oracle/disk3/control01.ctl' version 1128
inconsistent with file '/home/oracle/disk5/control03.ctl' version 1112
 
SYS> shutdown immediate;
 
$ cp /home/oracle/disk5/control03.ctl /home/oracle/disk3/control01.ctl
$ cp /home/oracle/disk5/control03.ctl /home/oracle/disk4/control02.ctl
 
SYS> startup
ORACLE instance started.
 
Total System Global Area  285212672 bytes
Fixed Size                  1273276 bytes
Variable Size              92275268 bytes
Database Buffers          188743680 bytes
Redo Buffers                2920448 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/home/oracle/oradata/testdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file
 
 
3. 백업 데이터파일 복원 후 복구 시작
 
SYS> shutdown immediate;
SYS> !cp /data/backup/close/*.dbf /home/oracle/oradata/testdb/  ← 데이터파일만 복원함
SYS> startup mount
 

SYS> recover database until cancle using backup controlfile;


 
선택부분에서 : auto
 
SYS> alter database open resetlogs;
 
 
 
 
 
 
 
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[3] 현재 data file, redo log file 에 이상이 있고 백업 파일 없을 경우 (data file끼리 checkpoint 정보가 다를 경우)
    = 백업 data file없는상태에서 DB비정상 종료되어 checkpoint 정보가 서로 다른 data file을 이용해서 긴급 복구 해야 하는 경우
   : 컨트롤파일 재생성 - resetlogs
 
 
1. 현재 상태 확인 및 백업
 
2. 장애 만들기
 
SYS> create table scott.tt550 (no number);
SYS> insert into scot.tt550 values(1);
SYS> insert into scot.tt550 values(2);
SYS> commit;
 
SYS> shutdown abort;
 
SYS> !rm -fr /home/oracle/oradata/testdb/*.log  ← 모든 redo log file 삭제
SYS> !rm -fr /home/oracle/oradata/testdb/*.ctl  ← 모든 control file 삭제
 
SYS> startup
에러
 
3. 백업된 컨트롤파일 복원
 
SYS> shutdown abort;
SYS> startup
mount까지 오라옴
 
SYS> alter database backup controlfile to trace as '/home/oracle/re12.sql';
SYS> shutdown abort;
SYS> !vi /home/oracle/re12.sql
스크립트 내용편집 : RESETLOGS 로 만든다.
 
SYS> @/home/oracle/re12.sql  → DB shutdown 상태에서 실행
실행되며 MOUNT 상태로 올라간다.
SYS> alter database open resetlogs;
에러
ERRORat line 1:

ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: datafile 1:'/home/oracle/oradata/testdb/system01.dbf'

※ 참고 : 에러메시지 설명
 - 위에서 DB가 종료될때 shutdown abort 로 비정상 종료가 되어 데이터파일끼리 checkpoint 정보가 동기화 되지 않아서 resetlogs 옵션으로
   open 을 할수 없으니 복구를 하라는 내용이다. 그러나 현재 모든 redo log file이삭제가 되었으므로 복구를 할 수 없는 상황.
 - 해결 : 강제로 데이터 파일끼리 checkpoint 정보를 동기화 시켜서 open 시켜준다.
            hidden parameter사용 : 아주 위험하기 때문에 절대로 사용하는 것을 권장하지도 않고 그 결과를 책임짖도 않음. 책임음 본인!!


 
SYS> shutdown immediate;
 

$ vi /home/oracle/product/10g/dbs/inittestdb.ora
(중간생략)
_allow_resetlogs_corruption=true  ← hidden parameter 추가한후 저장
wq!


 
SYS> startup mount;
SYS> alter database open resetlogs;
DB open
 
SYS> select * from scott.tt550;
에러 : DB는 오픈되었지만, redo log file 에 있던 데이터는 복구하지 못했다.
 
 
 
 


종합실습 1 시작=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
상황 : 운영중인 서버의 RAID 장애로 모든파일(DATAFILE, REDO LOG FILE, CONTROL FILE)이 모두 소실.
       백업상태 - 2개월전 컨트롤파일, 어제 DATAFILE
       어제까지의 DATA라도 복구해달라고 요청된 상황
 
에러 발생 과정 --->>>>>>>>
1. 실습상황연출
ⓐ 현재상태확인 및 1-컨트롤파일백업, 2-DATAFILE백업
ⓑ 장애발생 (스토리지 장애로 간주하기 위해 모든 파일 삭제)

$ rm -f /home/oracle/oradata/testdb/*.log
$ rm -f /home/oracle/oradata/testdb/*.ctl
$ rm -f /home/oracle/oradata/testdb/*.dbf
→ 이 상태에서 백업된 데이터파일과 예전 컨트롤 파일을 사용해서 복구해 보기
 
 
해결 과정 --->>>>>>>>
 : 컨트롤파일 재생성해서 복구
1. 복구를 위해 필요한 파일 복원
복구임시경로 : /data/temp/imsy/
 
$ mkdir /data/temp/imsy/
$ cp /data/backup/close/*.dbf /data/temp/imsy/
$ cp /data/backup/close/*.ctl /data/temp/imsy/
 
 
2. 컨트롤 파일 위치 변경 후 마운트
 
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
컨트롤파일경로편집
wq!
 
SYS> startup
DB mount까지 올라가고 에러
 
ORA-01190: control file or data file 1 is from before the last RESETLOGS
ORA-01110: data 1:'/home/oracle/oradata/testdb/system01.dbf'
 
 
3. 컨트롤파일 재생성

SYS> alter database backup controlfile to trace as '/home/oracle/recon.sql';

SYS> !vi /home/oracle/recon.sql
① RESETLOGS로 편집
② LOGFILE 경로 변경
GROUP 1 '/data/temp/imsy/redo01.log' SIZE 5M,
GROUP 2 '/data/temp/imsy/redo02.log' SIZE 5M,
GROUP 3 '/data/temp/imsy/redo03.log' SIZE 5M,
③ DATAFILE 경로 변경
 '/data/temp/imsy/system01.dbf',
 '/data/temp/imsy/sysaux01.dbf',
 '/data/temp/imsy/undotbs01.dbf',
 '/data/temp/imsy/users01.dbf',
 '/data/temp/imsy/example01.dbf',
 '/data/temp/imsy/test01.dbf'

wq!


 
SYS> @/home/oracle/recon.sql  → DB shutdown 상태에서 실행
DB mount단계로 올라옴

 
SYS> select name from v$datafile;
 
 
 
4. DB Open
SYS> alter database open resetlogs;
DB open
 
SYS> set line 200
SYS> col tablespace_name for a10
SYS> col file_name from a50
SYS> col mbfor 9999
SYS> sleect tablespace_name, bytes/1024/1024 MB, file_name
  2  from dba_data_files;
 
SYS> col member for a40
SYS> select a.group#, a.member, b.bytes/1024/1024 MB, b.archive, b.status
  2  from v$logfile a, v$log b
  3  where a.group# = b.group#
  4  order by 1,2;
 
 
 

※ 정리 : 데이터 파일과 checkpoint SCN 정보가 다른 old control file을 이용해서 어떻게 데이터 파일을 복구해 내는가가 핵심.
            즉, 컨트롤 파일 생성을 할 수 있어야 해결 할 수 있는 장애상황.


 
 
종합실습 1 끝=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 
 
 


종합실습 2 시작=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
상황 : 운영중인 서버의 장애로 모든파일(DATAFILE, REDO LOG FILE, CONTROL FILE)이 모두 소실.
       백업상태 - 6개월전 컨트롤파일, 1주일전 Begin backup DATAFILE
       1주일전까지의 DATA라도 복구해달라고 요청된 상황
 
에러 발생 과정 --->>>>>>>>
1. 실습상황연출
ⓐ 현재상태확인 및 1-컨트롤파일백업, 2-체크포인트 여러번 발생
ⓑ 전체 DATAFILE begin backup 받으면서 체크포인트 여러번 발생

SYS> alter tablespace example begin backup;
SYS> !cp /home/oracle/oradata/testdb/example01.dbf /data/backup/open/
SYS> alter tablespace example end backup;
SYS> alter system checkpoint;
SYS> alter system switch logfile;
 
users, sysaux, undotbs1, system 모두 동일 작업 수행
 
 
ⓒ 장애발생 (스토리지 장애로 간주하기 위해 모든 파일 삭제)
$ rm -f /home/oracle/oradata/testdb/*.log
$ rm -f /home/oracle/oradata/testdb/*.ctl
$ rm -f /home/oracle/oradata/testdb/*.dbf
 
SYS> shutdown abort;
 
→ 이 상태에서 백업된 데이터파일과 예전 컨트롤 파일을 사용해서 복구해 보기
 
 
해결 과정 --->>>>>>>>
1. 필요파일 복원
$ cp /data/backup/open/*.dbf /home/oracle/oradata/testdb/
$ cp /data/backup/open/*.ctl /home/oracle/oradata/testdb/
 
SYS> startup
DB mount까지 올라가고 에러
 
ORA-01190: control file or data file 1 is from before the last RESETLOGS
ORA-01110: data 1:'/home/oracle/oradata/testdb/system01.dbf'

 
 
2. 컨트롤파일 재생성

SYS> alter database backup controlfile to trace as '/home/oracle/re.sql';


 
SYS> shutdown immediate;

SYS> !vi /home/oracle/re.sql
→ redo log file 이 삭제되었으므로 RESETLOGS 모드로 생성


wq!
 

SYS> @re   → DB shutdown 상태에서 실행
DB mount단계로 올라옴


 
SYS> alter database open resetlogs;
에러

ORA-01195: online backup of file 1 needs more recovery to be consistent
ORA-01110: data file 1:'/home/oracle/oradata/testdb/system01.dbf'
※ 참고 : 에러메시지 설명
  - 데이터 파일끼리 checkpoint 정보가 달라 파일을 복구할는 메시지


 

SYS> recover database using backup controlfile;  → recovery 시도

아카이브로그 사용한다고 메시지 나오고 선택하라고 함
AUTO
 
 
SYS> alter database open resetlogs;
에러

ORA-01113: file 1 needs media recovery
ORA-01110: data file 1:'/home/oracle/oradata/testdb/system01.dbf'
여전히 복구 안되고 에러난다.
 
SYS> shutdown immediate;
 
※ 이유 : DATAFILE끼리 체크포인트 정보를 동기화 하기 위해서는 redo log file이 있어야 하는데
          모든 redo log file이 삭제된 상태이므로 복구를 할 수 없게 되었다.
          어쩔 수 없이 데이터 파일끼리 체크포인트 정보가 달라도 OPEN을 허용하라는 hidden parameter를 사용한다.


 
 

$ vi /home/oracle/product/10g/dbs/inittestdb.ora
_allow_resetlogs_corruption=true 추가


 
 
SYS> startup mount;
 
SYS> alter database open resetlogs;
DB open완료
 
 
 

※ 정리
 : 데이터 파일과 checkpoint SCN 정보가 다른 old control file을 이용해서 어떻게 데이터 파일을 복구해 내는가가 핵심.
   즉, 컨트롤 파일 생성을 할 수 있어야 해결 할 수 있는 장애상황.
 
 : DATAFILE들의 체크포인트 정보를 동기화 할수 없기 때문에(begin backup 파일 & redo log file 없음)
   히든 파라미터를 사용하여 강제로 OPEN 시킴.
 
 : 이렇게 히든 파라미터를 사용하여 DB를 강제로 open 하게 되면 데이터들의 정합성이 틀어지게 된다.
   그리고 과거에 백업 받았던 파일은 사용 할 수 없게 된다.
   그래서 open 후 다시 정상 종료를 한 후 전체백업을 수행 해 주어야 한다.


 
 
종합실습 2 끝=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 
Posted by 딩구르
,