📌 오라클 패치의 종류 (19c 기준)
1. RU (Release Update)
- 설명: 1년에 4번(1, 4, 7, 10월) 발표되는 가장 크고 중요한 메이저 통합 패치.
- 특징: 보안 취약점 픽스, 옵티마이저 개선, 수많은 자잘한 버그 픽스들이 모두 "통합"되어 있음.
- 비고: 19.27, 19.28 하는 번호가 바로 이 RU 버전을 의미함. 집으로 치면 '대대적인 리모델링' 격.
2. Interim Patch (One-off Patch)
- 설명: 내가 기존에 알고 있던 바로 그 단일 패치. 단 하나의 특정 버그(Bug)만 해결하기 위해 만들어짐.
- 특징: 특정 환경에서 치명적인 에러(ORA-00600 등)가 터졌을 때 Oracle Support(SR)를 통해 해당 버그 번호로 다운받아 급하게 적용하는 '응급처치 밴드' 역할.
3. Merge Patch (머지 패치)
- 설명: 여러 개의 Interim Patch를 적용하다 보면, 패치들끼리 오라클 엔진의 '같은 소스 코드 부분'을 건드리게 되어 충돌(Conflict)이 발생할 수 있음. 이때 오라클에 요청해서 충돌 나는 여러 패치를 하나로 예쁘게 합쳐서 묶어준 패치.
- 예시: 공유받은 패치 문서 1페이지의
MERGE ON DATABASE RU 19.27.0.0.0 OF 37602369 37742101 내역이 바로 37602369 버그와 37742101 버그 패치를 하나로 합친 머지 패치임[cite: 1].

# 1. 환경변수 설정
$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1
$ export PATH=$ORACLE_HOME/OPatch:$PATH
# 2. OPatch 버전 확인 (README에서 요구하는 최소 버전 이상인지 확인)
$ opatch version
# 3. 임의의 패치 디렉토리 생성 및 패치 압축 해제
$ mkdir -p /u01/stage/patch
$ cd /u01/stage/patch
$ unzip p37602369_1927000_Linux-x86-64.zip <-- (예시: 다운받은 머지 패치 파일)
# 4. 압축 푼 패치 디렉토리 안으로 이동
$ cd /u01/stage/patch/37602369
# 5. 충돌 여부 및 적용 가능 여부 사전 점검 (Dry-run)
$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
# 6. 리스너 중지
$ lsnrctl stop
# 7. 데이터베이스 인스턴스 중지
$ sqlplus / as sysdba
SQL> shutdown immediate;
SQL> exit;
# 8. 패치 디렉토리에서 apply 명령어 실행
$ cd /u01/stage/patch/37602369
$ opatch apply
# (진행 중 이 시스템이 준비되었냐는 질문이 나오면 'y' 입력)
# Is the local system ready for patching? [y|n] y
# 9. 패치가 정상적으로 인벤토리에 등록되었는지 확인
$ opatch lsinventory | grep 37602369
# 10. DB 및 리스너 기동
$ lsnrctl start
$ sqlplus / as sysdba
SQL> startup;
# (PDB를 사용 중이라면 모든 PDB도 오픈해야 합니다)
SQL> alter pluggable database all open;
SQL> exit;
# 11. DB 내부 딕셔너리에 패치 내역(SQL 변경사항) 반영
$ cd $ORACLE_HOME/OPatch
$ ./datapatch -verbose
# 12. Invalid 객체 재컴파일 (패치 후 깨진 객체들 정리)
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlrp.sql
4. Component-specific Bundle Patch (컴포넌트 번들 패치)
- 설명: DB 엔진 전체가 아니라, 오라클의 특정 하위 기능(컴포넌트)에 대한 패치들을 모아놓은 꾸러미.
- 예시: OJVM(자바 가상 머신) 패치, Datapump Bundle Patch 등이 여기에 속함.