반응형
■ [2025-12-26] Oracle Restart 19.28 -> 19.29 골드이미지로 Out-of Place Patching 및 원상 복구 절차

 

[제목]

 

[2025-12-26] Oracle Restart 19.28 -> 19.29 골드이미지로 Out-of Place Patching 및 원상 복구 절차

 

[테스트 환경]

 

<대상 서버>

OS : Oracle Linux Server 8.10 (grep ^PRETTY_NAME= /etc/os-release | cut -d= -f2- | tr -d '"')
OS Kernal : 5.15.0-206.153.7.1.el8uek.x86_64 (uname -r)
Oracle Version : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production (echo -e "set pages 0 lines 200 feedback off heading off\nselect banner from v\$version where banner like 'Oracle Database%';" | sqlplus -s / as sysdba)

Oracle Configuration
  DB명 : ORA12RF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''DB명 : '\''||name from v$database;' | sqlplus -s / as sysdba) '

  Restart Single
   Hostname : ORA19SF (hostname)
   Public IP : 192.168.240.51 (getent ahostsv4 `hostname` | awk '{print $1; exit}')
   Virtual IP : -
   Instance Name : ORA19SF (echo -e 'set pages 0 feedback off heading off verify off\nselect '\''Instance Name : '\''||instance_name from v$instance;' | sqlplus -s / as sysdba) '

 

<패치 전>

Patch Info
 Grid (opatch lspatches) (grid os user)
 38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
 37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
 37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
 37960098;Database Release Update : 19.28.0.0.250715 (37960098)
 36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

 Oracle (opatch lspatches) (oracle os user)
 37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
 37960098;Database Release Update : 19.28.0.0.250715 (37960098)

 

<패치 후>

Patch Info
 Grid (opatch lspatches) (grid os user)
 38380425;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38380425)
 38322923;OCW RELEASE UPDATE 19.29.0.0.0 (38322923)
 38311528;ACFS RELEASE UPDATE 19.29.0.0.0 (38311528)
 38291812;Database Release Update : 19.29.0.0.251021 (38291812)
 36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

 Oracle (opatch lspatches) (oracle os user)
 38322923;OCW RELEASE UPDATE 19.29.0.0.0 (38322923)
 38291812;Database Release Update : 19.29.0.0.251021 (38291812)

 

[테스트 개요]

 

(1) 테스트 목적 본 테스트는 Oracle Restart (Standalone Grid + Single DB) 환경에서 19.28 Release Update가 적용된 시스템을
    19.29 버전으로 업그레이드하기 위한 Out-of-Place Patching 절차를 검증하는 데 목적이 있습니다.
 Oracle Gold Image 방식을 활용하여 서비스 다운타임을 최소화하고,
 패치 적용 후 문제 발생 시 신속하게 원상 복구(Rollback)하는 전체 라이프사이클을 확립하고자 합니다.

(2) 대상 환경 운영체제는 Oracle Linux Server 8.10이며, 데이터베이스는 Oracle Database 19c Enterprise Edition입니다.
    기존 19.28 버전의 Grid Home(/u01/app/19c/grid)과 DB Home(/u01/app/oracle/product/19c/db_1)을 유지한 상태에서,
 신규 19.29 버전의 경로(/u01/app/19.29/grid 및 /u01/app/oracle/product/19.29/db_1)를 생성하여 교체 작업을 수행합니다.

(3) 주요 시나리오
    준비 및 설치 19.29 버전의 Grid 및 Database 골드 이미지를 업로드하고 신규 디렉토리에 압축을 해제합니다.
    이후 Silent Mode를 이용하여 소프트웨어를 설치하되, Grid 설치 시 root.sh 자동 실행 옵션을 비활성화(false)하여
 실제 엔진 교체 시점을 관리자가 통제할 수 있도록 설정합니다.

(4) 주요 시나리오
    엔진 교체 및 적용 기존 홈의 주요 설정 파일(listener.ora, tnsnames.ora, glogin.sql, Password File)을 신규 홈으로 복제합니다.
 srvctl modify database 명령어를 사용하여 DB가 참조하는 Oracle Home을 변경하고,
 roothas.sh 스크립트의 prepatch(Unlock) 및 postpatch(Lock & Restart) 옵션을 통해 Grid Infrastructure를 신규 버전으로 교체합니다.

(5) 주요 시나리오
    데이터베이스 패치 DB 기동 후 datapatch 유틸리티를 통해 SQL 패치를 적용합니다.
 작업 전 사전 점검(sanity_checks)을 통해 딕셔너리 통계 갱신 필요 여부와 실행 중인 스케줄러 잡(예: OBJNUM_REUSE_MAINTAIN_JOB$$)의
 충돌 가능성을 확인하고 조치한 뒤 패치를 진행합니다.

(6) 주요 시나리오
    원상 복구 (Rollback) 패치 적용 완료 후, 기존 19.28 환경으로의 복귀 절차를 검증합니다.
 신규 홈에서 구동 중인 DB를 내리고 srvctl을 통해 기존 홈으로 설정을 변경하여 재기동합니다.
 특히 SQL Patch 롤백 시, 반드시 기존 버전(19.28) 엔진으로 DB가 기동된 상태에서 구버전의 datapatch를 사용해야 데이터 딕셔너리 정합성이 유지됨을 확인합니다.
 이후 Grid 엔진을 원복하고 인벤토리 정리 및 신규 디렉토리 삭제를 통해 초기 상태로 복구합니다.

(7) 핵심 검증 결과 Grid Gold Image 설치 시 root.sh 실행을 제어하여 다운타임 시점을 명확히 할 수 있었습니다.
    Datapatch 수행 시 백그라운드 스케줄러 잡이 락(Lock)을 유발할 수 있으므로 사전 비활성화가 필요하며,
 Out-of-Place Patching 후 롤백 시에는 반드시 구버전 바이너리로 기동 후 datapatch 롤백을 수행해야 한다는 중요한 순서를 확인했습니다.

 

[내용]

 

1. 현재 DB 상태 확인

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ alias csrt
alias csrt='crsctl stat res -t'
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ csrt
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.FRA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.asm
               ONLINE  ONLINE       ol8ora19sf               Started,STABLE
ora.ons
               OFFLINE OFFLINE      ol8ora19sf               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.ora19sf.db
      1        ONLINE  ONLINE       ol8ora19sf               Open,HOME=/u01/app/o
                                                             racle/product/19c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_HOME
/u01/app/oracle/product/19c/db_1

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $GRID_HOME
/u01/app/19c/grid

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_SID
ORA19SF

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ opatch lspatches
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)

OPatch succeeded.


--invalid object 확인
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 26 18:16:39 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0


SET LINESIZE 180
SET PAGESIZE 100
SET COLSEP ' | '
SET VERIFY OFF
SET FEEDBACK ON

COLUMN OWNER       FORMAT A30 HEADING 'Owner'
COLUMN OBJECT_NAME FORMAT A30 HEADING 'Object Name'
COLUMN OBJECT_TYPE FORMAT A20 HEADING 'Object Type'
COLUMN STATUS      FORMAT A10 HEADING 'Status'

SELECT OWNER
     , OBJECT_NAME
     , OBJECT_TYPE
     , STATUS
  FROM DBA_OBJECTS
 WHERE STATUS <> 'VALID'
 ORDER BY OWNER, OBJECT_NAME;

no rows selected

Elapsed: 00:00:00.01


--datapatch 상태 확인
SET LINESIZE 300
SET PAGESIZE 1000
SET COLSEP ' | '
SET TRIMOUT ON
SET TRIMSPOOL ON

COL PATCH_ID       FOR 99999999       HEADING 'Patch ID'
COL PATCH_TYPE     FOR A10            HEADING 'Type'
COL ACTION         FOR A10            HEADING 'Action'
COL STATUS         FOR A15            HEADING 'Status'
COL ACTION_TIME    FOR A20            HEADING 'Action Time'
COL DESCRIPTION    FOR A60            HEADING 'Description' WORD_WRAPPED
COL SOURCE_VERSION FOR A15            HEADING 'Source Ver'
COL TARGET_VERSION FOR A15            HEADING 'Target Ver'

SELECT A.PATCH_ID
     , A.PATCH_TYPE
     , A.ACTION
     , A.STATUS
     , TO_CHAR(A.ACTION_TIME, 'YYYY-MM-DD HH24:MI:SS') AS ACTION_TIME
     , A.SOURCE_VERSION
     , A.TARGET_VERSION
     , A.DESCRIPTION
  FROM DBA_REGISTRY_SQLPATCH A
 ORDER BY A.ACTION_TIME;

 Patch ID | Type       | Action     | Status          | Action Time          | Source Ver      | Target Ver      | Description
--------- | ---------- | ---------- | --------------- | -------------------- | --------------- | --------------- | ------------------------------------------------------------
 37960098 | RU         | APPLY      | SUCCESS         | 2025-12-13 17:31:06  | 19.1.0.0.0      | 19.28.0.0.0     | Database Release Update : 19.28.0.0.250715 (37960098)

 

--현재 oracle 엔진 패치 버전 확인
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ opatch lspatches
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)

OPatch succeeded.

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 25-DEC-2025 10:11:10

Copyright (c) 1991, 2025, Oracle.  All rights reserved.

Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                25-DEC-2025 09:52:10
Uptime                    0 days 0 hr. 18 min. 59 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19c/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol8ora19sf/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.240.51)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA1" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "+ASM_FRA1" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "ORA19SF" has 1 instance(s).
  Instance "ORA19SF", status READY, has 1 handler(s) for this service...
Service "ORA19SFXDB" has 1 instance(s).
  Instance "ORA19SF", status READY, has 1 handler(s) for this service...
The command completed successfully

 

[+ASM:grid@ol8ora19sf][/home/grid]$ opatch lspatches
38124772;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38124772)
37962946;OCW RELEASE UPDATE 19.28.0.0.0 (37962946)
37962938;ACFS RELEASE UPDATE 19.28.0.0.0 (37962938)
37960098;Database Release Update : 19.28.0.0.250715 (37960098)
36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

OPatch succeeded.


2. Oracle 19.29 oracle/grid 골드 이미지 업로드

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ mkdir -pv /tmp/patch/19.29
mkdir: created directory '/tmp/patch'
mkdir: created directory '/tmp/patch/19.29'

 

[+ASM:grid@ol8ora19sf][/tmp/patch/19.29]$ chmod 664 /tmp/patch/19.29/*

[+ASM:grid@ol8ora19sf][/tmp/patch/19.29]$ ls -l /tmp/patch/19.29
total 10655132
-rw-rw-r--. 1 grid oinstall 4816073482 Dec 24 22:12 db1929000.zip
-rw-rw-r--. 1 grid oinstall 6094777458 Dec 24 21:37 grid1929000.zip

 

3. 새로운 그리드 홈 디렉토리 생성 및 권한 주기

 

--grid os user
--현재 사용중인 그리드 홈 디렉토리 정보 확인

[+ASM:grid@ol8ora19sf][/u01/app/19c/grid]$ echo $GRID_HOME
/u01/app/19c/grid

[+ASM:grid@ol8ora19sf][/u01/app/19c/grid]$ ls -l /u01/app/19c/
total 4
drwxr-xr-x. 90 root oinstall 4096 Dec 13 16:54 grid
--> 현재는 grid가 구동된 상태이므로 소유자가 root로 되어 있는 것임


--root os user
[root@ol8ora19sf][/root]$ mkdir -pv /u01/app/19.29/grid
mkdir: created directory '/u01/app/19.29'
mkdir: created directory '/u01/app/19.29/grid'

[root@ol8ora19sf][/root]$ chown -R grid:oinstall /u01/app/19.29/grid
[root@ol8ora19sf][/root]$ chmod -R 775 /u01/app/19.29/grid

 

4. 새로운 오라클 홈 디렉토리 생성 및 권한 주기

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_HOME
/u01/app/oracle/product/19c/db_1
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19c
total 4
drwxrwxr-x. 73 oracle oinstall 4096 Dec 13 17:33 db_1

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ mkdir -pv /u01/app/oracle/product/19.29/db_1
mkdir: created directory '/u01/app/oracle/product/19.29'
mkdir: created directory '/u01/app/oracle/product/19.29/db_1'

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ chmod -R 775 /u01/app/oracle/product/19.29/db_1
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19.29
total 0
drwxrwxr-x. 2 oracle oinstall 6 Dec 25 10:38 db_1

 

5. root/grid/oracle os user의 환경 변수(.bash_profile) 추가

 

--root os user
[root@ol8ora19sf][/root]$ vi .bash_profile
[root@ol8ora19sf][/root]$ cat .bash_profile | grep -i new_
export NEW_GRID_HOME=/u01/app/19.29/grid
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1

 

[root@ol8ora19sf][/root]$ source ~/.bash_profile
[root@ol8ora19sf][/root]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid

[root@ol8ora19sf][/root]$ echo $NEW_DB_HOME
/u01/app/oracle/product/19.29/db_1

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ vi .bash_profile
[+ASM:grid@ol8ora19sf][/home/grid]$ cat .bash_profile | grep -i new_

export NEW_GRID_HOME=/u01/app/19.29/grid
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1

[+ASM:grid@ol8ora19sf][/home/grid]$ source ~/.bash_profile

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_DB_HOME
/u01/app/oracle/product/19.29/db_1

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_ORACLE_HOME
/u01/app/19.29/grid

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ vi .bash_profile
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cat .bash_profile | grep -i new_
export NEW_GRID_HOME=/u01/app/19.29/grid
export NEW_ORACLE_HOME=$ORACLE_BASE/product/19.29/db_1

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ source ~/.bash_profile

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $NEW_ORACLE_HOME
/u01/app/oracle/product/19.29/db_1


6. 골드 이미지 설치 파일 압축 해제

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ unzip -q /tmp/patch/19.29/grid1929000.zip -d $NEW_GRID_HOME

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ unzip -q /tmp/patch/19.29/db1929000.zip -d $NEW_ORACLE_HOME

 

7. 새로운 grid 엔진 설치

 

--과거에 grid 엔진 설치 시 저장된 rsp 파일을 찾기
[+ASM:grid@ol8ora19sf][/home/grid]$ ls -l $GRID_HOME/install/response/
total 76
-rw-r--r--. 1 grid oinstall 36505 Dec 13 16:53 grid_2025-12-13_04-52-19PM.rsp
-rw-r-----. 1 grid oinstall 36221 Jan 19  2019 gridsetup.rsp
-rw-r-----. 1 grid oinstall  1541 May 21  2016 sample.ccf

 

[+ASM:grid@ol8ora19sf][/home/grid]$ awk -F= 'NF && $1 !~ /^#/ && $2!=""' $GRID_HOME/install/response/grid_2025-12-13_04-52-19PM.rsp > /home/grid/grid_19.29.rsp
[+ASM:grid@ol8ora19sf][/home/grid]$ cat /home/grid/grid_19.29.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0
INVENTORY_LOCATION=/u01/app/oraInventory
oracle.install.option=HA_CONFIG
ORACLE_BASE=/u01/app/oracle
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.scanType=LOCAL_SCAN
oracle.install.crs.config.ClusterConfiguration=STANDALONE
oracle.install.crs.config.configureAsExtendedCluster=false
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
oracle.install.crs.config.gpnp.gnsOption=CREATE_NEW_GNS
oracle.install.crs.configureGIMR=false
oracle.install.asm.configureGIMRDataDG=false
oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
oracle.install.crs.config.useIPMI=false
oracle.install.asm.diskGroup.name=DATA1
oracle.install.asm.diskGroup.redundancy=EXTERNAL
oracle.install.asm.diskGroup.AUSize=4
oracle.install.asm.diskGroup.disksWithFailureGroupNames=/dev/oracleasm/disks/DATA1_1,
oracle.install.asm.diskGroup.disks=/dev/oracleasm/disks/DATA1_1
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/disks
oracle.install.asm.gimrDG.AUSize=1
oracle.install.asm.configureAFD=false
oracle.install.crs.configureRHPS=false
oracle.install.crs.config.ignoreDownNodes=false
oracle.install.config.managementOption=NONE
oracle.install.config.omsPort=0
oracle.install.crs.rootconfig.executeRootScript=true
oracle.install.crs.rootconfig.configMethod=ROOT


[+ASM:grid@ol8ora19sf][/home/grid]$ export ORACLE_BASE=/u01/app/oracle
[+ASM:grid@ol8ora19sf][/home/grid]$ export ORA_INVENTORY=/u01/app/oraInventory
[+ASM:grid@ol8ora19sf][/home/grid]$ export ORACLE_HOME=$NEW_GRID_HOME
[+ASM:grid@ol8ora19sf][/home/grid]$ echo $ORACLE_BASE

/u01/app/oracle
[+ASM:grid@ol8ora19sf][/home/grid]$ echo $ORA_INVENTORY
/u01/app/oraInventory
[+ASM:grid@ol8ora19sf][/home/grid]$ echo $ORACLE_HOME
/u01/app/19.29/grid

 

[+ASM:grid@ol8ora19sf][/home/grid]$ $NEW_GRID_HOME/gridSetup.sh -ignorePrereq -waitforcompletion -silent \
-responseFile /home/grid/grid_19.29.rsp \
INVENTORY_LOCATION=$ORA_INVENTORY \
ORACLE_BASE=$ORACLE_BASE \
SELECTED_LANGUAGES=en \
oracle.install.option=CRS_SWONLY \
oracle.install.crs.rootconfig.executeRootScript=false

--> 이 설정이(executeRootScript) false 로 지정하는 것이 중요함

The response file for this session can be found at:
 /u01/app/19.29/grid/install/response/grid_2025-12-26_06-32-52PM.rsp

You can find the log of this install session at:
 /u01/app/oraInventory/logs/GridSetupActions2025-12-26_06-32-52PM/gridSetupActions2025-12-26_06-32-52PM.log

As a root user, execute the following script(s):
        1. /u01/app/19.29/grid/root.sh

Execute /u01/app/19.29/grid/root.sh on the following nodes:
--> 이 단계에서 root.sh 를 실행하지 않음
[ol8ora19sf]


Successfully Setup Software.
To configure Grid Infrastructure for a Cluster or Grid Infrastructure for a Stand-Alone Server execute the following command as grid user:
 /u01/app/19.29/grid/gridSetup.sh
This command launches the Grid Infrastructure Setup Wizard. The wizard also supports silent operation, and the parameters can be passed through the response file that is available in the installation media.


8. 새로운 오라클 엔진 설치

 

--oracle os user

--과거에 oracle 엔진 설치 시 저장된 rsp 파일을 찾기
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19c/db_1/install/response
total 40
-rw-r--r--. 1 oracle oinstall 19892 Dec 13 17:12 db_2025-12-13_05-10-03PM.rsp
-rw-r--r--. 1 oracle oinstall 19932 Feb  6  2019 db_install.rsp

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ awk -F= 'NF && $1 !~ /^#/ && $2!=""' /u01/app/oracle/product/19c/db_1/install/response/db_2025-12-13_05-10-03PM.rsp > /home/oracle/db_19.29.rsp
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cat /home/oracle/db_19.29.rsp

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.rootconfig.executeRootScript=true
oracle.install.db.rootconfig.configMethod=ROOT
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.ConfigureAsContainerDB=false
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.managementOption=DEFAULT
oracle.install.db.config.starterdb.omsPort=0
oracle.install.db.config.starterdb.enableRecovery=false

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ export ORACLE_BASE=/u01/app/oracle
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ export ORA_INVENTORY=/u01/app/oraInventory
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ export ORACLE_HOME=$NEW_ORACLE_HOME
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_BASE

/u01/app/oracle
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORA_INVENTORY
/u01/app/oraInventory
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_HOME
/u01/app/oracle/product/19.29/db_1


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $NEW_ORACLE_HOME/runInstaller -ignorePrereqFailure -waitforcompletion -silent \
-responseFile /home/oracle/db_19.29.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
INVENTORY_LOCATION=$ORA_INVENTORY \
SELECTED_LANGUAGES=en \
ORACLE_HOME=$ORACLE_HOME \
ORACLE_BASE=$ORACLE_BASE \
oracle.install.db.isRACOneInstall=false \
oracle.install.db.rac.serverpoolCardinality=0 \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true \
oracle.install.db.rootconfig.executeRootScript=false
--> 이 설정이(executeRootScript) false것이 중요함

 

The response file for this session can be found at:
 /u01/app/oracle/product/19.29/db_1/install/response/db_2025-12-26_06-37-12PM.rsp

You can find the log of this install session at:
 /u01/app/oraInventory/logs/InstallActions2025-12-26_06-37-12PM/installActions2025-12-26_06-37-12PM.log

As a root user, execute the following script(s):
        1. /u01/app/oracle/product/19.29/db_1/root.sh
--> 이 단계에서 root.sh 를 실행함

Execute /u01/app/oracle/product/19.29/db_1/root.sh on the following nodes:
[ol8ora19sf]


Successfully Setup Software.


--root os user
[root@ol8ora19sf][/root]$ /u01/app/oracle/product/19.29/db_1/root.sh
Check /u01/app/oracle/product/19.29/db_1/install/root_ol8ora19sf_2025-12-26_18-39-24-600972719.log for the output of root script

[root@ol8ora19sf][/root]$ cat /u01/app/oracle/product/19.29/db_1/install/root_ol8ora19sf_2025-12-26_18-39-24-600972719.log
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/19.29/db_1
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...

Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

 

9. 기존 grid/oracle 홈에서 필요한 파일을 새로운 grid/oracle 홈으로 복사

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ cp /u01/app/19c/grid/network/admin/listener.ora /u01/app/19.29/grid/network/admin
[+ASM:grid@ol8ora19sf][/home/grid]$ cp /u01/app/19c/grid/network/admin/sqlnet.ora /u01/app/19.29/grid/network/admin

[+ASM:grid@ol8ora19sf][/home/grid]$ ls -l /u01/app/19.29/grid/network/admin
total 12

-rw-r-----. 1 grid oinstall  669 Dec 26 18:40 listener.ora
drwxr-xr-x. 2 grid oinstall   64 Apr 17  2019 samples
-rw-r--r--. 1 grid oinstall 1536 Feb 14  2018 shrept.lst

-rw-r-----. 1 grid oinstall  173 Dec 26 18:40 sqlnet.ora

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl config database -db ora19sf
Database unique name: ORA19SF
Database name: ORA19SF
Oracle home: /u01/app/oracle/product/19c/db_1
Oracle user: oracle
Spfile: +DATA1/ORA19SF/PARAMETERFILE/spfile.266.1219771929
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA1,FRA1
Services:
OSDBA group:
OSOPER group:
Database instance: ORA19SF

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cp /u01/app/oracle/product/19c/db_1/network/admin/tnsnames.ora /u01/app/oracle/product/19.29/db_1/network/admin/
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19.29/db_1/network/admin/
total 8
drwxr-xr-x. 2 oracle oinstall   64 Apr 17  2019 samples
-rw-r--r--. 1 oracle oinstall 1536 Feb 14  2018 shrept.lst
-rw-r-----. 1 oracle oinstall  596 Dec 26 18:41 tnsnames.ora


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cp /u01/app/oracle/product/19c/db_1/dbs/orapwORA19SF /u01/app/oracle/product/19.29/db_1/dbs
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19.29/db_1/dbs
total 8
-rw-r--r--. 1 oracle oinstall 3079 May 14  2015 init.ora
-rw-r-----. 1 oracle oinstall 2048 Dec 26 18:43 orapwORA19SF

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cp /u01/app/oracle/product/19c/db_1/sqlplus/admin/glogin.sql /u01/app/oracle/product/19.29/db_1/sqlplus/admin/
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ls -l /u01/app/oracle/product/19.29/db_1/sqlplus/admin/
total 20
-rw-r--r--. 1 oracle oinstall  824 Dec 26 18:44 glogin.sql
drwxr-xr-x. 2 oracle oinstall   81 Apr 17  2019 help
-rw-r--r--. 1 oracle oinstall  226 Apr 29  2015 libsqlplus.def
-rw-r--r--. 1 oracle oinstall  813 Mar  7  2006 plustrce.sql
-rw-r--r--. 1 oracle oinstall 3035 Mar 16  2017 pupbld.sql
-rw-r--r--. 1 oracle oinstall 1333 Mar 16  2017 pupdel.sql

 

10. has에서 오라클 홈의 위치를 변경

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $NEW_ORACLE_HOME
/u01/app/oracle/product/19.29/db_1

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl modify database -db ora19sf -oraclehome $NEW_ORACLE_HOME
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl config database -db ora19sf
Database unique name: ORA19SF
Database name: ORA19SF
Oracle home:
/u01/app/oracle/product/19.29/db_1
--> 새로운 오라클 홈으로 변경된 상태임

Oracle user: oracle
Spfile: +DATA1/ORA19SF/PARAMETERFILE/spfile.266.1219771929
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA1,FRA1
Services:
OSDBA group:
OSOPER group:
Database instance: ORA19SF

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ crsctl stat res ora.ora19sf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora19sf.db
      1        ONLINE  ONLINE       ol8ora19sf               Open,HOME=/u01/app/o
                                                             racle/product/19c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------


11. grid 재기동 하면서 grid home 스위치 시키기

 

--root os user
[root@ol8ora19sf][/root]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid

[root@ol8ora19sf][/root]$ /u01/app/19.29/grid/rdbms/install/rootadd_rdbms.sh


[root@ol8ora19sf][/root]$ $NEW_GRID_HOME/crs/install/roothas.sh -prepatch -dstcrshome $NEW_GRID_HOME
Using configuration parameter file: /u01/app/19.29/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/ol8ora19sf/crsconfig/hapatch_2025-12-26_06-49-02PM.log
2025/12/26 18:49:06 CLSRSC-347: Successfully unlock /u01/app/19.29/grid
2025/12/26 18:49:06 CLSRSC-671: Pre-patch steps for patching GI home successfully completed.
--> 이 시점에도 아직 서비스는 가능한 상태임


--아래 명령어를 치면 서비스 불가능함
[root@ol8ora19sf][/root]$ $NEW_GRID_HOME/crs/install/roothas.sh -postpatch -dstcrshome $NEW_GRID_HOME
Using configuration parameter file: /u01/app/19.29/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/ol8ora19sf/crsconfig/hapatch_2025-12-26_06-49-40PM.log
2025/12/26 18:50:23 CLSRSC-329: Replacing Clusterware entries in file 'oracle-ohasd.service'
2025/12/26 18:51:29 CLSRSC-672: Post-patch steps for patching GI home successfully completed.

 

[root@ol8ora19sf][/root]$ alias csrt
alias csrt='crsctl stat res -t'


[root@ol8ora19sf][/root]$ csrt
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.FRA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.asm
               ONLINE  ONLINE       ol8ora19sf               Started,STABLE
ora.ons
               OFFLINE OFFLINE      ol8ora19sf               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.ora19sf.db
      1        ONLINE  ONLINE       ol8ora19sf               Open,HOME=/u01/app/o
                                                             racle/product/19.29/
                                                             db_1,STABLE
--------------------------------------------------------------------------------
--> 재기동이 완료된 것임

 

12. root/grid/oracle os user의 .bash_profile 수정

 

--root os user
[root@ol8ora19sf][/root]$ vi ~/.bash_profile
[root@ol8ora19sf][/root]$ cat ~/.bash_profile | egrep -i 'old|new'
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$NEW_GRID_HOME
export OLD_DB_HOME=$ORACLE_BASE/product/19c/db_1
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1
export DB_HOME=$NEW_DB_HOME

 

[root@ol8ora19sf][/root]$ source ~root/.bash_profile

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ vi .bash_profile
[+ASM:grid@ol8ora19sf][/home/grid]$ cat ~/.bash_profile | egrep -i 'grid_home|db_home|oracle_home'
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$NEW_GRID_HOME
export OLD_DB_HOME=$ORACLE_BASE/product/19c/db_1
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1
export DB_HOME=$NEW_DB_HOME
export OLD_ORACLE_HOME=$OLD_GRID_HOME
export NEW_ORACLE_HOME=$NEW_GRID_HOME
export ORACLE_HOME=$NEW_GRID_HOME
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'

 

[+ASM:grid@ol8ora19sf][/home/grid]$ source ~grid/.bash_profile

[+ASM:grid@ol8ora19sf][/home/grid]$ which opatch
/u01/app/19.29/grid/OPatch/opatch

[+ASM:grid@ol8ora19sf][/home/grid]$ opatch lspatches
38380425;TOMCAT RELEASE UPDATE 19.0.0.0.0 (38380425)
38322923;OCW RELEASE UPDATE 19.29.0.0.0 (38322923)
38311528;ACFS RELEASE UPDATE 19.29.0.0.0 (38311528)
38291812;Database Release Update : 19.29.0.0.251021 (38291812)
36758186;DBWLM RELEASE UPDATE 19.0.0.0.0 (36758186)

 

--그리드 엔진이 구동시키는 프로세스가 어떤 바이너리가 띄운건지 확인

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ ps -ef | grep asm_pmon_+ASM
grid      3254     1  0 18:51 ?        00:00:00 asm_pmon_+ASM
grid      3762  3166  0 18:56 pts/0    00:00:00 grep --color=auto asm_pmon_+ASM


--root os user
[root@ol8ora19sf][/root]$ ls -l /proc/3254/exe
lrwxrwxrwx. 1 grid oinstall 0 Dec 26 18:51 /proc/3254/exe -> /u01/app/19.29/grid/bin/oracle

 

[root@ol8ora19sf][/root]$ pwdx 3254
3254: /u01/app/19.29/grid/dbs

[root@ol8ora19sf][/root]$ cat /proc/3254/environ | tr '\0' '\n' | grep ORACLE_HOME
ORACLE_HOME=/u01/app/19.29/grid


--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ vi ~/.bash_profile
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cat ~/.bash_profile | egrep -i 'grid_home|oracle_home'
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$NEW_GRID_HOME
export OLD_ORACLE_HOME=$OLD_DB_HOME
export NEW_ORACLE_HOME=$ORACLE_BASE/product/19.29/db_1
export ORACLE_HOME=$NEW_ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ source ~oracle/.bash_profile

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ which opatch
/u01/app/oracle/product/19.29/db_1/OPatch/opatch

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ opatch lspatches
38322923;OCW RELEASE UPDATE 19.29.0.0.0 (38322923)
38291812;Database Release Update : 19.29.0.0.251021 (38291812)

OPatch succeeded.

 

--오라클 엔진이 구동시키는 프로세스가 어떤 바이너리가 띄운건지 확인
--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ps -ef | grep ora_arc3_ORA19SF
oracle     644  9766  0 18:54 pts/5    00:00:00 grep --color=auto ora_arc3_ORA19SF
oracle    4359     1  0 18:51 ?        00:00:00 ora_arc3_ORA19SF


--root os user
[root@ol8ora19sf][/root]$ ls -l /proc/4359/exe
lrwxrwxrwx. 1 oracle asmadmin 0 Dec 26 18:51 /proc/4359/exe -> /u01/app/oracle/product/19.29/db_1/bin/oracle


[root@ol8ora19sf][/root]$ pwdx 4359
4516: /u01/app/oracle/product/19.29/db_1/dbs

 

[root@ol8ora19sf][/root]$ cat /proc/4359/environ | tr '\0' '\n' | grep ORACLE_HOME
ORACLE_HOME=/u01/app/oracle/product/19.29/db_1

 

13. 인벤토리 설정

 

--grid os user

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_ORACLE_HOME
/u01/app/19.29/grid

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $OLD_ORACLE_HOME
/u01/app/19c/grid


[+ASM:grid@ol8ora19sf][/home/grid]$ $NEW_ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$NEW_ORACLE_HOME CRS=TRUE < /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc

 

[+ASM:grid@ol8ora19sf][/home/grid]$ $OLD_ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$OLD_ORACLE_HOME CRS=FALSE < /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc


[+ASM:grid@ol8ora19sf][/home/grid]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2025, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>12.2.0.7.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19c/grid" TYPE="O" IDX="1"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19c/db_1" TYPE="O" IDX="2"/>
<HOME NAME="OraGI19Home2" LOC="/u01/app/19.29/grid" TYPE="O" IDX="3" CRS="true"/>
<HOME NAME="OraDB19Home2" LOC="/u01/app/oracle/product/19.29/db_1" TYPE="O" IDX="4"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>

 

14. datapatch 작업

 

--작업 시작 전 확인
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $ORACLE_HOME/OPatch/datapatch --sanity_checks
SQL Patching sanity checks version 19.29.0.0.0 on Fri 26 Dec 2025 06:58:38 PM KST
Copyright (c) 2021, 2025, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_185838_8586/sanity_checks_20251226_185838_8586.log

Running checks
JSON report generated in /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_185838_8586/sqlpatch_sanity_checks_summary.json file
Checks completed. Printing report:

Check: Database component status - OK
Check: PDB Violations - OK
Check: Invalid System Objects - OK
Check: Tablespace Status - OK
Check: Backup jobs - OK
Check: Temp file exists - OK
Check: Temp file online - OK
Check: Data Pump running - OK
Check: Container status - OK
Check: Oracle Database Keystore - OK
Check: Dictionary statistics gathering - WARNING
  Patching the database without recent data dictionary statistics gathered may lead to performance issues.
  Data dictionary statistics are older than 7 days.
  Run the following queries to start gathering the dictionary statistics:
    EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
    EXEC DBMS_SYSTEM.GATHER_FIXED_OBJECTS_STATS;
  Refer to MOS 457926.1 for more details.
  ORA19SF:
    |     LATEST      |         OPERATION          |  STATUS   |
    |-----------------+----------------------------+-----------|
    | 13-DEC-25 17:53 | gather_fixed_objects_stats | COMPLETED |
    |-----------------+----------------------------+-----------|
    | 13-DEC-25 17:53 |  gather_dictionary_stats   | COMPLETED |
    |-----------------+----------------------------+-----------|
Check: Scheduled Jobs - WARNING
  Execution of scheduler jobs while database patching is running may lead to failures and/or performance issues.
  There are jobs currently running or scheduled to be executed during next hour.
  If you experience Datapatch errors caused by locking in the database, consider patching the database when jobs are not running or preventing jobs from starting.
  To check for jobs that are running or scheduled to run:
    SELECT owner as schema_name, job_name, state, next_run_date
    FROM sys.all_scheduler_jobs
    WHERE state = 'RUNNING'
    UNION
      SELECT owner as schema_name, job_name, state, next_run_date
      FROM sys.all_scheduler_jobs
      WHERE state = 'SCHEDULED'
      and cast(next_run_date as date) > sysdate
      and cast(next_run_date as date) < sysdate + 1/24;
  ORA19SF:
    | SCHEMA_NAME |          JOB_NAME           |   STATE   |          NEXT_RUN_DATE          |
    |-------------+-----------------------------+-----------+---------------------------------|
    |     SYS     | OBJNUM_REUSE_MAINTAIN_JOB$$ | SCHEDULED | 25/12/26 19:26:05.177378 +09:00 |
    |-------------+-----------------------------+-----------+---------------------------------|
Check: GoldenGate triggers - OK
Check: Logminer DDL triggers - OK
Check: Check sys public grants - OK
Check: Statistics gathering running - OK
Check: Optim dictionary upgrade parameter - OK
Check: Symlinks on oracle home path - OK
Check: Central Inventory - OK
Check: Java Virtual Machine Enable - OK
Check: Oracle Database Vault Enabled - OK
Check: Queryable Inventory database directories - OK
Check: Queryable Inventory locks - OK
Check: Queryable Inventory package - OK
Check: Queryable Inventory external table - OK
Check: Imperva processes - OK
Check: Guardium processes - OK
Check: Locale - OK

Refer to MOS Note 2975965.1 and debug log
/u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_185838_8586/sanity_checks_debug_20251226_185838_8586.log

SQL Patching sanity checks completed on Fri 26 Dec 2025 06:58:38 PM KST


--datapatch 작업 전 조치
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'< /STRONG>

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 26 19:03:23 2025
Version 19.29.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.29.0.0.0

 

[ol8ora19sf]<SYS@ORA19SF>$ EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.52

 

[ol8ora19sf]<SYS@ORA19SF>$ exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
PL/SQL procedure successfully completed.

Elapsed: 00:00:33.98

 

[ol8ora19sf]<SYS@ORA19SF>$
BEGIN
    DBMS_SCHEDULER.DISABLE('SYS.OBJNUM_REUSE_MAINTAIN_JOB$$');
END;
/

 

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 200
COL OWNER FORMAT A10
COL JOB_NAME FORMAT A35
COL ENABLED FORMAT A10
COL STATE FORMAT A15
COL NEXT_RUN_DATE FORMAT A40

SELECT OWNER
     , JOB_NAME
     , ENABLED
     , STATE
     , NEXT_RUN_DATE
  FROM DBA_SCHEDULER_JOBS
 WHERE JOB_NAME = 'OBJNUM_REUSE_MAINTAIN_JOB$$'
   AND OWNER = 'SYS';

OWNER      JOB_NAME                            ENABLED    STATE           NEXT_RUN_DATE
---------- ----------------------------------- ---------- --------------- ----------------------------------------
SYS        OBJNUM_REUSE_MAINTAIN_JOB$$         FALSE      DISABLED        25/12/26 19:26:05.177378 +09:00

1 row selected.

Elapsed: 00:00:00.03

 

--datapatch 완료후 아래의 작업으로 다시 활성화 시켜야함
BEGIN
    DBMS_SCHEDULER.ENABLE('SYS.OBJNUM_REUSE_MAINTAIN_JOB$$');
END;
/

 

--다시 확인
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $ORACLE_HOME/OPatch/datapatch --sanity_checks
SQL Patching sanity checks version 19.29.0.0.0 on Fri 26 Dec 2025 07:11:54 PM KST
Copyright (c) 2021, 2025, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_191154_2265/sanity_checks_20251226_191154_2265.log

Running checks
JSON report generated in /u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_191154_2265/sqlpatch_sanity_checks_summary.json file
Checks completed. Printing report:

Check: Database component status - OK
Check: PDB Violations - OK
Check: Invalid System Objects - OK
Check: Tablespace Status - OK
Check: Backup jobs - OK
Check: Temp file exists - OK
Check: Temp file online - OK
Check: Data Pump running - OK
Check: Container status - OK
Check: Oracle Database Keystore - OK
Check: Dictionary statistics gathering - WARNING
  Patching the database without recent data dictionary statistics gathered may lead to performance issues.
  Data dictionary statistics are older than 7 days.
  Run the following queries to start gathering the dictionary statistics:
    EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
    EXEC DBMS_SYSTEM.GATHER_FIXED_OBJECTS_STATS;
  Refer to MOS 457926.1 for more details.
  ORA19SF:
    |     LATEST      |         OPERATION          |  STATUS   |
    |-----------------+----------------------------+-----------|
    | 13-DEC-25 17:53 | gather_fixed_objects_stats | COMPLETED |
    |-----------------+----------------------------+-----------|
    | 13-DEC-25 17:53 |  gather_dictionary_stats   | COMPLETED |
    |-----------------+----------------------------+-----------|
Check: Scheduled Jobs - OK
Check: GoldenGate triggers - OK
Check: Logminer DDL triggers - OK
Check: Check sys public grants - OK
Check: Statistics gathering running - OK
Check: Optim dictionary upgrade parameter - OK
Check: Symlinks on oracle home path - OK
Check: Central Inventory - OK
Check: Java Virtual Machine Enable - OK
Check: Oracle Database Vault Enabled - OK
Check: Queryable Inventory database directories - OK
Check: Queryable Inventory locks - OK
Check: Queryable Inventory package - OK
Check: Queryable Inventory external table - OK
Check: Imperva processes - OK
Check: Guardium processes - OK
Check: Locale - OK

Refer to MOS Note 2975965.1 and debug log
/u01/app/oracle/cfgtoollogs/sqlpatch/sanity_checks_20251226_191154_2265/sanity_checks_debug_20251226_191154_2265.log

SQL Patching sanity checks completed on Fri 26 Dec 2025 07:11:54 PM KST
--> 아직도 waring이 뜨긴하지만 datapatch 작업 강햄시킴

 

--datapatch 작업 시작
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $ORACLE_HOME/OPatch/datapatch -verbose
SQL Patching tool version 19.29.0.0.0 Production on Fri Dec 26 19:14:17 2025
Copyright (c) 2012, 2025, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_7052_2025_12_26_19_14_17/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done
Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
  No interim patches found

Current state of release update SQL patches:
  Binary registry:
    19.29.0.0.0 Release_Update 251002005342: Installed
  SQL registry:
    Rolled back to 19.28.0.0.0 Release_Update 250705030417 successfully on 25/12/26 16:36:01.848054

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  No interim patches need to be rolled back
  Patch 38291812 (Database Release Update : 19.29.0.0.251021 (38291812)):
    Apply from 19.28.0.0.0 Release_Update 250705030417 to 19.29.0.0.0 Release_Update 251002005342
  No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 1

Validating logfiles...done
Patch 38291812 apply: SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/38291812/28130960/38291812_apply_ORA19SF_2025Dec26_19_14_41.log (no errors)
SQL Patching tool complete on Fri Dec 26 19:15:03 2025
--> datapatch 작업 완료됨

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 26 19:15:45 2025
Version 19.29.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.29.0.0.0

[ol8ora19sf]<SYS@ORA19SF>$
BEGIN
    DBMS_SCHEDULER.ENABLE('SYS.OBJNUM_REUSE_MAINTAIN_JOB$$');
END;
/

 

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 200
COL OWNER FORMAT A10
COL JOB_NAME FORMAT A35
COL ENABLED FORMAT A10
COL STATE FORMAT A15
COL NEXT_RUN_DATE FORMAT A40

SELECT OWNER
     , JOB_NAME
     , ENABLED
     , STATE
     , NEXT_RUN_DATE
  FROM DBA_SCHEDULER_JOBS
 WHERE JOB_NAME = 'OBJNUM_REUSE_MAINTAIN_JOB$$'
   AND OWNER = 'SYS';


OWNER      JOB_NAME                            ENABLED    STATE           NEXT_RUN_DATE
---------- ----------------------------------- ---------- --------------- ----------------------------------------
SYS        OBJNUM_REUSE_MAINTAIN_JOB$$         TRUE       SCHEDULED       25/12/26 19:26:05.685592 +09:00

1 row selected.

Elapsed: 00:00:00.04

 

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 200
SET PAGESIZE 100
SET TRIMSPOOL ON

COL SCHEMA_NAME   FORMAT A15  HEADING 'Schema'
COL JOB_NAME      FORMAT A35  HEADING 'Job Name'
COL STATE         FORMAT A10  HEADING 'State'
COL NEXT_RUN_DATE FORMAT A40  HEADING 'Next Run Date'

SELECT owner AS schema_name
     , job_name
     , state
     , next_run_date
  FROM sys.all_scheduler_jobs
 WHERE state = 'RUNNING'
 UNION
SELECT owner AS schema_name
     , job_name
     , state
     , next_run_date
  FROM sys.all_scheduler_jobs
 WHERE state = 'SCHEDULED'
   AND CAST(next_run_date AS DATE) > SYSDATE
   AND CAST(next_run_date AS DATE) < SYSDATE + 1/24;

Schema          Job Name                            State      Next Run Date
--------------- ----------------------------------- ---------- ----------------------------------------
SYS             OBJNUM_REUSE_MAINTAIN_JOB$$         SCHEDULED  25/12/26 19:26:05.685592 +09:00

1 row selected.

 

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 300
SET PAGESIZE 1000
SET COLSEP ' | '
SET TRIMOUT ON
SET TRIMSPOOL ON

COL PATCH_ID       FOR 99999999       HEADING 'Patch ID'
COL PATCH_TYPE     FOR A10            HEADING 'Type'
COL ACTION         FOR A10            HEADING 'Action'
COL STATUS         FOR A10            HEADING 'Status'
COL ACTION_TIME    FOR A20            HEADING 'Action Time'
COL DESCRIPTION    FOR A60            HEADING 'Description' WORD_WRAPPED
COL SOURCE_VERSION FOR A15            HEADING 'Source Ver'
COL TARGET_VERSION FOR A15            HEADING 'Target Ver'

SELECT A.PATCH_ID
     , A.PATCH_TYPE
     , A.ACTION
     , A.STATUS
     , TO_CHAR(A.ACTION_TIME, 'YYYY-MM-DD HH24:MI:SS') AS ACTION_TIME
     , A.SOURCE_VERSION
     , A.TARGET_VERSION
     , A.DESCRIPTION
  FROM DBA_REGISTRY_SQLPATCH A
 ORDER BY A.ACTION_TIME;

 Patch ID | Type       | Action     | Status     | Action Time          | Source Ver      | Target Ver      | Description
--------- | ---------- | ---------- | ---------- | -------------------- | --------------- | --------------- | ------------------------------------------------------------
 37960098 | RU         | APPLY      | SUCCESS    | 2025-12-13 17:31:06  | 19.1.0.0.0      | 19.28.0.0.0     | Database Release Update : 19.28.0.0.250715 (37960098)
 38291812 | RU         | APPLY      | SUCCESS    | 2025-12-26 19:14:55  | 19.28.0.0.0     | 19.29.0.0.0     | Database Release Update : 19.29.0.0.251021 (38291812)

 

--invalid 오브젝트 확인
[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 180
SET PAGESIZE 100
SET COLSEP ' | '
SET VERIFY OFF
SET FEEDBACK ON

COLUMN OWNER       FORMAT A30 HEADING 'Owner'
COLUMN OBJECT_NAME FORMAT A30 HEADING 'Object Name'
COLUMN OBJECT_TYPE FORMAT A20 HEADING 'Object Type'
COLUMN STATUS      FORMAT A10 HEADING 'Status'

SELECT OWNER
     , OBJECT_NAME
     , OBJECT_TYPE
     , STATUS
  FROM DBA_OBJECTS
 WHERE STATUS <> 'VALID'
 ORDER BY OWNER, OBJECT_NAME;

no rows selected

Elapsed: 00:00:00.02


15. 전체 작업 원복

 

15-1. 오라클 홈 변경 후 datapatch 원복

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_HOME
/u01/app/oracle/product/19.29/db_1

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl stop database -db ora19sf

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ crsctl stat res ora.ora19sf.db -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ora19sf.db
      1        OFFLINE OFFLINE                               Instance Shutdown,ST
                                                             ABLE
--------------------------------------------------------------------------------


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $OLD_ORACLE_HOME
/u01/app/oracle/product/19c/db_1

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl modify database -db ora19sf -oraclehome $OLD_ORACLE_HOME

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl config database -db ora19sf
Database unique name: ORA19SF
Database name: ORA19SF
Oracle home: /u01/app/oracle/product/19c/db_1
Oracle user: oracle
Spfile: +DATA1/ORA19SF/PARAMETERFILE/spfile.266.1219771929
Password file:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Disk Groups: DATA1,FRA1
Services:
OSDBA group:
OSOPER group:
Database instance: ORA19SF


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ export ORACLE_HOME=$OLD_ORACLE_HOME
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ export PATH=$ORACLE_HOME/bin:$PATH

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $ORACLE_HOME
/u01/app/oracle/product/19c/db_1


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $PATH
/u01/app/oracle/product/19c/db_1/bin:/u01/app/oracle/product/19.29/db_1/bin:/u01/app/oracle/product/19.29/db_1/OPatch:/u01/app/19.29/grid/bin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ which srvctl
/u01/app/oracle/product/19c/db_1/bin/srvctl

 

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ srvctl start database -db ora19sf

--반드시 기존 19.28 엔진으로 oracle instance를 띄운 상태에서 19.29 엔진에 있는 datapatch 를 실행시켜야함 (매우 중요!!!)

--이렇게 하지않고 19.29 엔진으로 oracle instance가 뜬 상태에서 datapatch rollback
--이런식으로 ($ORACLE_HOME/OPatch/datapatch -rollback 38291812 -force) 하면 최초 base release로 돌아감
--(정말 큰일남, 작업 안끝남, 중간에 작업 중지하면 전부 재 컴파일해야함, 트러블 슈팅의 끝판왕까지 가야됨 큰일남 주의할것!!!)

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $ORACLE_HOME/OPatch/datapatch -verbose
SQL Patching tool version 19.28.0.0.0 Production on Fri Dec 26 19:20:56 2025
Copyright (c) 2012, 2025, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_9741_2025_12_26_19_20_56/sqlpatch_invocation.log

Connecting to database...OK
Gathering database info...done
Bootstrapping registry and package to current versions...done
Determining current state...done

Current state of interim SQL patches:
  No interim patches found

Current state of release update SQL patches:
  Binary registry:
    19.28.0.0.0 Release_Update 250705030417: Installed
  SQL registry:
    Applied 19.29.0.0.0 Release_Update 251002005342 successfully on 25/12/26 19:14:55.378294

Adding patches to installation queue and performing prereq checks...done
Installation queue:
  No interim patches need to be rolled back
  Patch 38291812 (Database Release Update : 19.29.0.0.251021 (38291812)):
    Rollback from 19.29.0.0.0 Release_Update 251002005342 to 19.28.0.0.0 Release_Update 250705030417
  No interim patches need to be applied

Installing patches...
Patch installation complete.  Total patches installed: 1

Validating logfiles...done
Patch 38291812 rollback: SUCCESS
  logfile: /u01/app/oracle/cfgtoollogs/sqlpatch/38291812/28130960/38291812_rollback_ORA19SF_2025Dec26_19_21_05.log (no errors)
SQL Patching tool complete on Fri Dec 26 19:21:26 2025


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ alias ss
alias ss='rlwrap sqlplus "/as sysdba"'< /STRONG>
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ ss

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Dec 26 17:30:13 2025
Version 19.28.0.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 300
SET PAGESIZE 1000
SET COLSEP ' | '
SET TRIMOUT ON
SET TRIMSPOOL ON

COL PATCH_ID       FOR 99999999       HEADING 'Patch ID'
COL PATCH_TYPE     FOR A10            HEADING 'Type'
COL ACTION         FOR A10            HEADING 'Action'
COL STATUS         FOR A10            HEADING 'Status'
COL ACTION_TIME    FOR A20            HEADING 'Action Time'
COL DESCRIPTION    FOR A60            HEADING 'Description' WORD_WRAPPED
COL SOURCE_VERSION FOR A15            HEADING 'Source Ver'
COL TARGET_VERSION FOR A15            HEADING 'Target Ver'

SELECT A.PATCH_ID
     , A.PATCH_TYPE
     , A.ACTION
     , A.STATUS
     , TO_CHAR(A.ACTION_TIME, 'YYYY-MM-DD HH24:MI:SS') AS ACTION_TIME
     , A.SOURCE_VERSION
     , A.TARGET_VERSION
     , A.DESCRIPTION
  FROM DBA_REGISTRY_SQLPATCH A
 ORDER BY A.ACTION_TIME;


 Patch ID | Type       | Action     | Status     | Action Time          | Source Ver      | Target Ver      | Description
--------- | ---------- | ---------- | ---------- | -------------------- | --------------- | --------------- | ------------------------------------------------------------
 37960098 | RU         | APPLY      | SUCCESS    | 2025-12-13 17:31:06  | 19.1.0.0.0      | 19.28.0.0.0     | Database Release Update : 19.28.0.0.250715 (37960098)
 38291812 | RU         | APPLY      | SUCCESS    | 2025-12-25 13:11:56  | 19.28.0.0.0     | 19.29.0.0.0     | Database Release Update : 19.29.0.0.251021 (38291812)
 38291812 | RU         | ROLLBACK   | SUCCESS    | 2025-12-26 19:21:18  | 19.29.0.0.0     | 19.28.0.0.0     | Database Release Update : 19.29.0.0.251021 (38291812)


7 rows selected.

Elapsed: 00:00:00.01

 

[ol8ora19sf]<SYS@ORA19SF>$
SET LINESIZE 180
SET PAGESIZE 100
SET COLSEP ' | '
SET VERIFY OFF
SET FEEDBACK ON

COLUMN OWNER       FORMAT A30 HEADING 'Owner'
COLUMN OBJECT_NAME FORMAT A30 HEADING 'Object Name'
COLUMN OBJECT_TYPE FORMAT A20 HEADING 'Object Type'
COLUMN STATUS      FORMAT A10 HEADING 'Status'

SELECT OWNER
     , OBJECT_NAME
     , OBJECT_TYPE
     , STATUS
  FROM DBA_OBJECTS
 WHERE STATUS <> 'VALID'
 ORDER BY OWNER, OBJECT_NAME;

no rows selected

Elapsed: 00:00:00.02

 

15-2. grid 엔진 원복

 

[root@ol8ora19sf][/root]$ echo $OLD_GRID_HOME
/u01/app/19c/grid
[root@ol8ora19sf][/root]$ $OLD_GRID_HOME/crs/install/roothas.sh -prepatch -dstcrshome $OLD_GRID_HOME
Using configuration parameter file: /u01/app/19c/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/ol8ora19sf/crsconfig/hapatch_2025-12-26_05-32-36PM.log
2025/12/26 17:32:40 CLSRSC-347: Successfully unlock /u01/app/19c/grid
2025/12/26 17:32:40 CLSRSC-671: Pre-patch steps for patching GI home successfully completed.

 

--여기서 디비가 재기동되는 것임
[root@ol8ora19sf][/root]$ $OLD_GRID_HOME/crs/install/roothas.sh -postpatch -dstcrshome $OLD_GRID_HOME
Using configuration parameter file: /u01/app/19c/grid/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/oracle/crsdata/ol8ora19sf/crsconfig/hapatch_2025-12-26_07-27-27PM.log
2025/12/26 19:28:11 CLSRSC-329: Replacing Clusterware entries in file 'oracle-ohasd.service'
2025/12/26 19:29:23 CLSRSC-672: Post-patch steps for patching GI home successfully completed.

[root@ol8ora19sf][/root]$

[root@ol8ora19sf][/root]$ alias csrt
alias csrt='crsctl stat res -t'< /STRONG>
[root@ol8ora19sf][/root]$ csrt
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.FRA1.dg
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       ol8ora19sf               STABLE
ora.asm
               ONLINE  ONLINE       ol8ora19sf               Started,STABLE
ora.ons
               OFFLINE OFFLINE      ol8ora19sf               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       ol8ora19sf               STABLE
ora.ora19sf.db
      1        ONLINE  ONLINE       ol8ora19sf               Open,HOME=/u01/app/o
                                                             racle/product/19c/db
                                                             _1,STABLE
--------------------------------------------------------------------------------


15-3. 인벤토리 원상 복구

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ echo $OLD_GRID_HOME
/u01/app/19c/grid
[+ASM:grid@ol8ora19sf][/home/grid]$ $OLD_GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$OLD_GRID_HOME CRS=TRUE < /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2025, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>12.2.0.7.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19c/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19c/db_1" TYPE="O" IDX="2"/>
<HOME NAME="OraGI19Home2" LOC="/u01/app/19.29/grid" TYPE="O" IDX="3" CRS="true"/>
<HOME NAME="OraDB19Home2" LOC="/u01/app/oracle/product/19.29/db_1" TYPE="O" IDX="4"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>

 

[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid
[+ASM:grid@ol8ora19sf][/home/grid]$ $NEW_GRID_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$NEW_ORACLE_HOME CRS=FALSE < /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc

 

[+ASM:grid@ol8ora19sf][/home/grid]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2025, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>12.2.0.7.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19c/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19c/db_1" TYPE="O" IDX="2"/>
<HOME NAME="OraGI19Home2" LOC="/u01/app/19.29/grid" TYPE="O" IDX="3"/>
<HOME NAME="OraDB19Home2" LOC="/u01/app/oracle/product/19.29/db_1" TYPE="O" IDX="4"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>
[+ASM:grid@ol8ora19sf][/home/grid]$

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ echo $NEW_ORACLE_HOME
/u01/app/oracle/product/19.29/db_1

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ $NEW_ORACLE_HOME/oui/bin/runInstaller -silent -detachHome ORACLE_HOME=$NEW_ORACLE_HOME< /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
You can find the log of this install session at:
 /u01/app/oraInventory/logs/DetachHome2025-12-26_05-39-10PM.log
'DetachHome' was successful.


--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ echo $NEW_ORACLE_HOME
/u01/app/19.29/grid

[+ASM:grid@ol8ora19sf][/home/grid]$ $NEW_ORACLE_HOME/oui/bin/runInstaller -silent -detachHome ORACLE_HOME=$NEW_ORACLE_HOME< /STRONG>
Starting Oracle Universal Installer...

Checking swap space: must be greater than 500 MB.   Actual 16378 MB    Passed
The inventory pointer is located at /etc/oraInst.loc
You can find the log of this install session at:
 /u01/app/oraInventory/logs/DetachHome2025-12-26_05-40-02PM.log
'DetachHome' was successful.

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ cat /u01/app/oraInventory/ContentsXML/inventory.xml
<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 1999, 2025, Oracle and/or its affiliates.
All rights reserved. -->
<!-- Do not modify the contents of this file by hand. -->
<INVENTORY>
<VERSION_INFO>
   <SAVED_WITH>12.2.0.7.0</SAVED_WITH>
   <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER>
</VERSION_INFO>
<HOME_LIST>
<HOME NAME="OraGI19Home1" LOC="/u01/app/19c/grid" TYPE="O" IDX="1" CRS="true"/>
<HOME NAME="OraDB19Home1" LOC="/u01/app/oracle/product/19c/db_1" TYPE="O" IDX="2"/>
</HOME_LIST>
<COMPOSITEHOME_LIST>
</COMPOSITEHOME_LIST>
</INVENTORY>


15-4. root/grid/oracle os user의 .bash_profile 원상 복구

 

--root os user
[root@ol8ora19sf][/root]$ vi ~root/.bash_profile
[root@ol8ora19sf][/root]$ cat ~root/.bash_profile | egrep -i 'oracle|grid|db'
export ORACLE_BASE=/u01/app/oracle
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$OLD_GRID_HOME
export OLD_DB_HOME=$ORACLE_BASE/product/19c/db_1
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1
export DB_HOME=$OLD_DB_HOME
export PATH=$GRID_HOME/bin:$BASE_PATH

 

[root@ol8ora19sf][/root]$ source ~root/.bash_profile

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ vi ~grid/.bash_profile
[+ASM:grid@ol8ora19sf][/home/grid]$ cat ~grid/.bash_profile | egrep -i 'oracle|grid|db' | grep -i home
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$OLD_GRID_HOME
export OLD_DB_HOME=$ORACLE_BASE/product/19c/db_1
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1
export DB_HOME=$OLD_DB_HOME
export OLD_ORACLE_HOME=$OLD_GRID_HOME
export NEW_ORACLE_HOME=$NEW_GRID_HOME
export ORACLE_HOME=$OLD_GRID_HOME
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'
alias cdoss='cd /home/grid/os_scripts'

[+ASM:grid@ol8ora19sf][/home/grid]$ source ~grid/.bash_profile

 

--oracle os user

[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ vi ~oracle/.bash_profile
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ cat ~oracle/.bash_profile | egrep -i 'oracle|grid|db' | grep -i home
export OLD_GRID_HOME=/u01/app/19c/grid
export NEW_GRID_HOME=/u01/app/19.29/grid
export GRID_HOME=$OLD_GRID_HOME
export OLD_DB_HOME=$ORACLE_BASE/product/19c/db_1
export NEW_DB_HOME=$ORACLE_BASE/product/19.29/db_1
export DB_HOME=$OLD_DB_HOME
export OLD_ORACLE_HOME=$OLD_DB_HOME
export NEW_ORACLE_HOME=$ORACLE_BASE/product/19.29/db_1
export ORACLE_HOME=$OLD_ORACLE_HOME
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$GRID_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias cdt='cd $ORACLE_HOME/network/admin'
alias cdo='cd $ORACLE_HOME'
alias cdod='cd $ORACLE_HOME/dbs'
alias cdrb='cd /home/oracle/rman_backup/$ORACLE_DBNAME'
alias cdrba='cd /home/oracle/rman_backup/$ORACLE_DBNAME/ADG'
alias cdrbx='cd /home/oracle/rman_backup/$ORACLE_DBNAME/XTTS'
alias cdx='cd /home/oracle/xtts'
alias cdos='cd /home/oracle/oracle_scripts'
alias cdoss='cd /home/oracle/os_scripts'
alias cdrbl='cd /home/oracle/os_scripts/rman_log'


[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ source ~oracle/.bash_profile


15-5. 새로운 grid/oracle 홈 삭제 및 골드 이미지 zip 파일 삭제

 

--root os user
[root@ol8ora19sf][/root]$ echo $NEW_GRID_HOME
/u01/app/19.29/grid
[root@ol8ora19sf][/root]$ rm -rf $NEW_GRID_HOME

[root@ol8ora19sf][/root]$ echo $NEW_DB_HOME
/u01/app/oracle/product/19.29/db_1

[root@ol8ora19sf][/root]$ rm -rf $NEW_DB_HOME

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ rm -rf /tmp/patch/19.29/

 

15-6. 기타 파일 삭제

 

--grid os user
[+ASM:grid@ol8ora19sf][/home/grid]$ rm -f /home/grid/grid_19.29.rsp

 

--oracle os user
[ORA19SF:oracle@ol8ora19sf][/home/oracle]$ rm -rf /home/oracle/db_19.29.rsp

 

반응형

+ Recent posts