Chap 15. Parameter File 장애 복구


Parameter file 은 DB 시작 단계 중 startup 에서 no mount 단계로 가기 위해 꼭 필요한 설계도 같은 파일이다.

pfile 과 spfile 두 가지 종류의 parameter file 이 있는데, pfile 은 initSID.ora 라는 이름의 수정가능한 일반 텍스트 파일이고, spfile 은 spfileSID.ora 란 이름의 바이너리(binary) 파일이라 사람이 직접 수정할 수 없다. spfile 은 DBA가 server process 에게 적절한 SQL을 수행히여 변경시켜야 한다.

Parameter file 의 경로는 $ORACLE_HOME/dbs 에 존재하는데 만약 spfile 과 pfile 이 동시에 존재할 경우 spfile 만 사용해서 oracle 을 구동한다. 


  1. Parameter file 이 없는 상태에서 pfile 생성하기    

모든 parameter file이 삭제되었을 경우, 최초 설치시 생성되었던 parameter file 을 활용해서 pfile 을 생성해 보자.

 

-- 현재 parameter file 상태 (spfile 을 사용중이다.)
SYS> show parameter spfile   


NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
spfile                   string  /app/oracle/product/11g/dbs/sp                          filetestdb.ora  


-- 장애 상황을 만들기 위해 DB 을 종료 한 후 모든 parameter file 을 삭제.
SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> !
[oracle@chan ~]$ cd $ORACLE_HOME/dbs
[oracle@chan dbs]$ ls -l
total 24
-rw-rw---- 1 oracle oinstall 1544 Aug 19 19:47 hc_DBUA0.dat
-rw-rw---- 1 oracle oinstall 1544 Aug 19 20:02 hc_testdb.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r----- 1 oracle oinstall   24 Aug 19 19:51 lkTESTDB
-rw-r----- 1 oracle oinstall 1536 Aug 19 19:54 orapwtestdb
-rw-r----- 1 oracle oinstall 2560 Aug 19 19:54 spfiletestdb.ora  


-- spfile 삭제
[oracle@chan dbs]$ rm -f spfiletestdb.ora     


-- 최초 설치시 만들어진 원본 pfile 복사
[oracle@chan dbs]$ ls -l $ORACLE_BASE/admin/testdb/pfile
total 4
-rw-r----- 1 oracle oinstall 1777 Aug 19 19:50 init.ora.7192013195444
[oracle@chan dbs]$ cp $ORACLE_BASE/admin/testdb/pfile/init.ora.7192013195444 inittestdb.ora
[oracle@chan dbs]$ ls -l
total 24
-rw-rw---- 1 oracle oinstall 1544 Aug 19 19:47 hc_DBUA0.dat
-rw-rw---- 1 oracle oinstall 1544 Aug 19 20:02 hc_testdb.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r----- 1 oracle oinstall 1777 Aug 19 20:04 inittestdb.ora
-rw-r----- 1 oracle oinstall   24 Aug 19 19:51 lkTESTDB
-rw-r----- 1 oracle oinstall 1536 Aug 19 19:54 orapwtestdb
[oracle@chan dbs]$ exit
exit  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
Database opened.                    -- 이상없이 open.
SYS> 
SYS> show parameter spfile;  


NAME                     TYPE    VALUE
------------------------ ------- ------------------------------
spfile                   string

 

  2. pfile, spfile 만들기    

1) pfile로 부터 spfile 만들기

SYS> !ls -l /app/oracle/product/11g/dbs/*.ora
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 /app/oracle/product/11g/dbs/init.ora
-rw-r----- 1 oracle oinstall 1777 Aug 19 20:04 /app/oracle/product/11g/dbs/inittestdb.ora


SYS> create spfile from pfile;  


File created.  


SYS> !ls -l /app/oracle/product/11g/dbs/*.ora
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 /app/oracle/product/11g/dbs/init.ora
-rw-r----- 1 oracle oinstall 1777 Aug 19 20:04 /app/oracle/product/11g/dbs/inittestdb.ora
-rw-r----- 1 oracle oinstall 2560 Aug 19 20:10 /app/oracle/product/11g/dbs/spfiletestdb.ora

 

2) spfile로 부터 pfile 만들기

-- pfile 삭제
SYS> !rm -f /app/oracle/product/11g/dbs/inittestdb.ora  


SYS> !ls -l /app/oracle/product/11g/dbs/*.ora
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 /app/oracle/product/11g/dbs/init.ora
-rw-r----- 1 oracle oinstall 2560 Aug 19 20:10 /app/oracle/product/11g/dbs/spfiletestdb.ora  


-- 다시 pfile 생성

SYS> create pfile from spfile;  


File created.  


SYS>  !ls -l /app/oracle/product/11g/dbs/*.ora
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 /app/oracle/product/11g/dbs/init.ora
-rw-r--r-- 1 oracle oinstall  905 Aug 19 20:18 /app/oracle/product/11g/dbs/inittestdb.ora
-rw-r----- 1 oracle oinstall 2560 Aug 19 20:18 /app/oracle/product/11g/dbs/spfiletestdb.ora  


SYS> !rm -f /app/oracle/product/11g/dbs/spfiletestdb.ora  


SYS> !ls -l /app/oracle/product/11g/dbs/*.ora
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 /app/oracle/product/11g/dbs/init.ora
-rw-r--r-- 1 oracle oinstall  905 Aug 19 20:18 /app/oracle/product/11g/dbs/inittestdb.ora

 

by 짱구를꼭말려 2013. 9. 26. 21:35

Chap 14. Recovery 원리


  1. Recovery 단계    

- DB 에서 startup 이나 recover 명령어를 입력했을 때 서버 프로세스는 먼저 control file 을 읽어서 문제가 있는지 없는지 확인한다. 아래는 Oracle 이 startup 되는 단계이다. 

1) nomount

서버 프로세스가 parameter file (pfile, / spfile) 을 PGA 로 읽어와서 해당 parameter file 에 지정한 대로 instance 를 생성하는 단계이다. 


2) mount

여기서는 parameter file 에 기록되어 있는 위치에서 control file 을 읽어서 장애를 복구하거나, 유지 관리 작업 (rename file, drop file 등등) 들을 하는 단계이다. 자세한 순서는 아래와 같다. 

* CKPT 프로세스가 모든 control file 을 읽고 일시적으로 lock 설정을 한다. 

* control file header 정보를 확인해서 이상이 없는지 체크한다. 그리고 mountID 를 계산해서 control file 에 저장한다. 

* Parameter file 의 database name 과 control file 의 DB name 이 동일한지 체크한다. 

* 위 과정까지 이상이 없다면 alert log file 에 "Successful mount of redo Thread" 라는 메세지를 기록한 후 "Database mounted~~" 라는 메세지를 기록한다. 


3) open

Data file header 부분의 정보와 control file 의 정보를 서로 비교해서 장애 유무를 판단한다. 이때 사용되는 것이 checkpoint SCN 정보이다. 이 SCN 이 이상이 없을 경우 DB는 문제가 없다고 판단하고 정상 open 된다.  


  2. Recovery 원리    

1) Control file  내의 Data file records 부분의 checkpoint cnt 부분의 숫자를 가지고 data file의 checkpoint cnt 번호와 동일한지 비교한다. 만약 이 부분이 문제가 없다면 다음 단계를 진행한다. 

2) 각 data file 의 header 에 있는 checkpoint SCN 이 control file 안에 있는 stop scn 번호와 동일한지 비교 후. 모두 일치 하면 복구할 필요가 없지만 불일치 하면 복구를 시도한다. 

3) 복구가 필요할 경우, data file 에 부족한 scn 중에서 가장 낮은 scn 이 몇 번인지 확인후 control file 안에 있는 log file records 를 찾아간다. data file 과 control file 에서 차이나는 scn 부분을 redo log file 을 뒤져서 low scn 부분을 확인, 필요한 내용이 들어있는 파일을 찾아낸다. 그리고 그 경로로 찾아가서 복구해야 하는 내용을 읽어서 필요한 로그 파일을 순차적으로 적용시킨다. 

4) 적당한 redo log file 을 찾으면 가장 낮은 scn 번호부터 roll forward 한다.

5) roll forward 가 끝나면 commit 이 수행되지 않은 transaction 을 찾기위해 undo$ 딕셔너리를 찾아본다. 거기서 active 한 undo segment 를 찾고 commit 안된 데이터를 roll backward 한다. 


  3. Recovery 종류   

1) Crash Recovery (Instance recovery)

- 운영 중이던 DB 가 비 정상적으로 종료된 것을 startup 시에 automatically 하게 recovery 하는 것을 의미한다. 

- 이 때는 online redo log file 만 사용된다.

2) Media Recovery

- 위의 Instance recovery 시에 file 삭제나 disk fail 등의 이유로 Instance recovery 가 실패할 경우 DBA 가 수동으로 백업 파일 등을 복원한 후 online redo log file 과 archive redo log fie 등을 사용하여 recovery 해야 하는데 이것을 Media Recovery 라고 한다.

by 짱구를꼭말려 2013. 9. 23. 00:42