데이터베이스 연구실.log

RAC 기동과 종료

DB, Clusterware, OS의 종료 순서와 ASM 및 PDB의 의존 관계

SHUTDOWN TRANSACTIONAL LOCALRESTRICTED SESSIONORA-25510RACRAC 기동과 종료

#핵심 요약

실습의 종료 순서는 DB, Clusterware, OS이며 두 노드의 OS는 2번 노드부터 종료함

DB 파일이 ASM에 있으면 기동은 ASM 다음 DB, 정지는 DB 다음 ASM임

OS 기동과 DB 자동 기동 정책, PDB의 OPEN 상태 복원은 각각 확인해야 함

#개념과 동작 원리

단계 종료 대상과 기동 조건
DB 정지 한 노드에서 SRVCTL로 전체 DB 대상 지정
Clusterware 정지 root에서 전체 노드 대상 명령 사용
OS 정지 실습 두 노드 환경에서 2번 노드 후 1번 노드
기동 시 의존 관계 OS와 Clusterware가 실행되고 ASM 사용 가능 상태에서 DB 기동
PDB SAVE STATE 또는 연결 서비스의 기동 방식 확인

#필수 명령어 또는 SQL

OS 셸 (DB 소프트웨어 소유자)인스턴스 또는 서비스 중단이 필요함
srvctl stop database -d <DB_NAME>
OS 셸 (DB 소프트웨어 소유자)조회만 함
srvctl status database -d <DB_NAME>

결과 해석: 실습에서는 전체 DB 정지를 설명하지만 이 명령의 실행 출력은 기재 없음

OS 셸 (root)인스턴스 또는 서비스 중단이 필요함
crsctl stop cluster -all
OS 셸 (root)조회만 함
crsctl check cluster -all

결과 해석: 전체 노드 Clusterware 상태 확인 단계이며 실제 출력은 기재 없음

OS가 올라온 뒤 실습 ASM 관리 페이지는 다음 Clusterware 기동을 제시함

OS 셸 (root)객체 또는 설정을 변경함
crsctl start cluster -all
OS 셸 (DB 소프트웨어 소유자)조회만 함
srvctl status asm
OS 셸 (DB 소프트웨어 소유자)객체 또는 설정을 변경함
srvctl start database -d <DB_NAME>

결과 해석: ASM 상태 확인 후 DB 기동의 흐름이며 기동 성공 출력은 기재 없음

#한 인스턴스만 내릴 때의 SHUTDOWN 옵션

옵션 내리는 인스턴스의 미완료 트랜잭션 다른 인스턴스의 기존 미완료 트랜잭션
SHUTDOWN IMMEDIATE 종료하면서 롤백 기다리지 않음
SHUTDOWN TRANSACTIONAL 커밋이나 롤백까지 대기 명령 전에 시작된 트랜잭션의 완료까지 대기
SHUTDOWN TRANSACTIONAL LOCAL 커밋이나 롤백까지 대기 기다리지 않음

세 옵션 모두 명령을 실행한 인스턴스만 내림
TRANSACTIONAL은 다른 인스턴스의 기존 트랜잭션도 기다리지만 그 인스턴스를 내리지는 않음

SQL*Plus (SYSDBA, 별도 세션)조회만 함
SELECT inst_id, COUNT(*) AS tx_cnt
  FROM gv$transaction
 GROUP BY inst_id
 ORDER BY inst_id;

SELECT instance_name FROM v$instance;
SHOW CON_NAME
SQL*Plus (<NODE1> SYSDBA, CDB$ROOT)인스턴스 또는 서비스 중단이 필요함
SHUTDOWN TRANSACTIONAL LOCAL

결과 해석:

실습 준비: <NODE1>, <NODE2>의 일반 사용자 세션에서 emp의 서로 다른 행을 UPDATE하고 커밋하지 않은 채 둔 뒤, 별도 SYS 세션에서 GV$TRANSACTION에 INST_ID 1, 2가 보이는지 확인함

TRANSACTIONAL 순서: <NODE1> SYS에서 SHUTDOWN TRANSACTIONAL → <NODE1> 사용자 세션 COMMIT(<NODE2> 트랜잭션이 남아 아직 대기) → <NODE2> 사용자 세션 COMMIT 뒤 <NODE1> 종료
TRANSACTIONAL LOCAL은 <NODE1> 세션의 COMMIT만으로 종료가 진행됨

한 노드만 계획 정지하면서 그 노드 사용자에게 작업을 마칠 시간을 줄 때 TRANSACTIONAL LOCAL이 맞고, 미완료 작업 롤백을 허용하고 바로 내려야 하면 IMMEDIATE를 씀
Clusterware로는 srvctl stop instance -db <DB_NAME> -instance <INSTANCE> -stopoption "TRANSACTIONAL LOCAL"

IMMEDIATE도 롤백할 양에 따라 시간이 걸리고, TRANSACTIONAL의 대기에도 제한 시간이 있어 무기한 기다리지는 않음

수업 자료에는 DML 캡처만 있고 옵션별 종료 완료 출력은 기재 없음
TRANSACTIONAL 실습은 emp 변경을 커밋하므로 복제한 테스트 데이터에서 함

#인스턴스별 접속 제한과 QUIESCE

명령 효과
ALTER SYSTEM ENABLE RESTRICTED SESSION 현재 인스턴스의 신규 로그인만 제한, 기존 세션은 유지
ALTER SYSTEM QUIESCE RESTRICTED 지원 환경에서 모든 RAC 인스턴스의 일반 사용자 활동을 일시 중지
SQL*Plus (<NODE1> SYSDBA)객체 또는 설정을 변경함
SELECT inst_id, instance_name, status, logins FROM gv$instance ORDER BY inst_id;

ALTER SYSTEM ENABLE RESTRICTED SESSION;
SELECT inst_id, logins FROM gv$instance ORDER BY inst_id;

ALTER SYSTEM DISABLE RESTRICTED SESSION;

결과 해석:

실습 기록: <NODE1>에서만 제한하자 LOGINS가 <NODE1> RESTRICTED, <NODE2> ALLOWED였고, <NODE1> 신규 접속은 ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege, <NODE2> 접속은 그대로 됐음

양쪽 다 막으려면 <NODE1>, <NODE2> 각각에서 ENABLE RESTRICTED SESSION을 실행하고 해제도 각각 함

실습 CDB의 CDB$ROOT에서 ALTER SYSTEM QUIESCE RESTRICTED를 실행하자 ORA-25510: quiesce not supported for the root container가 났음
수업 자료에 함께 적힌 양쪽 접속 대기와 UNQUIESCE 성공 출력은 이 CDB 환경의 결과로 보지 않음

QUIESCE가 지원되는 환경에서도 Resource Manager가 모든 인스턴스에서 시작 때부터 켜져 있어야 하고, 진행 중인 일반 사용자 작업이 끝날 때까지 기다릴 수 있음

기존 업무 세션까지 멈춰야 하는 작업이면 RESTRICTED SESSION만으로는 부족함

#사용 조건과 주의사항

기동, 종료 실습의 상단 계정 표기는 root지만 DB 정지 주석은 DB 소유자이며 OPEN 구간에는 계정 구분이 없음 DB 명령 실행 위치는 SRVCTL 실습에 명시된 환경임 ASM의 SQL*Plus 종료에 실패하면 원인을 먼저 확인함
전체 클러스터 종료는 다른 서비스에도 영향을 줌

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기