[ORACLE] ASM사용하는 RAC 환경에서 컨트롤파일 이중화 하기
- 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)