데이터베이스 연구실.log

Oracle 19c 패치 종류와 RU 적용 절차

19c 패치 네 종류(RU, OJVM, One-off, RUR)의 역할과 순서, RU 적용의 8단계(파일 준비, TEMP 확장, OPatch 교체, 서비스 중지, 프로세스 정리, opatch apply, 재기동, datapatch)

RUOJVMOne-offRUROPatchdatapatch

#핵심 요약

19c 실무에서 자주 쓰는 패치는 RU, OJVM, One-off(Interim), RUR 네 가지임
일반적인 순서는 RU, OJVM, 필요 시 One-off임

RU 적용은 바이너리 패치(opatch apply)와 DB 내부 딕셔너리 갱신(datapatch -verbose) 두 단계로 끝남

작업 계정이 단계마다 oracle과 root로 나뉨

최종 확인은 v$version에서 패치한 RU 버전(예시는 19.26)이 보이는지임

#개념과 동작 원리

#공식 기준의 적용 조건

Oracle Database 19c에서 Oracle Restart는 단일 서버용 Grid Infrastructure 구성임
RAC에서는 Clusterware가 해당 기능을 맡으므로 단일 인스턴스라는 사실만으로 Restart 설치 여부를 판단할 수 없음

대상 유지보수 기준
Restart가 관리하는 DB 홈 해당 홈의 구성 요소를 SRVCTL로 중지하고 작업 후 다시 시작함
Restart의 GI 홈 의존하는 DB 홈의 구성 요소를 먼저 중지하고 Restart의 자동 시작을 비활성화한 뒤 Restart를 중지함
작업 후 활성화, 시작과 구성 요소 복구를 수행함
Restart 패치 적용 패치 README의 사전 요구사항과 OPatch 버전을 확인함
19c 안내의 OPatchAuto 적용은 root로 GI 홈에서 수행함

아래 4번 실습은 DB와 리스너 중지만 기록하며 Restart 자체의 비활성화, 중지까지 수행한 절차는 아님
GI 홈 패치의 유지보수 절차와 DB 홈 패치의 중지 범위를 구분해야 함
실습 서버의 Restart 설치 여부와 패치 번호의 19.26 RU 대응은 공개 자료로 확인 불가

패치 완료 여부는 홈별 OPatch 인벤토리와 DB의 DBA_REGISTRY_SQLPATCH를 구분해 확인함
V$VERSION만으로 SQL 패치 적용 성공까지 판정할 수 없음

패치 종류 역할
RU (Release Update) 핵심 엔진 업데이트
OJVM Java 보안 패치
One-off (Interim) 특정 버그 긴급 수정
RUR 특정 RU 안정화 패치

일반적인 적용 순서: RU, OJVM, (필요 시) One-off

적용 단계 개요와 계정

단계 내용 계정
1 파일 업로드와 압축 해제 oracle (디렉터리 생성은 root)
2 문자셋 환경 설정과 TEMP 사전 확장 oracle
3 OPatch 유틸리티 최신화 oracle
4 자동 복구 서비스 중지 root
5 좀비 프로세스 정리 root
6 바이너리 패치 적용 oracle
7 서비스 재기동 oracle
8 딕셔너리 업데이트(datapatch) oracle

#주요 용어와 구성 요소

용어 설명
OPatch 패치 적용 도구
패치에 맞는 버전으로 교체해야 함
datapatch 패치를 DB 내부 딕셔너리에 반영하는 도구
ORA-01652 임시 공간 부족 오류
실습에서는 이를 겪은 경험 때문에 TEMP를 미리 확장한다고 설명

#필수 명령어 또는 SQL

#패치 전 버전 확인

SQL*Plus (SYSDBA)조회만 함
select * from v$version;

결과 해석: 개별 실행 출력은 기재 없음

#1. 파일 준비 (oracle, root)

셸 (oracle)조회만 함
ls -lh <RU_ZIP>
df -h /home /u01

결과 해석:

실습 사례: /home의 여유가 4.5G뿐이라 3.5G zip을 풀 공간(10G 이상)이 부족했고, /u01은 루트 파일시스템에 있어 55G를 쓸 수 있었음
어느 파일시스템이 넉넉한지 먼저 확인한다는 것이 요지임

셸 (root)객체 또는 설정을 변경함
mkdir -p /u01/stage/patch_1926
chown -R oracle:oinstall /u01/stage
chmod -R 775 /u01/stage
셸 (oracle)객체 또는 설정을 변경함
mv /home/oracle/patch_1926/<RU_ZIP> /u01/stage/patch_1926/
cd /u01/stage/patch_1926
unzip <RU_ZIP>
cd /u01/stage/patch_1926/<PATCH_DIR>/RU
unzip <RU_PATCH_ZIP>
df -h /u01

결과 해석: 개별 실행 출력은 기재 없음

#2. 문자셋 설정과 TEMP 확장 (oracle)

셸 (oracle)객체 또는 설정을 변경함
echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> ~/.bash_profile
source ~/.bash_profile
sqlplus / as sysdba
SQL*Plus (SYSDBA)조회만 함
select file_name from dba_data_files;
select file_name from dba_temp_files;
SQL*Plus (SYSDBA)객체 또는 설정을 변경함
ALTER DATABASE TEMPFILE 1 RESIZE 2048M;

결과 해석:

실습에서는 NLS_LANG 설정이 한글 깨짐(???)을 막기 위한 것이라고 설명함
RESIZE의 값은 2GB 예시이며 현재 크기보다 큰 값이어야 확장이 됨

#3. OPatch 교체 (oracle)

복사가 아니라 직접 압축을 풀어야 한다는 것이 실습의 주의임

셸 (oracle)객체 또는 설정을 변경함
mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_old
cd /u01/stage/patch_1926/<PATCH_DIR>/Opatch
unzip *.zip -d $ORACLE_HOME
chmod -R 755 $ORACLE_HOME/OPatch
$ORACLE_HOME/OPatch/opatch version

결과 해석: 개별 실행 출력은 기재 없음

#4. 자동 재기동 서비스와 DB, 리스너 중지 (root)

셸 (root)인스턴스 또는 서비스 중단이 필요함
crsctl stat res -t
srvctl stop database -d <DB_NAME>
srvctl stop listener
crsctl stat res -t

결과 해석:

DB와 리스너가 OFFLINE인지 확인함
<DB_NAME>은 각자의 DB 이름임

#5. 잔여 프로세스 정리 (root)

셸 (root)인스턴스 또는 서비스 중단이 필요함
/sbin/fuser -k $ORACLE_HOME/bin/oracle
/sbin/fuser -k $ORACLE_HOME/bin/tnslsnr

결과 해석:

#6. 바이너리 패치 적용 (oracle)

셸 (oracle)객체 또는 설정을 변경함
cd /u01/stage/patch_1926/<PATCH_DIR>/RU/<PATCH_ID>/<SUBPATCH_ID>
$ORACLE_HOME/OPatch/opatch apply

결과 해석:

질문이 나오면 y를 입력하고 OPatch succeeded를 확인함

#7. 재기동 (oracle)

SQL*Plus (SYSDBA)인스턴스 또는 서비스 중단이 필요함
startup
셸 (oracle)객체 또는 설정을 변경함
lsnrctl start
lsnrctl status

결과 해석:

실습에서는 리스너에 서비스가 완전히 등록된 것을 확인한 뒤 다음 작업을 하라고 했음

#8. 딕셔너리 업데이트와 확인 (oracle)

셸 (oracle)객체 또는 설정을 변경함
$ORACLE_HOME/OPatch/datapatch -verbose
SQL*Plus (SYSDBA)조회만 함
select * from v$version;

결과 해석:

실습의 성공 기준은 v$version이 패치한 RU 버전(19.26 예시)으로 보이는 것임

#구문과 옵션 설명

구문 의미 바꿀 입력값
crsctl stat res -t 클러스터 리소스 상태 표
srvctl stop database -d, srvctl stop listener DB와 리스너 중지 DB 이름
/sbin/fuser -k <파일> 파일을 쓰는 프로세스 종료 대상 실행 파일
opatch version, opatch apply OPatch 버전 확인, 패치 적용 패치 디렉터리에서 실행
datapatch -verbose 딕셔너리 패치 반영
상세 출력
ALTER DATABASE TEMPFILE n RESIZE 임시 파일 크기 변경 파일 번호, 크기

#사용 조건과 주의사항

실습 환경의 패치 절차임
멀티테넌트 환경에서 PDB의 상태, 여러 DB가 한 홈을 쓰는 경우, RAC나 Data Guard 환경의 순서는 수업 자료에 없어 확인 불가

OJVM과 One-off 패치 적용 절차는 기재 없음

패치 파일은 My Oracle Support에서 받으며 README의 요구사항을 따라야 한다는 점은 수업 자료에 명시되지 않았음
적용 전 해당 패치 README 확인이 필요함

실습의 호스트명 <HOST>와 디렉터리 이름 patch_192, patch_1926이 섞여 있음
같은 작업 디렉터리의 표기 차이로 보이나 확인 불가

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

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

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