안녕하세요, Surmin입니다!
이번에는 사일런트 모드로 Oracle 12c를 설치한 후, DBUA를 활용하여 19c로 업그레이드하는 방법에 대해 알아보겠습니다. 이 내용이 테스트에 많은 도움이 되기를 바랍니다!
Silent Mode란
- 오라클 설치 시 GUI 환경 없이, CLI 환경에서 설치 가능한 방법
업그레이드 단계

DBUA란
- 메뉴얼 업그레이드를 편하게 하기 위해서 오라클에서 제공하는 툴
참고용
- 스탠다드 버전인지 엔터프라이즈 버전인지에 따라 굳이 확인할 필요가 없는 경우도 있습니다.
실습 방향
========================
- 12c R2 Silent 설치
- DBUA를 통한 19c 업그레이드 및 매뉴얼을 통한 19c 업그레이드
- 리스너 관련 디렉터리 복사
- 패치를 통한 19c 최신 버전 유지
========================
Test
- 오라클 설치 위한 환경 설정
#필요한 패키지 설치
yum install -y \
bc \
binutils \
compat-openssl10 \
elfutils-libelf \
elfutils-libelf-devel \
glibc \
glibc-devel \
ksh \
libaio \
libaio-devel \
libXrender \
libX11 \
libXau \
libXi \
libXtst \
libgcc \
libnsl \
librdmacm \
libstdc++ \
libstdc++-devel \
libxcb \
libibverbs \
make \
smartmontools \
sysstat
yum -y install xauth
#X11UseLocalhost,X11Forwarding 주석 해제 및 yes 하기
[root@localhost ~]# vi /etc/ssh/sshd_config
파라미터 설정
vi /etc/security/limits.conf
==
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 10240
==
---------------
#구하는법
kernel.shmall
==
#물리 메모리 / 페이징 사이즈
echo $(($(grep MemTotal /proc/meminfo | awk '{print $2*1024}') / $(getconf PAGE_SIZE)))
==
kernel.shmmax
==
#물리 메모리 / 2
echo $(($(grep MemTotal /proc/meminfo | awk '{print $2*1024}') / 2))
==
---------------
vi /etc/sysctl.conf
==
kernle.shmall=427093
kernle.shmmax=874686464
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range=9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
==
vi /etc/selinux/config
==
SELINUX=disabled
==
#임시로 비활성화 se리눅스 어차피 재부팅 하면 비활성화 설정하였으니.
setenforce 0
#종료했다고 경고만 출력중
[root@localhost ~]# getenforce
Permissive
# /etc/hosts 파일에 추가
vi /etc/hosts
==
192.168.56.103 oratest
==
#호스트 네임 변경
hostnamectl set-hostname oratest
유저 생성, 환경변수 설정, 권한 설정
[root@localhost ~]# groupadd dba
[root@localhost ~]# useradd -g dba oracle
#오라클 계정으로 접속 및 oracle 12 tmp 디렉터리로 옮김
su - oracle
[oracle@oratest ~]$ mkdir -p app/oracle
[oracle@oratest ~]$ vi .bash_profile
==
# Backspace 키를 ^H로 설정 (터미널에서 백스페이스 동작 정의)
stty erase ^H
# 새로 생성되는 파일의 기본 권한을 설정 (022는 소유자-쓰기, 그룹/기타-읽기만 가능)
umask 022
# Oracle 소프트웨어가 설치된 최상위 디렉토리 경로
export ORACLE_BASE=/home/oracle/app/oracle
# Oracle 소프트웨어의 실제 설치 위치 (버전별 디렉토리)
export ORACLE_HOME=/home/oracle/app/oracle/product/12.2.0.1
# Oracle 데이터베이스의 식별자 (인스턴스 이름)
export ORACLE_SID=oratest
# Oracle NLS(National Language Support) 데이터 파일 위치 지정
export ORA_NLS10=$ORACLE_HOME/nls/data
# Oracle 네트워크 설정 파일들이 있는 디렉토리 위치
export TNS_ADMIN=$ORACLE_HOME/network/admin
# 라이브러리 검색 경로 설정 (Oracle 및 시스템 라이브러리 포함)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
# Oracle 문자셋 설정 (한국어 KSC5601 문자셋 사용)
export NLS_LANG=American_America.KO16KSC5601
# X11 디스플레이 설정 (주석처리됨) - GUI 프로그램 실행시 필요
#export DISPLAY=192.168.1.11:0.0
# 실행 파일 검색 경로 설정 (시스템 + Oracle 바이너리 경로 포함)
export PATH=$PATH:/usr/ccs/bin:/usr/sbin:/sbin:/usr/bin:/bin:/usr/X11R6/bin:$ORACLE_HOME/bin
# 기본 텍스트 에디터를 vi로 설정
export EDITOR=vi
# 시스템 로케일을 C로 설정 (영어 기본)
export LANG=C
# 프롬프트 형식 설정: 호스트이름:현재디렉토리 @ORACLE_SID]
PS1=`hostname`:'$PWD @$ORACLE_SID] '
export CV_ASSUME_DISTID=OL7
==
#적용
[oracle@oratest ~]$ . .bash_profile
@oratest] cd /home/oracle/app/oracle/
오라클 계정에서 이제 unzip을 진행해야 합니다. 그 전에 소유자를 확인하고, 소유자가 root일 경우 oracle:dba로 변경합니다. 이 작업은 root 계정에서 수행합니다.
@oratest] unzip /tmp/linuxx64_12201_database.zip
oratest:/home/oracle/app/oracle/database @oratest] cd response
#실패를 대비하여 원복 복사
oratest:/home/oracle/app/oracle/database/response @oratest] cp -av db_install.rsp db_install.rsp_backupold
rsp 파일 수정
vi db_install.rsp
==
# 소프트웨어만 설치하는 옵션 선택
oracle.install.option=INSTALL_DB_SWONLY
# Oracle 소프트웨어 관리를 위한 Unix 그룹명 지정
UNIX_GROUP_NAME=dba
# Oracle Inventory 디렉토리 위치 지정
INVENTORY_LOCATION=/home/oracle/app/oraInventory
# Oracle 홈 디렉토리 경로 지정
ORACLE_HOME=/home/oracle/app/oracle/product/12.2.0.1
# Oracle 베이스 디렉토리 경로 지정
ORACLE_BASE=/home/oracle/app/oracle
# Enterprise Edition으로 설치
oracle.install.db.InstallEdition=EE
# 데이터베이스 관리자(SYSDBA) 그룹 지정
oracle.install.db.OSDBA_GROUP=dba
# 데이터베이스 운영자(SYSOPER) 그룹 지정
oracle.install.db.OSOPER_GROUP=dba
# 백업 및 복구 관리자(SYSBACKUP) 그룹 지정
oracle.install.db.OSBACKUPDBA_GROUP=dba
# Data Guard 관리자(SYSDG) 그룹 지정
oracle.install.db.OSDGDBA_GROUP=dba
# 암호화 키 관리자(SYSKM) 그룹 지정
oracle.install.db.OSKMDBA_GROUP=dba
# RAC 관리자(SYSRAC) 그룹 지정
oracle.install.db.OSRACDBA_GROUP=dba
# My Oracle Support 계정의 자격 증명(아이디/비밀번호)을 설치 중에 입력할지 여부를 결정
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
#Oracle에서 제공하는 보안 업데이트 구성을 설정할지 여부를 결정 (true는 거절임)
DECLINE_SECURITY_UPDATES=true
# 컨테이너 데이터베이스로 구성하지 않음
oracle.install.db.ConfigureAsContainerDB=false
==
엔진 설치
../database @oratest]./runInstaller -silent -responseFile /home/oracle/test/database/response/db_install.rsp
#중간에 스크립트 실행 나오면 root로 해주기
엔진 결과
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2025-01-22_05-53-44PM. Please wait ...oratest:/home/oracle/test/database @oratest] [WARNING] [INS-13001] Oracle Database is not supported on this operating system. Installer will not perform prerequisite checks on the system.
CAUSE: This operating system may not have been in the certified list at the time of the release of this software.
ACTION: Refer to My Oracle Support portal for the latest certification information for this operating system. Proceed with the installation if the operating system has been certified after the release of this software.
You can find the log of this install session at:
/home/oracle/app/oraInventory/logs/installActions2025-01-22_05-53-44PM.log
oratest:/home/oracle/test/database @oratest] The installation of Oracle Database 12c was successful.
Please check '/home/oracle/app/oraInventory/logs/silentInstall2025-01-22_05-53-44PM.log' for more details.
As a root user, execute the following script(s):
1. /home/oracle/app/oraInventory/orainstRoot.sh
2. /home/oracle/app/oracle/product/12.2.0.1/root.sh
Successfully Setup Software.
리스너 설치
netca.rsp 파일 미수정시 기본값으로 리스너 구성됨기본값 : 리스너명 : LISTENER, 리스너포트 : 1521 등)
netca.rsp 파일 미수정시 기본값으로 리스너 구성됨기본값 : 리스너명 : LISTENER, 리스너포트 : 1521 등)
리스너 결과
Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /home/oracle/test/database/response/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/home/oracle/app/oracle/product/12.2.0.1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0
DB 생성
rsp 파일에서 Mandatory 가 No 인 항목은 굳이 값을 넣지 않아도됨Yes 인 항목중에서 Default value 를 변경하고 싶은 경우에만 수정하면됨
#생성전에 먼저 백업 파일만들자
oratest:/home/oracle/test/database/response @oratest] cp -av dbca.rsp dbca.rsp_backup
vi dbca.rsp
==
gdbName=ORATEST # 생성될 데이터베이스의 전역 데이터베이스 이름(Global Database Name)
sid=oratest # 데이터베이스의 시스템 식별자(System Identifier)
templateName=New_Database.dbt # 데이터베이스 생성에 사용될 템플릿 파일 이름
sysPassword=oracle # SYS 계정의 비밀번호 설정
systemPassword=oracle # SYSTEM 계정의 비밀번호 설정
storageType=FS # 저장소 유형 설정 (FS는 File System을 의미)
characterSet=AL32UTF8 # 데이터베이스의 문자셋 설정
listeners=LISTENER # 데이터베이스에서 사용할 리스너 이름
automaticMemoryManagement=FALSE # 자동 메모리 관리 사용 여부 (FALSE로 설정되어 수동 관리)
totalMemory=800 # 데이터베이스에 할당될 총 메모리 크기 (MB 단위)
createAsContainerDatabase=false #컨테이너 사용안함
==
dbca 실행전 컴포넌트 불필요한거 비활성화 하기
rsp(dbca) 실행 (DB생성을 위해서)
dbca -silent -createDatabase -responsefile /home/oracle/test/database/response/dbca.rsp
—
dbca 삭제 할려면? (silent mode)
#먼저 DB를 가동 시켜야 한다.
SQL> startup
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 8626240 bytes
Variable Size 603983808 bytes
Database Buffers 222298112 bytes
Redo Buffers 3952640 bytes
Database mounted.
Database opened.
SQL> exit
oratest:/home/oracle @oratest] dbca -silent -deleteDatabase -sourceDB oratest -sysDBAUserName sys -sysDBAPassword [비밀번호]
Connecting to database
4% complete
9% complete
14% complete
19% complete
23% complete
28% complete
47% complete
Updating network configuration files
52% complete
Deleting instance and datafiles
76% complete
100% complete
Look at the log file "/home/oracle/app/oracle/cfgtoollogs/dbca/ORATEST.log" for further details.
—
최종확인
sqlplus / as sysdba
SQL> COLUMN INSTANCE_NAME FORMAT A15
COLUMN HOST_NAME FORMAT A15
COLUMN VERSION FORMAT A12
COLUMN STATUS FORMAT A10
COLUMN STARTUP_TIME FORMAT A20
COLUMN DATABASE_STATUS FORMAT A15
COLUMN INSTANCE_ROLE FORMAT A20SQL
SQL> SELECT
INSTANCE_NUMBER,
INSTANCE_NAME,
HOST_NAME,
VERSION,
STATUS,
STARTUP_TIME,
DATABASE_STATUS,
INSTANCE_ROLE
FROM
v$instance;
INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STATUS STARTUP_TIME DATABASE_STATUS INSTANCE_ROLE
--------------- --------------- --------------- ------------ ---------- -------------------- --------------- --------------------
1 oratest oratest 12.2.0.1.0 OPEN 22-JAN-25 ACTIVE PRIMARY_INSTANCE
#DB이름 확인
SQL> show parameter db_name
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_name string
ORATEST
#dbca 기본값이 container database false 이기 때문에 non-container db로 생성됨
#CON_ID = 0 이면 non-container임
SQL> set lines 200 pages 1000
col name for a20
select con_id, name, open_mode, to_char(open_time, 'yyyy/mm/dd hh24:mi:ss') open_time, dbid from v$containers;SQL> SQL>
CON_ID NAME OPEN_MODE OPEN_TIME DBID
---------- -------------------- -------------------- -------------------------------------- ----------
0 ORATEST READ WRITE 2025/01/22 21:55:24 3726481850
부가설정
- DB 자동시작
- 고객사 환경에 따라 다름으로 무조건은 아닙니다.
vi /etc/oratab
==
oratest:/home/oracle/app/oracle/product/12.2.0.1:Y
==
*내용이 길어짐에 따라 상세 정보를 통해 가독성을 높이겠습니다
DBUA (설치전 필요 사항들)
Oracle Database Upgrade Assistant (DBUA) 란
ERROR: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 발생함
현제 오라클 버전에서 상위버전으로 업그레이드 하는 Tool
하나의 명령으로 수백 개의 데이터베이스를 업그레이드하고 맞춤형 높은 유지 보수 업그레이드 솔루션을 대체하여 시간과 비용을 절약함
startup upgrade 명령어 입력 후 일반 유저가 접속하면 ERROR: ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege 발생함
필요조건
- 업그레이드 하려는 해당 엔진이 먼저 설치가 필요함
#19c엔진은 GUI로 설치
#xclock test위하여 필요함
[root@oratest ~]# dnf config-manager --enable ol8_codeready_builder
[root@oratest ~]# dnf install xorg-x11-apps
#오라클 계정에서 설정한다.
oratest:/home/oracle @oratest] export DISPLAY=192.168.56.1:0.0
#시계 나오는지 확인
oratest:/home/oracle @oratest] xclock
- DISPLAY 설정 방법 (모바엑스텀)
- 해당 부분에 마우스를 올리면 IP대역이 나옴 그 대역에 맞게, 설정

oracle 19c엔진 설치에 필요한 패키지 설치한다.
yum install -y bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make smartmontools sysstat
작업전 사항
#크론탭 중지
[root@oratest oracle]# crontab -l
[root@oratest oracle]# systemctl stop crond
#프로세스 크기 , DB LINK , 실행중인 JOB 확인
# processes 크기 (300 이상 권고)
SQL> show parameter processes
# 300 미만일 시 변경
SQL> alter system set processes=300 scope=spfile;
SQL> shutdown immediate
SQL> startup
# DB LINK 확인
-- 존재 유무 및 Object의 관련성 확인
select owner, db_link, username, host
from dba_db_links;
# 실행중인 JOB 확인
-- 실행중인 job이 없어야 함.
select owner, job_name, session_id, elapsed_time, cpu_used
from dba_scheduler_running_jobs;
# 10g 이하 패스워드 사용하는 계정 유무 확인
select username
from dba_users
where ( password_versions = '10g '
or password_versions = '10g http ')
and username <> 'anonymous';
** 계정의 PASSWORD_VERSIONS에 10G만 있을 경우 조치방법
1. $ORACLE_HOME/network/admin/sqlnet.ora 파일의 SQLNET.ALLOWED_LOGON_VERSION_SERVER 를 서버에 맞는 버전으로 설정한다 (=12)
2. 업그레이드가 완료된 후 아래 작업 진행
- ALTER USER [username] PASSWORD EXPIRE;
- 해당 USER로 로그인 시 암호 재설정
3. SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON -> TRUE로 변경
- ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
#TDE설정 확인 및 spfile 경로 확인
TDE(Transparent Data Encryption)는 Oracle 데이터베이스의 데이터 암호화 기능입니다.
주요 특징:
1.데이터 파일을 디스크에 저장할 때 자동으로 암호화
2.데이터베이스 사용 시 자동 복호화되어 애플리케이션 수정 불필요
3.마스터 암호화 키는 외부 wallet 파일에 저장
-- TDE 암호가 있는 경우 명령줄에서 해당 암호를 지정해야함
select wrl_parameter, status, wallet_type
from v$encryption_wallet;
-- 경로 확인 : show parameter WALLET_ROOT ;
# spfile 경로 확인
show parameter spfile
#system 및 sysaux 공간이 충분한지 확인
set line 1000
set pages 5000
col tablespace_name for a30
col file_name for a80
col free_space for 9999999
compute sum of total_space on report
compute sum of free_space on report
compute sum of MAX_SPACE on report
break on tablespace_name on report nodup
select c.tablespace_name,
a.autoextensible,
a.file_name,
a.total_space "TOTAL_SPACE(MB)",
b.free_space "FREE_SPACE(MB)",
round(b.free_space/a.total_space *100,2) "Free%",
a.max_space "MAX_SPACE(GB)"
from (select file_id,file_name,sum(bytes)/1024/1024 total_space, sum(MAXBYTES)/1024/1024/1024 max_space,autoextensible
from dba_data_files group by file_id,file_name,autoextensible) a, (select file_id,nvl(sum(bytes)/1024/1024,0) free_space
from dba_free_space group by file_id) b, (select tablespace_name,file_id from dba_data_files) c where a.file_id=b.file_id(+) and a.file_id=c.file_id order by tablespace_name;
TABLESPACE_NAME AUTOEX FILE_NAME TOTAL_SPACE(MB) FREE_SPACE(MB) Free% MAX_SPACE(GB)
------------------------------ ------ -------------------------------------------------------------------------------- --------------- -------------- ---------- -------------
SYSAUX YES /home/oracle/app/oracle/oradata/ORATEST/sysaux01.dbf 500 28.5625 5.71 31.9999847
SYSTEM YES /home/oracle/app/oracle/oradata/ORATEST/system01.dbf 810 4.375 .54 31.9999847
UNDOTBS1 YES /home/oracle/app/oracle/oradata/ORATEST/undotbs01.dbf 95 71.0625 74.8 31.9999847
USERS YES /home/oracle/app/oracle/oradata/ORATEST/users01.dbf 5 4 80 31.9999847
- 네트워크 패키지 의존성 체크(***네트워크 유틸리티 패키지에 대한 종속성***)
- 항목들 중에 버그성 이슈가 있었다고함
SELECT * FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR','DBMS_LDAP')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
- 무효화된(INVALID) 상태의 데이터베이스 객체(프로시저, 함수, 뷰 등)의 수를 확인합니다. utlrp.sql 스크립트를 실행하면 이러한 무효화된 객체들을 재컴파일하여 복구할 수 있습니다.
-SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> select count(*) from dba_objects where status='INVALID';
COUNT(*)
----------
0
- 백업 모드 체크
- 백업 모드인 테이블스페이스가 있으면 업그레이드가 실패할 수 있음
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
- 사전 통계 수집
- 업그레이드 성능 향상을 위해
SET ECHO ON;
SET SERVEROUTPUT ON;
EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;
- 휴지통 비우기
- 업그레이드 중 ORA-00600 오류 방지와 업그레이드 시간 단축을 위해
PURGE DBA_RECYCLEBIN;
- Block Change Tracking 비활성화
- **데이터 블록들의 변경된 블록만 추적하는 기능**
- 업그레이드 중 문제 방지(활성화된 경우에만 필요)
- -- MEMORY OVERHEAD 방지를 위해 비활성화여야 함
#STATUS가 ENABLE로 나올경우 , DISABLED 나오면 상관없음 넘어가도됨
SELECT * FROM V$BLOCK_CHANGE_TRACKING;
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
#물리적 뷰(MV) 새로고침
declare
list_failures integer(3) :=0;
begin
DBMS_MVIEW.REFRESH_ALL_MVIEWS(list_failures,'C','', TRUE, FALSE);
end;
/
- 아카이브 로그 설정 및 플래시백 복원 포인트 생성
- 업그레이드 실패 시 복구를 위한 안전장치를 마련하는 것이 주요 목적입니다. 특히 플래시백 복원 포인트를 생성함으로써, 업그레이드에 문제가 발생했을 때 신속하게 이전 상태로 되돌릴 수 있습니다.
archive log list -- 아카이브 로그 설정 확인
===
#아카이브 설정
SHUTDOWN IMMEDIATE
STARTUP MOUNT
-- 2. 아카이브 로그 모드 활성화
ALTER DATABASE ARCHIVELOG;
alter database open;
===
alter system set db_recovery_file_dest_size=10G; -- 복구 파일 대상 크기를 10GB로 설정, 미만으로 주면 Error남
==
#FRA 디렉토리 생성, 플래시백 설정을 위해
#root 로 새성 후 권한 주기
mkdir /recovery_area
==
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/recovery_area' SCOPE=BOTH;
-- 다양한 데이터베이스 상태 확인
select flashback_on from v$database; -- 플래시백 활성화 상태 확인
select name,open_mode,log_mode from v$database; -- DB 이름, 오픈모드, 로그모드 확인
# 권고 : 11.2.0 이상이어야 함
show parameter compatible -- compatible parameter 확인 : 호환성을 유지해야하는 파라미터
show parameter recovery -- 복구 관련 파라미터 확인
select * from V$restore_point; -- 기존 복원 포인트 확인
-- 업그레이드 전 보장된 플래시백 복원 포인트 생성
create restore point pre_upgrade guarantee flashback database;
col name for a20
col GUARANTEE_FLASHBACK_DATABASE for a10
col TIME for a60
set lines 190
select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point; -- 생성된 복원 포인트 확인
#오라클 세션
#디렉터리 생성
mkdir -p /home/oracle/app/oracle/product/dbhome_1
cd /home/oracle/app/oracle/product/dbhome_1
unzip -q /tmp/LINUX.X64_193000_db_home.zip
cd $ORACL_HOME
# Preupgrade 도구 실행: 업그레이드 전 문제점 체크
$ORACLE_HOME/jdk/bin/java -jar /home/oracle/app/oracle/product/dbhome_1/rdbms/admin/preupgrade.jar FILE TEXT DIR /home/oracle/preupgrade_output
# FILE: 파일로 결과 저장
# TEXT: 결과를 텍스트 형식으로
# DIR: 결과 저장할 디렉토리 지정
#사전점검 한다.
@/home/oracle/preupgrade_output/preupgrade_fixups.sql
exit
==
Number Preupgrade Check Name Remedied Further DBA Action
------ ------------------------ ---------- --------------------------------
1. parameter_min_val NO Manual fixup recommended. <= 설정값이 최소값을 만족하는지 ,GUI 로 하니 거기서 설정을 할겁니다.
2. pre_fixed_objects YES None.
3. tablespaces_info NO Informational only.
Further action is optional.
4. rman_recovery_version NO Informational only.
Further action is optional
==
export ORACLE_HOME=/home/oracle/app/oracle/product/dbhome_1
@oratest] ] ./runInstaller
#19c의 bin으로 이동 후 실행
@oratest] ./dbua
DBUA (설치 및 설치 후 확인 사항들)
sys 접속정보 입력

- 사전 통계는 오라클 옵티마이저가 효율적인 SQL 실행 계획을 찾는 데 도움이 되는 필수 정보를 제공합니다. 데이터베이스 업그레이드 후에는 업그레이드 중에 크게 변경된 테이블이나 아직 통계가 수집되지 않은 새 테이블이 있을 수 있으므로 통계를 다시 수집해야 합니다.
- 고정 객체 통계는 오라클 옵티마이저가 효율적인 SQL 실행 계획을 찾는 데 도움이 되는 필수 정보를 제공합니다. 이러한 통계는 이를 생성하는 오라클 데이터베이스 릴리스에만 해당되며 데이터베이스 업그레이드 시 오래 지속될 수 있습니다. 옵티마이저 통계 관리에 대한 자세한 내용은 12.2.0.1 오라클 데이터베이스 SQL 튜닝 가이드를 참조하세요.

- “Enable Parallel Upgrade” (병렬 업그레이드 활성화) – 체크되어 있음 성능 향상을 위해 업그레이드 프로세스를 병렬로 실행할 수 있게 합니다.
- “Recompile Invalid Objects During Post Upgrade” (업그레이드 후 무효한 객체 재컴파일) – 체크되어 있음 업그레이드 완료 후 무효화된 데이터베이스 객체들을 자동으로 재컴파일합니다.
- “Upgrade Timezone Data” (시간대 데이터 업그레이드) – 체크되어 있음 업그레이드 과정에서 시간대 데이터를 최신 버전으로 업데이트합니다.

위에서 체크 포인트 하였으니 여기서는 넘어간다.

선택 안하고 넘어간다.

체크해제 한다.

업그레이드 후 확인
oratest:/home/oracle/app/oracle/product/dbhome_1/bin @oratest] cat /etc/oratab | grep -i prod
oratest:/home/oracle/app/oracle/product/dbhome_1:Y
export ORACLE_HOME=/home/oracle/app/oracle/product/dbhome_1
@oratest] sqlplus / as sysdba
#19c 업그레이드 접속 및 기동 및 Time Zone 버전 조회
SELECT instance_name, version, status, database_status
FROM v$instance;
INSTANCE_NAME VERSION STATUS DATABASE_STATUS
--------------- --------------- ---------- --------------
ORA12C 19.0.0.0.0 OPEN ACTIVE
#19c는 32다.
select * from V$TIMEZONE_FILE;
select DBMS_DST.GET_LATEST_TIMEZONE_VERSION from dual;
#오브젝트 손상 확인
select count(1) from dba_objects where status='INVALID';
# DB LINK 확인
-- 존재 유무 및 Object의 관련성 확인
select owner, db_link, username, host
from dba_db_links;
#네트워크 패키지 의존성 체크 (확인만)
SELECT * FROM DBA_DEPENDENCIES
WHERE referenced_name IN ('UTL_TCP','UTL_SMTP','UTL_MAIL','UTL_HTTP','UTL_INADDR','DBMS_LDAP')
AND owner NOT IN ('SYS','PUBLIC','ORDPLUGINS');
#데이터베이스의 성능을 고려하여 x$ 테이블과 인덱스에 대한 통계 정보를 수집합니다.
EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
#컴포넌트 확인
#컴포넌트 상태 확인
col COMP_ID for a10
col COMP_NAME for a40
col VERSION for a15
set lines 180
set pages 999
select COMP_ID,COMP_NAME,VERSION,STATUS from dba_registry;
#마지막으로 postupgrade_fixups.sql 스크립트를 수행합니다.
#업그레이드 이후에 별도의 조치가 필요한 에러, 경고 또는 정보를 출력합니다.
SET ECHO ON;
SET SERVEROUTPUT ON;
@/home/oracle/app/oracle/cfgtoollogs/dbua/upgrade2025-01-24_03-16-49PM/oratest/postupgrade_fixups.sql
==
#결과
Auto-Generated by: Oracle Preupgrade Script
Version: 19.0.0.0.0 Build: 1
Generated on: 2025-01-24 15:21:51
For Source Database: ORATEST
Source Database Version: 12.2.0.1.0
For Upgrade to Version: 19.0.0.0.0
Preup Preupgrade
Action Issue Is
Number Preupgrade Check Name Remedied Further DBA Action
------ ------------------------ ---------- --------------------------------
5. old_time_zones_exist YES None.
6. dir_symlinks YES None.
7. post_dictionary YES None.
8. post_fixed_objects NO Informational only.
Further action is optional.
The fixup scripts have been run and resolved what they can. However,
there are still issues originally identified by the preupgrade that
have not been remedied and are still present in the database.
Depending on the severity of the specific issue, and the nature of
the issue itself, that could mean that your database upgrade is not
fully complete. To resolve the outstanding issues, start by reviewing
the postupgrade_fixups.sql and searching it for the name of
the failed CHECK NAME or Preupgrade Action Number listed above.
There you will find the original corresponding diagnostic message
from the preupgrade which explains in more detail what still needs
to be done.
PL/SQL procedure successfully completed.
Session altered.
==
#복원지점 삭제한다.
SQL> col name for a20
col GUARANTEE_FLASHBACK_DATABASE for a10
col TIME for a60
set lines 190
select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point;
NAME GUARANTEE_ TIME
-------------------- ---------- ------------------------------------------------------------
PRE_UPGRADE YES 23-JAN-25 09.26.19.000000000 AM
SQL> drop restore point PRE_UPGRADE;
Restore point dropped.
SQL> select NAME,GUARANTEE_FLASHBACK_DATABASE,TIME from V$restore_point;
no rows selected
- COMPATIBLE 매개변수 값을 19.0.0으로 설정하세요 (고객사 서버가 어느정도 안정화 되었다고 판단되면 설정 약 2-3주 한번 올리면 낮출수 없니)
- 한번 값을 올리면 낮출수 없음 낮출경우 에러가 발생함 (아래는 test 했을경우 발생한 ERROR)
- ORA-00201: control file version 19.0.0.0.0 incompatible with ORACLE version 12.2.0.0.0
- ORA-00202: control file: '/home/oracle/app/oracle/oradata/ORATEST/control01.ctl'
SQL> show parameter COMPATIBLE
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
compatible string 12.2.0
noncdb_compatible boolean FALSE
SQL> ALTER SYSTEM SET COMPATIBLE = '19.0.0' SCOPE=SPFILE;
SQL> shut immediate;
---
위에 작업까지 마쳤으면 여기서 변경하는 이유가
배시프로파일 변경후 postupgrade_fixups 돌리면 아래와 같은 에러가 발생하기 때문임
==
ERROR at line 1:
ORA-29284: file read error
ORA-06512: at "SYS.UTL_FILE", line 106
ORA-06512: at "SYS.UTL_FILE", line 746
ORA-06512: at "SYS.DBMS_PREUP", line 3352
ORA-06512: at "SYS.DBMS_PREUP", line 10500
ORA-06512: at line 11
==
=> 배시프로파일에서 오라클 홈 경로 수정 및 적용하기
SQL> startup;
SQL> show parameter COMPATIBLE
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
compatible string 19.0.0
noncdb_compatible boolean FALSE
#크론탭 시작
[root@oratest oracle]# systemctl start crond
TNS설정
#기존 12C에서 19c로 복사
[oracle@oratest network]$ cp -av admin /home/oracle/app/oracle/product/19c/dbhome_1/network/
[oracle@oratest dbhome_1]$ cd network/admin/
#수정
[oracle@oratest admin]$ vi listener.ora
==
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = oratest)
(ORACLE_HOME = /home/oracle/app/oracle/product/19c/dbhome_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oratest)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
==
[oracle@oratest admin]$ lsnrctl stop
[oracle@oratest admin]$ lsnrctl start
#안될경우
[oracle@oratest admin]$ lsnrctl services
#그래도 안될경우
ps -ef | grep tnslsnr
kill -9 [PID]
[oracle@oratest admin]$ lsnrctl stop
[oracle@oratest admin]$ lsnrctl start
패치
패치에 필요한 zip은 /tmp에 옮겼습니다.
#.bash_profile 의 PATH에 OPatch 경로 없는 경우 추가 및 적용
[oracle@oratest ~]$ vi .bash_profile
==
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
==
#패치버전 확인
oratest:/home/oracle @oratest] opatch version
OPatch Version: 12.2.0.1.17
#패치 전 db 및 리스너 모두 종료
oratest:/home/oracle @oratest] lsnrctl stop
SQL> shutdown immediate;
SQL> exit
oratest:/home/oracle/app/oracle/product/19c/dbhome_1 @oratest] mv OPatch OPatch_old
oratest:/home/oracle/app/oracle/product/19c/dbhome_1 @oratest] unzip /tmp/p6880880_190000_Linux-x86-64.zip
#확인
oratest:/home/oracle/app/oracle/product/19c/dbhome_1 @oratest] opatch version
OPatch Version: 12.2.0.1.43
#/tmp 이동 압축 푼다. -> db 패치는 36587798,36582781 만 해당
#패치전 사전 확인
#36582781도 똑같이 진행 하면 됩니다.
oratest:/tmp/36582629 @oratest] cd /tmp/36582629/36587798
oratest:/tmp/36582629/36587798 @oratest] opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 12.2.0.1.43
Copyright (c) 2025, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /home/oracle/app/oracle/product/19c/dbhome_1
Central Inventory : /home/oracle/app/oraInventory
from : /home/oracle/app/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version : 12.2.0.1.43
OUI version : 12.2.0.7.0
Log file location : /home/oracle/app/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2025-01-31_01-03-52AM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
#패치 적용
oratest:/tmp/36582629/36587798 @oratest] opatch apply
Oracle Interim Patch Installer version 12.2.0.1.43
Copyright (c) 2025, Oracle Corporation. All rights reserved.
Oracle Home : /home/oracle/app/oracle/product/19c/dbhome_1
Central Inventory : /home/oracle/app/oraInventory
from : /home/oracle/app/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version : 12.2.0.1.43
OUI version : 12.2.0.7.0
Log file location : /home/oracle/app/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2025-01-31_01-06-23AM_1.log
Verifying environment and performing prerequisite checks...
--------------------------------------------------------------------------------
Start OOP by Prereq process.
Launch OOP...
Oracle Interim Patch Installer version 12.2.0.1.43
Copyright (c) 2025, Oracle Corporation. All rights reserved.
Oracle Home : /home/oracle/app/oracle/product/19c/dbhome_1
Central Inventory : /home/oracle/app/oraInventory
from : /home/oracle/app/oracle/product/19c/dbhome_1/oraInst.loc
OPatch version : 12.2.0.1.43
OUI version : 12.2.0.7.0
Log file location : /home/oracle/app/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2025-01-31_01-06-43AM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 36587798
Do you want to proceed? [y|n]
y <---------------------------------------y 입력
User Responded with: Y
All checks passed.
Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/home/oracle/app/oracle/product/19c/dbhome_1')
Is the local system ready for patching? [y|n]
y <------------------------------------------------------------------y입력
User Responded with: Y
Backing up files...
Applying interim patch '36587798' to OH '/home/oracle/app/oracle/product/19c/dbhome_1'
ApplySession: Optional component(s) [ oracle.has.crs, 19.0.0.0.0 ] , [ oracle.rhp.crs, 19.0.0.0.0 ] , [ oracle.xag, 19.0.0.0.0 ] , [ oracle.has.cvu, 19.0.0.0.0 ] , [ oracle.has.crs.cvu, 19.0.0.0.0 ] not present in the Oracle Home or a higher version is found.
Patching component oracle.rdbms, 19.0.0.0.0...
....
Patching component oracle.has.rsf, 19.0.0.0.0...
Patch 36587798 successfully applied.
Sub-set patch [29585399] has become inactive due to the application of a super-set patch [36587798].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /home/oracle/app/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2025-01-31_01-06-43AM_1.log
OPatch succeeded.
#패치 후 작업(이제 패치된(수정된) sql 파일을 db에 로드해야함)
#db 기동
SQL> startup
[oracle@oratest 36587798]$cd $ORACLE_HOME/OPatch
- opatch 경로로 이동 후 datapatch 명령 수행
datapatch 수행시 수정된 SQL 파일을 데이터베이스에 로드하기 위해 필요한 적용 스크립트를 실행함이 작업 이후에 dba_registry_sqlpatch 뷰를 보면 패치 적용 내역이 표시됨
[oracle@oratest 36587798]$ cd $ORACLE_HOME/OPatch
[oracle@oratest OPatch]$ ./datapatch -verbose
SQL Patching tool version 19.3.0.0.0 Production on Fri Jan 31 01:13:43 2025
Copyright (c) 2012, 2019, Oracle. All rights reserved.
Log file for this invocation: /home/oracle/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_33711_2025_01_31_01_13_44/sqlpatch_invocation.log
Connecting to database...OK
Gathering database info...done
Bootstrapping registry and package to current versions...done
Determining current state...done
....
#패치시 아래와 같은 문구가 떠야 19.24로 된거임
Apply from 19.3.0.0.0 Release_Update 190410122720 to 19.24.0.0.0 Release_Update 240627235157
SQL Patching tool complete on Fri Jan 31 01:13:58 2025
#패치 내역 확인
SET LINESIZE 400
COLUMN ACTION_TIME FORMAT A20
COLUMN ACTION FORMAT A10
COLUMN STATUS FORMAT A10
COLUMN DESCRIPTION FORMAT A60
COLUMN VERSION FORMAT A10
SELECT TO_CHAR(ACTION_TIME, 'YYYYMMDD HH24:MI:SS') AS ACTION_TIME
,ACTION
,STATUS
,DESCRIPTION
,SOURCE_VERSION
,TARGET_VERSION
,PATCH_ID
FROM DBA_REGISTRY_SQLPATCH
ORDER BY ACTION_TIME
/
ACTION_TIME ACTION STATUS DESCRIPTION SOURCE_VERSION TARGET_VERSION PATCH_ID
-------------------- ---------- ---------- ------------------------------------------------------------ ------------------------------ ------------------------------ ----------
20250130 22:22:31 APPLY SUCCESS Database Release Update : 19.3.0.0.190416 (29517242) 19.1.0.0.0 19.3.0.0.0 29517242
20250131 02:32:50 APPLY SUCCESS Database Release Update : 19.24.0.0.240716 (36582781) 19.3.0.0.0 19.24.0.0.0 36582781