Control file 관리하기.


- Control File은 Binary File라서 Control file 내용을 DBA가 직접 수정할 수 없음.

- 내용 변경 시 Server Process에게 변경을 요구하는 SQL문장이나 DDL 문장을 수행해야한다.

- Instance가 Mount이상의 상태일 때 Control File의 내용이 실시간으로 변경되고 조회된다.

- 삭제 시 복구를 위해 여러곳에 복사본을 만들어 다중화 하는것을 권장함.


1. Spfile일 경우 다중화 하는 방법.

1)Control file 경로 확인 및 인스턴스 상태 확인.


SQL> show parameter control

 

NAME     TYPE VALUE

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

control_file_record_keep_time     integer 7

control_files     string /u01/app/oracle/oradata/PROD/control01.ctl

 

control_management_pack_access     string DIAGNOSTIC+TUNING


SQL> select status from v$instance;

 

STATUS

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

OPEN


SQL> show parameter spfile

 

NAME     TYPE    VALUE

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

spfile     string      /u01/app/oracle/product/11.2.0 /dbhome_1/dbs/spfilePROD.ora


2) 현재 Control file 조회.

 SQL> select name from v$controlfile;

 

NAME

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

/u01/app/oracle/oradata/PROD/control01.ctl

 



3) Spfile의 내용을 변경 후 Instance 종료.

 SQL> alter system set control_files='/home/oracle/disk1/control01.ctl', 

  2  '/home/oracle/disk2/control02.ctl',

  3  '/home/oracle/disk3/control03.ctl' scope=spfile;

 


4) 대상 디렉토리 생성 및 파일 복사.


[oracle@edydr1p0-PROD ~]$ mkdir disk1 disk2 disk3

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk1/control01.ctl

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk2/control02.ctl

[oracle@edydr1p0-PROD ~]$ cp /u01/app/oracle/oradata/PROD/control01.ctl /home/oracle/disk3/control03.ctl

 


5)Instance statup 후 Controlfile 다중화 확인.

 SQL> startup

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   322963408 bytes

Database Buffers   88080384 bytes

Redo Buffers     4288512 bytes

Database mounted.

Database opened.

SQL> show parameter control

 

NAME     TYPE VALUE

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

control_file_record_keep_time     integer 7

control_files     string /home/oracle/disk1/control01.c

tl, /home/oracle/disk2/control

02.ctl, /home/oracle/disk3/con

trol03.ctl

control_management_pack_access     string DIAGNOSTIC+TUNING


SQL>select name from v$controlfile;

 

NAME

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

/home/oracle/disk1/control01.ctl

/home/oracle/disk2/control02.ctl

/home/oracle/disk3/control03.ctl

 



2. Pfile 다중화 방법.


환경구성.

- 현재 spfile 사용중이므로, pfile 생성.

- pfile 사용하기 위해서는 기존의 spfile을 지워야한다.


 SQL> create pfile from spfile;


[oracle@edydr1p0-PROD dbs]$ pwd

 

/u01/app/oracle/product/11.2.0/dbhome_1/dbs

 

[oracle@edydr1p0-PROD dbs]$ rm -f spfilePROD.ora 


SQL> show parameter pfile

 

NAME     TYPE VALUE

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

 

spfile     string


* VALUE에 아무내용이 없으면 pfile 사용한다는 뜻.



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


SQL> shutdown immediate;

 


2 )pfile 에서 Control file 경로 수정.

 [oracle@edydr1p0-PROD dbs]$ vi initPROD.ora 

 

PROD.__db_cache_size=83886080

PROD.__java_pool_size=4194304

PROD.__large_pool_size=4194304

PROD.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

PROD.__pga_aggregate_target=167772160

PROD.__sga_target=251658240

PROD.__shared_io_pool_size=0

PROD.__shared_pool_size=142606336

PROD.__streams_pool_size=8388608

*.control_files='/home/oracle/disk1/control01.ctl','/home/oracle/disk2/control02.ctl','/home/oracle/disk3/control03.ctl'

*.db_block_size=8192

*.db_name='PROD'

*.memory_target=400M

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

 


기존에 사용하는 Control file 01,02,03 -> 04,05,06 으로 변경

 *.control_files='/home/oracle/disk4/control04.ctl','/home/oracle/disk5/control05.ctl','/home/oracle/disk6/control06.ctl'


3)해당 디렉토리 생성 후 Controlfile 복사

 [oracle@edydr1p0-PROD ~]$ mkdir disk4 disk5 disk6


[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk4/control04.ctl

[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk5/control05.ctl

[oracle@edydr1p0-PROD ~]$ cp /home/oracle/disk1/control01.ctl /home/oracle/disk6/control06.ctl


4) 정상 오픈 후 확인

 SQL> startup

ORACLE instance started.

 

Total System Global Area  417546240 bytes

Fixed Size     2213936 bytes

Variable Size   327157712 bytes

Database Buffers   83886080 bytes

Redo Buffers     4288512 bytes

Database mounted.

Database opened.


SQL> select name from v$controlfile;

 

NAME

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

/home/oracle/disk4/control04.ctl

/home/oracle/disk5/control05.ctl

/home/oracle/disk6/control06.ctl