Oracle 19c 패치 종류와 RU 적용 절차
19c 패치 네 종류(RU, OJVM, One-off, RUR)의 역할과 순서, RU 적용의 8단계(파일 준비, TEMP 확장, OPatch 교체, 서비스 중지, 프로세스 정리, opatch apply, 재기동, datapatch)
#핵심 요약
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
#패치 전 버전 확인
select * from v$version;결과 해석: 개별 실행 출력은 기재 없음
#1. 파일 준비 (oracle, root)
ls -lh <RU_ZIP>
df -h /home /u01결과 해석:
실습 사례: /home의 여유가 4.5G뿐이라 3.5G zip을 풀 공간(10G 이상)이 부족했고, /u01은 루트 파일시스템에 있어 55G를 쓸 수 있었음
어느 파일시스템이 넉넉한지 먼저 확인한다는 것이 요지임
mkdir -p /u01/stage/patch_1926
chown -R oracle:oinstall /u01/stage
chmod -R 775 /u01/stagemv /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)
echo 'export NLS_LANG=AMERICAN_AMERICA.AL32UTF8' >> ~/.bash_profile
source ~/.bash_profile
sqlplus / as sysdbaselect file_name from dba_data_files;
select file_name from dba_temp_files;ALTER DATABASE TEMPFILE 1 RESIZE 2048M;결과 해석:
실습에서는 NLS_LANG 설정이 한글 깨짐(???)을 막기 위한 것이라고 설명함RESIZE의 값은 2GB 예시이며 현재 크기보다 큰 값이어야 확장이 됨
#3. OPatch 교체 (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)
crsctl stat res -t
srvctl stop database -d <DB_NAME>
srvctl stop listener
crsctl stat res -t결과 해석:
DB와 리스너가 OFFLINE인지 확인함<DB_NAME>은 각자의 DB 이름임
#5. 잔여 프로세스 정리 (root)
/sbin/fuser -k $ORACLE_HOME/bin/oracle
/sbin/fuser -k $ORACLE_HOME/bin/tnslsnr결과 해석:
#6. 바이너리 패치 적용 (oracle)
cd /u01/stage/patch_1926/<PATCH_DIR>/RU/<PATCH_ID>/<SUBPATCH_ID>
$ORACLE_HOME/OPatch/opatch apply결과 해석:
질문이 나오면 y를 입력하고 OPatch succeeded를 확인함
#7. 재기동 (oracle)
startuplsnrctl start
lsnrctl status결과 해석:
실습에서는 리스너에 서비스가 완전히 등록된 것을 확인한 뒤 다음 작업을 하라고 했음
#8. 딕셔너리 업데이트와 확인 (oracle)
$ORACLE_HOME/OPatch/datapatch -verboseselect * 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이 섞여 있음
같은 작업 디렉터리의 표기 차이로 보이나 확인 불가