Legacy/Oracle Exadata

[ORACLE] ASM사용하는 RAC 환경에서 컨트롤파일 이중화 하기

learndba 2024. 12. 25. 17:07
- OS : Oracle Linux
- Machine : Oracle Exadata
- Disk : ASM
- Database version : Oracle EE 19.*



프로젝트 후에 SM 운영팀이 인수하기 위해
여러가지 점검을 하던 중,
컨트롤 파일이 다중화 되어있지 않은 항목을 체크하였다.
웬만하면 빠르게 빠르게 받으려고 하는데
아무래도 이건 좀..
장애났을 때 복구하기 어려운 상황이 될 수도 있으므로
빠르게 조치를 해주자


일반적으로 Single Database filesystem에서 컨트롤 파일 다중화를 한다고 하면,

1. SQL > show parameter spfile;
  SQL >  show parameter controlfile;


1-1) spfile인 경우
  SQL > alter system set controlfile_files=‘현재위치/control01.ctl‘,’새로만들어줄위치/control02.ctl’ scope=spfile;
  SQL> shutdown immediate;
  SQL > cp 현재위치/control01.ctl 새로만들어줄위치/control02.ctl
  SQL> startup;
  SQL> show parameter control_files;

1-2) pfile인 경우
SQL> shutdown immediate;
SQL> cp 현재위치/control01.ctl 새로만들어줄위치/control02.ctl
SQL> vi $ORACLE_HOME/dbs/init$SID.ora — control_files위치 수정 후 저장
SQL> startup;
SQL> show parameter control_files;

이런식으로 아주 간단한 구조를 띄고 있다.


그러나 RAC를 사용한다고 하면 체크해야할 것이 더 있는데,
✔️모든 노드가 동시에 접근 가능한 디렉토리가 있는가?
✔️모든 노드에서 같은 spfile로 기동이 되는가?
✔️모든 node에서 controlfile의 위치가 동일한가?


이런 규칙에 따라 RAC는 single database와 다르게
다른 방식으로 컨트롤 파일을 다중화한다.

1. 현재 상태 확인

SQL > show parameter spfile; 
         —spfile 위치 확인
SQL > show parameter controlfiles;
         — controlfile 위치 확인 ,
ASM 영역을 사용 중이였음
‘+DATA1/DB명/CONTROLFILE/currentxxx.12345678’;
[root#] crsctl status res -t  
           —현재 클러스터 상태 확인
[root#] ps -ef | grep d.bin | wc -l
           — 현재 crs상태확인

클러스터를 내리는 것은 아니라 영향도는 없겠지만
그래도 RAC 작업일 땐 모두 백업해두는 습관을 들이자.


2. Database shutdown

SQL> srvctl stop database -d database_name -i instance_name1
SQL> srvctl stop database -d database_name -i instance_name2

SQL> srvctl stop database -d datbase로 한번에 내려도 되긴 하다.

3. Startup nomount;

4. Controlfile restore(copy)

[oracle#] rman target /
RMAN > restore controlfile to ‘+RECO1’ from ‘+DATA1/DB명/CONTROLFILE/currentxxx.12345678’;


5. Controlfile 확인

[oracle#] asmcmd -p
[ASMCMD +] > cd +RECO1/DB명/CONTROLFILE
[ASMCMD + RECO1/DB명/CONTROLFILE] ls  —해서 나오는 컨트롤 파일 명을 백업해 둔다. ‘+RECO1/DB명/CONTROLFILE/currentxxx.00001234’


6. spfile에 등록하기

SQL> alter system set control_files= ‘+DATA1/DB명/CONTROLFILE/currentxxx.12345678’, ‘+RECO1/DB명/CONTROLFILE/currentxxx.00001234’
         scope=spfile sid=‘*’;
SQL > show parameter spparameter control_files;


7.  재기동

SQL> shutdown immediate;
SQL> srvctl start database -d database_name -i instance_name1
SQL> srvctl start database -d database_name -i instance_name2


8. 1번 상태확인과 동일 작업 후 비교하기


OMF vs UMF

ASM은 OMF 기반이므로, 컨트롤 파일이 생성 되고 나서 이름을 확인하고 그 뒤에 설정을 해주어야 한다.

* OMF 란? : Oracle Managed Files
사용자가 임의로 파일 이름을 정할 수 있는 것이 아닌, 오라클내부에서 파일 이름을 지정해줌.

Filesystem에서도 OMF를 사용할 수 있음! (관련 파라미터 : db_create_file_dest)