1. 장애유형 1 : 파라미터파일의 경로와 실제 파일 경로 다른 겨우

parameter → control file
01.ctl       01.clt
02.clt       02.clt
03.clt       x

 
해결 : 둘을 맞춘다.
 
 
 
2. 장애유형 2 : 컨트롤 파일끼리 내용이 다를 경우
 
→ Version error을 띄우고 DB 에러
 

01.clt - version 100
02.clt - version 100
03.clt - version 90

※ 버전 번호 큰 것이 최신이다.
 
해결 : 번호가 큰 최신파일을 작은 파일로 덮어쓴다.
 
 
 
3. 장애유형 3 : old control file

→ 원인 : control file 의 체크포인트정보가 데이터파일의 체크포인트 정보보다 예전 내용이기 때문
control 100
data 95      이면 redo log/archive redo log 이용해서 복구 (control > data)
 
control 90
data 100     이면 old control file뜬다. (control < data)


 
해결법 : 컨트롤파일 SCN을 datafile에 맞추면 된다. → 재생성
 
 

※ DB를 오픈시키는 방법 2가지 - 상황에따라 사용하는 컨트롤 파일이 다름
 
★ 각 상황에따라 사용하는 컨트롤 파일이 다르다.
① noresetlogs : 정상상황
② resetlogs : 특별한 장애가 있을때
 
※ 두가지중 컨트롤 파일 새로 만들때
기준 : resetlogs = 리두로그파일이 문제 있을때
         noresetlogs = 리두로그파일 이상 없을때
  
▶ 정보를 어디선가 가지고 와서 다시 만든다 = data file에서 가지고 온다.
→ 무조건 data file은 있어야 한다.
 
참고 : 그외 컨트롤 파일 새로 생성하는 경우
  - DB이름 바꿀때.
  - 테이블 제한개수 늘리고 싶을때.


 

 
 

0. 사전작업 : 올드컨트롤 띄우기
백업받아놓은 파일을 덮어 씌우면
/system01.dbf
컨트롤 파일과 데이터파일의 정보를 비교 - old control file 에러뜬다.
→ 무조건 마운트까지 올라온다.
   open으로 가기위해 데이터파일을 검사했는데 체크포인트SCN이 (control < data)인 상황이다.
 
해결: 컨트롤파일을 다시 만든다.
 
 
1. 컨트롤 파일 다시 만드는 스크립트
마운트까지 올라왔다는 소리는 컨트롤파일이 열려 있는 상태
→ 현재 컨트롤 파일을 이용해서, 스크립트를 오라클이 만들어 준다.(107p)
 
 

2. Old control file 에러 해결방법 : 유형1,2,3
  - DBA가 컨트롤파일 관리를 잘못해서 뜨는 old control file에러,
    다중화가 잘못되어 있어서 control file 전체가 삭제되는 장애 해결
 
 

① - 유형1 : 현재 datafile, redo log file 이상없을경우
 
1.컨트롤 파일 다시 만드는 스크립트
SQL> alter database backup controlfile to trace as '/home/oracle/a.sql'
 
2.컨트롤 파일은 shutdown상태에서만들어야 한다.
디비 끄고> shutdown immediate;
 
$ vi a.sql
-- ←주석
주석이나 공백 들어가면 안된다. 나중에 다 지움.
 
실제쓰는 스크립트
noresetlogs용 59~79줄 ;있는 곳까지
resetlogs용 117줄 resetlogs부분만 다름
 
:set nu
:1,58d
G 젤마지막줄
:22,98d  = :22,.d (.은 커서가 있는 줄 위치)
 
!!!!!!!!!스크립트 안에는 절대로 주석이나 공백이 있으면 안된다. (12,13 지우기) → 만들어지다가 에러남
 
※ 주의사항 :
ⓐ 데이터파일은 무조건 스크립트에 적혀있는 경로밑에 있어야 한다.
   원리 : 컨트롤파일을 다시만들어라 → 적어놓은 데이터파일로 찾아가서 정보를 끌어온다.
 
ⓑ noresetlogs → 리두로그 문제 없는것 : 리두로그는 스크립트에 적어준 위치에 그대로 있어야 한다.
   resetlogs → 리두로그가 없다고 생각하고(데이터 파일만 정보르 가지고 온다) → 새로 만들어준다.
 
3. DB 꺼진상태에서
SQL> @a
리두로그가 문제가 없다고 생각되어서 noresetlogs로 만들었는데,
오라클이 실제로 가서보니 문제가 있어서 에러 띄우는 경우가 있다.
→ 리두로그가 문제가 되면 어쩔수 없이 resetlog로 만들어야 한다.
해결법 : 스크립트 열어서 NORESETLOGS → NO만 지워주면 된다.
 
 
4. 컨트롤 파일 만들고나면 상태는 mount
 
SQL> alter database open;  → noresetlogs일때
SQL> alter database open resetlogs; → resetlogs일때
 
 
파라미터 파일에 적힌 경로대로 만들어진다.



응용 : DB가 싸그리 다 깨져도 데이터파일만 있으면 디비 살려낼수 있다.
ex)
스토리지가 날아가서 DB날림, begin backup 받은 데이터파일만 있는경우
VMware에 SID같게 오라클 설치해서, mount로 올린다.
스크립트 만들어서 경로 바꾸고, scp로 넘긴후 resetlogs로 open시킨다.


 

주의사항 정리
1. resetlogs 인지 noresetlog인지 정확히 구분하라.
2. 스크립트안에 주석이나 공백이 있으면 생성도중 에러난다.
3. noresetlog 일때, redo log file이 전부 해당 경로에 있어야 한다.
4. resetlog 일때, redo log file은 open될때 새로 생성된다.
5. 데이터 파일은 스크립트 내의 경로에 실제로 존재해야 한다.
6. 컨트롤파일의 생성위치는 파라미터 파일에 지정된 경로이다.
7. 컨트롤파일을 재생성 하기 위해서는 datafile끼리는 checkpoint 정보가 모두 동일해야 한다.
    checkpoint 정보가 다를경우 재생성 후 open 단계에서 에러가 발생한다.


 
   ※ begin backup을 받으면 checkpoint정보가 다 다르다. → 새로 만들게되면 recover해야한다.(121p)

② - 유형2 : 현재 data file, redo log file에 이상이 있고 백업파일이 있을 경우
   해결 : 백업된 datafile을 복구하고, controlfile 만들지말고 using backup controlfile 이란 옵션을 주고 복구한다.
 


 
 
 
 

③ - 유형3 : 현재 datafile, redo log file에 이상이 있고 백업파일이 없을 경우
  해결 : 백업된 컨트롤파일복원
         데이터파일끼리 checkpoint 정보가 동기화 되지 않아서 resetlog 옵션으로 open 할수 없는 경우
         → 모든 redo log file이 삭제되어 복구 할수 없는 상황
         강제로 데이터파일끼리 checkpoint 정보를 동기화 시켜서 open 시키는 hidden parameter를 사용해야 한다.
       $ vi /home/oracle/product/10g/dbs/inittestdb.ora
        _allow_resetlogs_corruption=true 추가


Posted by 딩구르
,