반응형

Control 파일Database가 운영될 때 실시간으로 각종 정보가 저장되고 또 조회가 된다. 

이 파일에 장애가 발생할 경우 Instance가 실패되어 중단되므로 잘 관리해야함


컨트롤 파일 관리하기

컨트롤 파일이 삭제 될 경우 아주 심각한 문제가 발생하기 때문에 이 파일이 삭제되지 않도록 주의해야 하며, 혹시나 삭제되더라도 복구할 수 있도록 여러곳에 복사본을 만들어 분산시켜 관리하는것을 권장 ( 이를 Multiplexing - 다중화 라고 한다 )


DBA가 startup을 실행하면 parameter file을 읽은 후 control file 의 위치를 확인 후 해당 control file들을 메모리로 불러와 내용을 확인. 다중화 할 경우 parameter file 에 control file 위치를 기록한 후 그 위치에 control file을 복사해 두 면 된다.


실습 1. spfile 일 경우 다중화 하는 방법

SQL> show parameter spfile ; 을 이용해 spfile로 실행하는지 확인  (value 값이 있으면 spfile )


step 1. 현재 control file 조회

(11g)

SQL> select name from v$controlfile ;


NAME

-----------------------------------------

/app/oracle/oradata/testdb/control01.ctl

/app/oracle/fast_recovery_area/testdb/control02.ctl


step 2. spfile 의 내용을 변경한 후 Instance 종료

SQL> alter system set control_file='/home/oracle/disk1/ctrl01.ctl' ,

'/home/oracle/disk2/ctrl02.ctl' ,

'/home/oracle/disk3/ctrl03.ctl'  scope = spfile ;

System altered.

SQL> shutdown immediate ;


step 3. 대상 디렉토리를 생성하고 파일을 복사

SQL>!

[oracle@ ~]$ cd /home/oracle

[oracle@ oracle]$ mkdir disk1 disk2 disk3

[oracle@ oracle]$ cp /app/oracle/oradata/testdb/control01.ctl    /home/oracle/disk1/control01.ctl

[oracle@ oracle]$ cp /app/oracle/oradata/testdb/control01.ctl    /home/oracle/disk2/control02.ctl

[oracle@ oracle]$ cp /app/oracle/oradata/testdb/control01.ctl    /home/oracle/disk3/control03.ctl

[oracle@ oracle]$ exit


step 4. startup 시켜서 확인

SQL> startup


SQL> select name from v$controlfile ;


NAME

----------------------------

 /home/oracle/disk1/control01.ctl

 /home/oracle/disk2/control02.ctl

 /home/oracle/disk3/control03.ctl


순서 : spfile 의 내용변경 -> Instance 종료 -> control file 복사 -> Instance Open



실습 2. pfile 일 경우 다중화 하는 방법

현재 spfile 이므로 spfile 삭제하고 pfile 생성


SQL> create pfile from spfile ;


SQL> !rm -rf $ORACLE_HOME/dbs/spfiletestdb.ora

SQL> shutdown immediate ;

SQL> startup


SQL> show parameter pfile ;          <- pfile 로 열었기 때문에 value 값이 비어있어야 한다


step 1. 현재 사용중인 control file 조회

SQL> select name from v$controlfile ;


NAME

-----------------------------

 /home/oracle/disk1/control01.ctl

 /home/oracle/disk2/control02.ctl

 /home/oracle/disk3/control03.ctl


위에서 조회된 control file의 위치를 

/home/oracle/disk4/control01.ctl

/home/oracle/disk5/control02.ctl

/home/oracle/disk6/control03.ctl     로 다중화


step 2. instance 종료

SQL> shutdown immediate ;


step 3. pfile 에서 control file의 경로를 수정한 후 저장

SQL> !vi $ORACLE_HOME/dbs/inittestdb.ora


*.control_files='/home/oracle/disk4/control01.ctl' ,

         '/home/oracle/disk4/control01.ctl' ,

   '/home/oracle/disk4/control01.ctl'

찾아서 변경


step 4. 해당 디렉토리를 생성 후 control file 복사

SQL> !

[oracle @localhost ~]$ cd /home/oracle

[oracle @localhost oracle]$ mkdir disk4 disk5 disk6

[oracle @localhost oracle]$ cp /home/oracle/disk1/control01.ctl    /home/oracle/disk4/control01.ctl

[oracle @localhost oracle]$ cp /home/oracle/disk1/control01.ctl    /home/oracle/disk5/control02.ctl

[oracle @localhost oracle]$ cp /home/oracle/disk1/control01.ctl    /home/oracle/disk6/control03.ctl

[oracle @localhost oracle]$ exit


step 5. startup 해서 확인

SQL> startup

SQL> select name from v$controlfile ;


NAME

--------------------------------------

 /home/oracle/disk4/control01.ctl

 /home/oracle/disk5/control02.ctl

 /home/oracle/disk6/control03.ctl


pfile 의 경우 step3 과 step4 의 과정을 바꾸어도 상관없다. 그러나 나머지 순서는 바뀌면 장애가 발생하니 순서에 주의


control file 에는 변경되는 정보가 실시간으로 저장되기 때문에 가장 최근에 사용한 것만 진짜 control file 이고 나머지는 사용할 수 없는 control file이 되므로 이동이나 복사할때 최근 사용한 것으로 해야 한다.


반응형

'오라클 > 관리 실무' 카테고리의 다른 글

Oracle 저장구조  (0) 2014.10.23
Tablespace 와 Data File 관리하기  (2) 2014.10.21
Redo Log 관리하기  (0) 2014.10.20
ORACLE 시작하기 & 종료하기  (0) 2014.10.20
Oracle Background Process  (0) 2014.10.17
SQL 문장의 실행 원리  (0) 2014.10.17
Oracle Architecture  (2) 2014.10.17

+ Recent posts