DB/Oracle

[Backup&Recovery] (1) pfile,spfile을 이용한 control file 관리

밍구멍구 2023. 3. 14. 15:53
테스트 시나리오
1) pfile을 사용하여 control file 위치를
    - /home/ora12c/disk1/control01.ctl,
    - /home/ora12c/disk2/control02.ctl,
    - /home/ora12c/disk3/control03.ctl 로 구성

2) spfile을 이용하여 
    - /home/ora12c/disk4/control01.ctl,
    - /home/ora12c/disk5/control02.ctl,
    - /home/ora12c/disk6/control03.ctl 로 구성

 

pfile을 이용하여 contro file 위치 변경 작업
더보기

0. 이중화할 디렉토리 생성

[ora12c@oraclevm ~]$ mkdir disk1
[ora12c@oraclevm ~]$ mkdir disk2
[ora12c@oraclevm ~]$ mkdir disk3

 

1. 파일 백업 전 DB 기동 중지

   (컨트롤파일의 경우 실시간으로 기록되는 내용으로 백업 시점이 다를경우 백업 후 한 작업에 대해선 깨질 수 있음)

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

 

2. 기존 컨트롤 파일 복사

   (컨트롤파일이 없을 경우 DB기동할 때 ORA-00205 에러 발생하여 컨트롤 파일 찾지 못한 채 기동)

[기존 컨트롤파일]
$ORACLE_BASE/oradata/SID 에 위치

[ora12c@oraclevm ORA12C]$ ls -lrt | grep "control*"
-rw-r-----. 1 ora12c dba  10600448 Mar 14 15:35 control01.ctl
-rw-r-----. 1 ora12c dba  10600448 Mar 14 15:35 control02.ctl
-rw-r-----. 1 ora12c dba  10600448 Mar 14 15:35 control03.ctl

[copy를 통해 disk1/disk2/disk3에 컨트롤 파일 copy 진행]

[ora12c@oraclevm ORA12C]$ cp control01.ctl /home/ora12c/disk1/
[ora12c@oraclevm ORA12C]$ cp control02.ctl /home/ora12c/disk2/
[ora12c@oraclevm ORA12C]$ cp control03.ctl /home/ora12c/disk3/

 

3. pfile 수정

 

경로 : $ORACLE_HOME/dbs

#*.control_files='/ora_engine/12c/oradata/ORA12C/control01.ctl','/ora_engine/12c/oradata/ORA12C/control02.ctl'
*.control_files='/home/ora12c/disk1/control01.ctl','/home/ora12c/disk2/control02.ctl','/home/ora12c/disk3/control03.ctl'

 

4. Database 기동 후 control file 확인

SQL> startup
ORACLE instance started.

Total System Global Area 1241513984 bytes
Fixed Size                  8620176 bytes
Variable Size             452986736 bytes
Database Buffers          771751936 bytes
Redo Buffers                8155136 bytes
Database mounted.
SQL> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /home/ora12c/disk1/control01.ctl, /home/ora12c/disk2/control02.ctl, /home/ora12c/disk3/control03.ctl

SQL> select name
  2  from v$controlfile;

NAME
--------------------------------------------------------------------------------
/home/ora12c/disk1/control01.ctl
/home/ora12c/disk2/control02.ctl
/home/ora12c/disk3/control03.ctl

 

spfile을 이용하여 contro file 위치 변경 작업
더보기

0. 1번예제 바탕으로 생성된 pfile을 이용해서 spfile 생성 및 확인

SQL> create spfile from pfile;

File created.

SQL> ! ls /ora_engine/12c/dbhome_1/dbs
hc_ORA12C.dat  init.ora  initORA12C.ora  lkORA12C  orapwORA12C  spfileORA12C.ora

 

1. pfile 삭제 후 기동하여 spfile을 사용하도록 변경

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> !rm -f /ora_engine/12c/dbhome_1/dbs/initORA12C.ora

SQL> ! ls /ora_engine/12c/dbhome_1/dbs
hc_ORA12C.dat  init.ora  lkORA12C  orapwORA12C  spfileORA12C.ora

SQL> startup
ORACLE instance started.

Total System Global Area 1241513984 bytes
Fixed Size                  8620176 bytes
Variable Size             452986736 bytes
Database Buffers          771751936 bytes
Redo Buffers                8155136 bytes
Database mounted.
Database opened.

SQL> show parameter spfile; 
/*value에 출력된다면 현재 spfile이용중*/

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /ora_engine/12c/dbhome_1/dbs/spfileORA12C.ora

 

2. 설정 값 변경 전 control file 백업 진행

SQL> !cp -av /home/ora12c/disk1/control01.ctl /home/ora12c/disk4/control1.ctl
‘/home/ora12c/disk1/control01.ctl’ -> ‘/home/ora12c/disk4/control1.ctl’

SQL> !cp -av /home/ora12c/disk2/control02.ctl /home/ora12c/disk5/control2.ctl
‘/home/ora12c/disk2/control02.ctl’ -> ‘/home/ora12c/disk5/control2.ctl’

SQL> !cp -av /home/ora12c/disk3/control03.ctl /home/ora12c/disk6/control3.ctl
‘/home/ora12c/disk3/control03.ctl’ -> ‘/home/ora12c/disk6/control3.ctl’

 

3. 설정 값 변경

SQL> alter system set control_files='/home/ora12c/disk4/control1.ctl','/home/ora12c/disk5/control2.ctl','/home/ora12c/disk6/control3.ctl' scope=spfile;

System altered.

 

4. DB 재기동 

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.
Total System Global Area 1241513984 bytes
Fixed Size                  8620176 bytes
Variable Size             452986736 bytes
Database Buffers          771751936 bytes
Redo Buffers                8155136 bytes
Database mounted.
Database opened.

 

5. controlfile 경로 변경되어있는지 확인

SQL> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /home/ora12c/disk4/control1.ctl, /home/ora12c/disk5/control2.ctl, /home/ora12c/disk6/control3.ctl

SQL> select name
  2  from v$controlfile;

NAME
--------------------------------------------------------------------------------
/home/ora12c/disk4/control1.ctl
/home/ora12c/disk5/control2.ctl
/home/ora12c/disk6/control3.ctl