OS 환경 : Oracle Linux 9.6 (64bit)
DB 환경 : Oracle AI Database 19.27, 23.26.1.0.0 ai
방법 : 오라클 19c to 26ai Autoupgrade Refreshable Pluggable Database 이용 업그레이드
본문에서는 non-cdb 오라클 19c(19.27)에서 cdb 26ai(23.26.1)로 autoupgrade를 이용해 업그레이드 하는 방법을 설명함
이때 autoupgrade의 기능인 refreshable pluggable database라는 기능을 이용함
이 방식은 non-cdb db를 DB Link를 통해 운영 중인 데이터를 미리 복제하고, 이후 증분 데이터만 리프레시 및 업그레이드하여 최종 전환 시점에만 짧은 다운타임을 가짐
장점: 최소한의 가동 중단, 자동화된 Non-CDB to PDB 전환
단점: 복제 중 네트워크 단절 시 프로세스 재시작 필요
이 방식의 단점은 업그레이드 중 db 링크가 끊기게되면 처음부터 다시 해야한다는 점임
참고로 본문 시나리오에서 26ai cdb는 먼저 구축이 되어 있어야함, 그리고 23.26.1에 타임존이 43인데 19.27은 타임존이 44버전임. 이로 인해 업그레이드시 문제가 발생해서 본문 내용을 보고 타임존을 미리 업그레이드 해줘야함
그리고 23.26.2 RU가 나올때는 타임존 44를 포함해서 나온다고 함
참고 : https://alexzaballa.com/oracle-pdb-refreshable-clones-from-19-27dst-44-to-26ai-dst-43/
AutoUpgrade란?
Oracle AutoUpgrade는 업그레이드 시작 전 준비 단계부터 실제 배포, 그리고 업그레이드 후 점검 및 구성 마이그레이션에 이르기까지 전 과정을 자동화하도록 설계된 유틸리티임
- 최신 버전 활용 권장 : AutoUpgrade는 각 Release Update(RU)에 기본 포함($ORACLE_HOME/rdbms/admin)되어 있지만, 오라클은 항상 가장 최신 버전의 autoupgrade.jar를 다운로드하여 사용할 것을 강력히 권장한다고 함
(로그인 없이도 [Database Upgrades and Migrations](https://www.oracle.com/database/upgrades) 페이지에서 다운로드 가능함)
- 다중 DB 업그레이드 : 단일 설정 파일(Configuration File)을 통해 여러 개의 데이터베이스 배포본을 동시에 업그레이드할 수 있으며, 각 DB 환경에 맞게 커스텀 설정이 가능함
- 지원 에디션 : 본 도구는 Enterprise Edition 및 Standard Edition에서 사용할 수 있음(그 외 에디션은 지원 대상에서 제외)
- OS 통합 단일 도구 : autoupgrade.jar는 Java 기반의 실행 파일로 설계되어 있어, 단 하나의 파일로 Linux, Unix(AIX, Solaris, HP-UX), Windows 등 다양한 OS 환경을 모두 지원함
주요 작동 모드 및 단계
AutoUpgrade는 각 단계별로 데이터베이스의 안정성을 보장하고 관리자의 개입을 최소화함
이슈 방지 (Analyze & Fixup 모드):
- Analyze: 데이터베이스에 대한 읽기 전용 분석을 수행하여 수리(Fix)가 필요한 이슈를 식별함. 이때 운영 중인 DB에 영향을 주지 않고 실행 가능함
- Fixup: 수동 개입이 필요한 부분과 업그레이드 배포 단계에서 자동 수정이 가능한 부분을 구분하여 식별함
업그레이드 간소화 (Deploy & Upgrade 모드):
- Deploy: 설정 파일에 지정된 데이터베이스를 실제로 수정하고 업그레이드함. 이 과정에서 커스텀 스크립트를 호출하여 DB를 구성할 수 있고 대부분의 경우 관리자 개입 없이 자동 수정(Automatic Fixes)을 수행함
사후 점검 및 구성 마이그레이션 (Postupgrade):
- 업그레이드 완료 후 사후 점검을 실시하고 사용자의 커스텀 스크립트나 자동 사후 수정 작업을 수행함
- .ora 파일 점검 : 업그레이드 성공 여부를 최종 확인한 뒤, 소스 홈(Source Home)에 있는 sqlnet.ora, tnsnames.ora, listener.ora 등의 핵심 네트워크 설정 파일을 타겟 홈(Target Home)으로 복사함
이후 새 Oracle Home에서 업그레이드된 DB를 기동하며 프로세스를 마무리함
참고 : Oracle Linux 7.6에 Oracle 18c 에서 Oracle 19c로 AutoUpgrade 가이드 ( https://positivemh.tistory.com/540 )
참고 : Oracle 26ai 업그레이드 using AutoUpgrade ( https://gdtn.notion.site/Oracle-26ai-using-AutoUpgrade-2fffd934e10a80c3ac16d82240f2ee43 )
autoupgrade non-cdb to pdb 이관 참고 이미지

서버 정보
소스 db 정보 : OS : Linux, SID : ORA19DBFS, 버전 : 19c(19.27), 아키텍쳐 : Non-CDB, IP : 192.168.137.50
타겟 db 정보 : OS : Linux, SID : ORA26DBFS(cdb), MIGPDB(이관후 pdb명) 버전 : 26ai(23.26.1.0), 아키텍쳐 : CDB, IP : 192.168.137.60
테스트
1. Autoupgrade 다운로드 및 사전 설정
2. Autoupgrade Analyze
3. Autoupgrade Fixup
4. Autoupgrade Deploy
5. 증분 데이터 생성
6. Autoupgrade Deploy - Proceed
7. 결과 확인
테스트
1. Autoupgrade 다운로드 및 사전 설정
먼저 autoupgrade 툴 최신 버전 다운로드
아래 링크 또는 AutoUpgrade Tool(KB123450)에서 다운로드 가능
https://www.oracle.com/database/upgrades
AutoUpgrade 26.2 버전을 다운로드 받은 뒤 타겟 서버에 업로드
|
1
2
3
|
$ cd /home/oracle
$ ls -al autoupgrade.jar
-rw-r--r-- 1 oracle dba 6729677 Jan 31 16:57 autoupgrade.jar
|
권한이 root:root라면 oracle:dba로 변경해줘야함
버전 확인
|
1
2
3
4
5
6
7
8
9
10
|
$ java -jar autoupgrade.jar -version
build.version 26.2.260205
build.date 2026/02/05 04:36:27 +0000
build.hash 226a8557b
build.hash_date 2026/02/04 13:52:42 +0000
build.supported_target_versions 12.2,18,19,21,23
build.type production
build.label (HEAD, tag: v26.2, origin/rdbms_19.31)
build.MOS_NOTE 2485457.1
build.MOS_LINK https://support.oracle.com/epmos/faces/DocumentDisplay?id=2485457.1
|
26.2 버전임
db 버전 확인(소스 db에서 수행)
|
1
2
3
4
5
|
SQL> select instance_name, version_full, (select cdb from v$database) cdb from v$instance;
INSTANCE_NAME VERSION_FULL CDB
---------------- ----------------- ---
ORA19DBFS 19.27.0.0.0 NO
|
db 링크용 유저 생성(system 유저 이용시 생략 가능)(소스 db에서 수행)
|
1
2
3
|
SQL> create user miguser identified by miguser;
User created.
|
db 링크용 유저 권한 부여(system 유저 이용시 생략 가능)(소스 db에서 수행)
|
1
2
3
|
SQL>
grant connect, create pluggable database, select_catalog_role to miguser;
grant read on sys.enc$ to miguser;
|
타겟 db 버전 확인(타겟 db에서 수행)
|
1
2
3
4
5
|
SQL> select instance_name, version_full, (select cdb from v$database) cdb from v$instance;
INSTANCE_NAME VERSION_FULL CDB
---------------- ----------------- ---
ORA26DBFS 23.26.1.0.0 YES
|
tnsnames.ora 파일에 소스 db 연결정보 입력(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
|
$ cd $ORACLE_HOME/network/admin/
$ vi tnsnames.ora
MIGTNS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.50)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORA19DBFS)
)
)
|
tnsping 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ tnsping migtns
TNS Ping Utility for Linux: Version 23.26.1.0.0 - Production on 24-FEB-2026 18:51:15
Copyright (c) 1997, 2026, Oracle. All rights reserved.
Used parameter files:
/app/oracle/product/26ai/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.50)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA19DBFS)))
OK (10 msec)
|
sqlplus 접속 테스트
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$ sqlplus system/oracle@migtns
SQL*Plus: Release 23.26.1.0.0 - Production on Tue Feb 24 18:51:26 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Last Successful login time: Fri Feb 20 2026 15:49:22 +09:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0
SQL> select instance_name, version_full from v$instance;
INSTANCE_NAME VERSION_FULL
---------------- -----------------
ORA19DBFS 19.27.0.0.0
SQL> exit
|
정상적으로 접속됨
db 링크 생성(타겟 db에서 수행)
|
1
2
3
4
5
6
|
SQL>
create database link clonepdb
connect to miguser identified by miguser
using 'MIGTNS';
Database link created.
|
db 링크 정상동작 여부 확인
|
1
2
3
4
5
|
SQL> select * from dual@clonepdb;
D
-
X
|
config 파일 생성(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
$ vi ORA19DBFS.cfg
global.global_log_dir=/home/oracle/autoupgrade/log
global.keystore=/home/oracle/autoupgrade/keystore
upg1.source_home=/app/oracle/product/19c
upg1.target_home=/app/oracle/product/26ai
upg1.sid=ORA19DBFS
upg1.target_cdb=ORA26DBFS
upg1.pdbs=pdb1
upg1.target_pdb_name.pdb1=MIGPDB
upg1.source_dblink.ORA19DBFS=CLONEPDB 300
upg1.target_pdb_copy_option.ORA19DBFS=file_name_convert=none
upg1.start_time=30/12/2030 00:00:00
|
옵션 설명 :
global.global_log_dir : autoupgrade 로그가 저장될 위치 입력
global.keystore : autoupgrade 키스토어가 저장될 위치 입력(tde 사용시 이용하는 옵션)
upg1.source_home : 소스 db의 엔진 경로 입력
upg1.target_home : 타겟 db의 엔진 경로 입력
upg1.sid : 소스 db의 sid 입력
upg1.target_cdb : 타겟 db의 cdb sid 입력
upg1.target_pdb_name : 타겟 db의 pdb sid 입력
upg1.source_dblink.ORA19DBFS : refreshable pdb 용 database 링크 및 refresh 속도(초) 입력
*refresh 란 대상 cdb가 리두 로그를 가져오고 복사본을 롤포워드하는 것을 의미함 ex) 300 입력시 300초 -> 5분
upg1.target_pdb_copy_option.ORA19DBFS=file_name_convert=none : 이관시 filename을 변환할지 확인, omf를 사용하려는 경우 본문과 같이 사용
upg1.start_time=+12h : 다운타임이 시작되는 시점을 지정함. 이 시점에 autoupgrade는 pdb를 마지막으로 refresh 한 뒤 업그레이드를 진행함
*start_time은 최대한 길게 해두는게 좋음, +999h 와 같은 형식으로도 사용가능
*타겟db가 ASM을 사용중이지 않은 경우(omf를 미사용중인 경우) db_create_file_dest 파라미터를 적용해줘야함
현재 cdb 데이터파일 경로 확인(타겟 db에서 수행)
|
1
2
3
4
5
|
SQL> select file_name from dba_data_files where rownum <=1;
FILE_NAME
----------------------------------------------------------------------
/app/oracle/oradata/ORA26DBFS/system01.dbf
|
db_create_file_dest 파라미터 적용(타겟 db에서 수행)(asm의 경우 해주지 않아도됨)
|
1
2
3
|
SQL> alter system set db_create_file_dest = '/app/oracle/oradata';
System altered.
|
참고. 타겟db가 ASM을 사용중이지 않은 경우(omf를 미사용중인 경우) db_create_file_dest 파라미터를 적용하지 않으면 아래 에러가 발생함
|
1
2
3
4
5
6
7
8
9
10
|
$ java -jar autoupgrade.jar -config ORA19DBFS.cfg -mode deploy
AutoUpgrade 25.6.251016 launched with default internal options
Processing config file ...
Creating new AutoUpgrade keystore
AutoUpgrade keystore was successfully created
There were conditions found preventing AutoUpgrade from successfully running
*Target CDB availability
The target database ORA26DBFS either requires the PDB_FILE_NAME_CONVERT or DB_CREATE_FILE_DEST system parameter defined whenthe target_pdb_copy_option config parameter is set to file_name_convert=NONE for database ORA19DBFS
|
2. Autoupgrade Analyze
23.26.1 버전에서 refreshable pluggable database 방식을 사용하는 경우 analyze mode 는 사용하지 못함
추후 버전에서는 analyze 기능을 사용할수도 있다고함
3. Autoupgrade Fixup
Analyze를 수행하지 않았기 때문에 Fixup 결과도 나오지 않음, 본문에서는 수동으로 타임존 문제 해결함
업그레이드 전 타임존 확인
타임존 버전 확인(소스 db에서 수행)
|
1
2
3
4
5
|
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
-------------------- ---------- ----------
timezlrg_43.dat 44 0
|
타임존 버전 확인(타겟 db에서 수행)
|
1
2
3
4
5
|
SQL> select * from v$timezone_file;
FILENAME VERSION CON_ID
-------------------- ---------- ----------
timezlrg_43.dat 43 0
|
타겟db는 타임존 버전이 43인데 소스db가 44임
스캐줄러 로그 정리(타겟 db에서 수행)
|
1
2
3
|
SQL> exec dbms_scheduler.purge_log;
PL/SQL procedure successfully completed.
|
참고로 소스, 타켓db의 타임존 버전이 맞지 않는 경우 업그레이드 도중 에러 발생함
참고 : autoupgrade.jar UPG-1400 UPGRADE FAILED [ORA19DBFS] ( https://positivemh.tistory.com/1337 )
37537949 타임존 DST 44 패치 다운로드
https://support.oracle.com/support/?patchId=37537949
37537949 패치파일 압축 해제
|
1
2
|
$ cd /app/oracle/media/
$ unzip -q p37537949_230000_Linux-x86-64.zip
|
db 및 리스너 종료
|
1
2
|
SQL> shutdown immediate
$ lsnrctl stop
|
37537949 패치 적용
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
$ cd 37537949/
$ $ORACLE_HOME/OPatch/opatch apply -local
Oracle Interim Patch Installer version 12.2.0.1.48
Copyright (c) 2026, Oracle Corporation. All rights reserved.
Oracle Home : /app/oracle/product/26ai
Central Inventory : /app/oraInventory
from : /app/oracle/product/26ai/oraInst.loc
OPatch version : 12.2.0.1.48
OUI version : 12.2.0.9.0
Log file location : /app/oracle/product/26ai/cfgtoollogs/opatch/opatch2026-02-24_20-57-36PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 37537949
Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.
Backing up files...
Applying interim patch '37537949' to OH '/app/oracle/product/26ai'
Patching component oracle.oracore.rsf, 23.0.0.0.0...
Patch 37537949 successfully applied.
Log file location: /app/oracle/product/26ai/cfgtoollogs/opatch/opatch2026-02-24_20-57-36PM_1.log
OPatch succeeded.
|
db 기동
|
1
|
SQL> startup
|
타임존 업그레이드
스캐줄러 로그 삭제
|
1
2
3
|
SQL> exec dbms_scheduler.purge_log;
PL/SQL procedure successfully completed.
|
통계정보 로그 확인
|
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select count(*) from SYS.WRI$_OPTSTAT_HISTGRM_HISTORY;
COUNT(*)
----------
38716
SQL> select count(*) from SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY;
COUNT(*)
----------
44558
|
통계 보관 기간 확인
|
1
2
3
4
5
|
SQL> select systimestamp - dbms_stats.get_stats_history_availability from dual;
SYSTIMESTAMP-DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY
---------------------------------------------------------------------------
+000000000 04:38:02.969810000
|
통계 보관기간 0으로 변경
|
1
2
3
|
SQL> exec dbms_stats.alter_stats_history_retention(0);
PL/SQL procedure successfully completed.
|
systimestamp 모든 통계 제거
|
1
2
3
|
SQL> exec DBMS_STATS.PURGE_STATS(systimestamp);
PL/SQL procedure successfully completed.
|
통계정보 로그 확인
|
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select count(*) from SYS.WRI$_OPTSTAT_HISTGRM_HISTORY;
COUNT(*)
----------
0
SQL> select count(*) from SYS.WRI$_OPTSTAT_HISTHEAD_HISTORY;
COUNT(*)
----------
0
|
모두 0이됨
타임존 업그레이드 전 확인
|
1
2
3
4
5
6
7
8
|
SQL>
SET SERVEROUTPUT ON;
exec DBMS_DST.BEGIN_PREPARE(44);
exec DBMS_DST.FIND_AFFECTED_TABLES;
select * from SYS.DST$AFFECTED_TABLES;
select * from SYS.DST$ERROR_TABLE;
select * from SYS.DST$TRIGGER_TABLE;
exec DBMS_DST.END_PREPARE;
|
PDB가 기동중이라면 종료
|
1
2
3
|
SQL> alter pluggable database all close
Pluggable database altered.
|
온라인 타임존 업그레이드 파라미터 활성화
|
1
2
3
|
SQL> alter system set timezone_version_upgrade_online=true;
System altered.
|
타임존 업그레이드 BEGIN_UPGRADE 수행
|
1
2
3
|
SQL> EXEC DBMS_DST.BEGIN_UPGRADE(44);
PL/SQL procedure successfully completed.
|
database_properties 뷰 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
col PROPERTY_NAME for a30
col PROPERTY_VALUE for a20
select property_name, property_value
from database_properties
where property_name like 'DST_%'
order by property_name;
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION 44
DST_SECONDARY_TT_VERSION 43
DST_UPGRADE_STATE NEEDRESTART
|
현재 재기동이 필요함
db 재기동
|
1
2
3
|
SQL>
shutdown immediate
startup
|
타임존 업그레이드 UPGRADE_DATABASE 수행
|
1
2
3
4
5
6
7
8
9
|
SQL>
SET SERVEROUTPUT ON;
DECLARE
failed_num PLS_INTEGER;
BEGIN
DBMS_DST.UPGRADE_DATABASE(failed_num);
DBMS_OUTPUT.PUT_LINE('DBMS_DST.UPGRADE_DATABASE : ' || failed_num);
END;
/
|
타임존 업그레이드 END_UPGRADE 수행
|
1
2
3
4
5
6
7
8
9
|
SQL>
SET SERVEROUTPUT ON;
DECLARE
failed_num PLS_INTEGER;
BEGIN
DBMS_DST.END_UPGRADE(failed_num);
DBMS_OUTPUT.PUT_LINE('DBMS_DST.END_UPGRADE : ' || failed_num);
END;
/
|
database_properties 뷰 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
col PROPERTY_NAME for a30
col PROPERTY_VALUE for a20
select property_name, property_value
from database_properties
where property_name like 'DST_%'
order by property_name;
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------
DST_PRIMARY_TT_VERSION 44
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
|
44로 업그레이드됨
타임존 업글 후 통계 보관기간 원복
|
1
2
3
|
SQL> exec dbms_stats.alter_stats_history_retention(31);
PL/SQL procedure successfully completed.
|
4. Autoupgrade Deploy
autoupgrade 배포 수행(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
$ cd /home/oracle
$ java -jar autoupgrade.jar -config ORA19DBFS.cfg -mode deploy
AutoUpgrade 26.2.260205 launched with default internal options
Processing config file ...
Loading AutoUpgrade keystore
AutoUpgrade keystore is loaded
+--------------------------------+
| Starting AutoUpgrade execution |
+--------------------------------+
1 Non-CDB(s) will be processed
Type 'help' to list console commands
upg> Copying remote database 'ORA19DBF' as 'MIGPDB' for job 100
|
초기본을 복제중임
lsj 명령을 이용해 30초마다 상태 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
upg> lsj -a 30
upg> +----+---------+----------+---------+-------+----------+-------+---------------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+---------------------------+
| 100|ORA19DBFS|CLONEPDB |EXECUTING|RUNNING| 00:00:00| 3s ago|Creating pluggable database|
+----+---------+----------+---------+-------+----------+-------+---------------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+----------+---------+-------+----------+-------+---------------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+---------------------------+
| 100|ORA19DBFS|REFRESHPDB|EXECUTING|RUNNING| 00:00:00| 3s ago|Starts in 2,578,469 minutes|
+----+---------+----------+---------+-------+----------+-------+---------------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
Remote database 'ORA19DBF' created as PDB 'MIGPDB' for job 100 <<-- clone db 초기본 생성 완료
|
MIGPDB라는 pdb의 초기본이 26ai cdb 안에 생성 완료됨
5. 증분 데이터 생성
샘플 테이블 생성 및 데이터 추가(소스 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
|
SQL> create table sample_tbl1 (id number, name varchar2(30));
Table created.
SQL> insert into sample_tbl1 select object_id, object_name from dba_objects;
24963 rows created.
SQL> commit;
Commit complete.
|
6. Autoupgrade Deploy - Proceed
proceed 명령 수행(이때부터 다운타임 시작되고 업그레이드가 시작됨)(타겟 db에서 수행)
|
1
2
|
upg> proceed -job 100
New start time for job 100 is scheduled 1 minute(s) from now, at 24/02/2026 22:57:25
|
lsj 명령을 이용해 30초마다 상태 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
upg> lsj -a 30
upg> +----+---------+----------+---------+-------+----------+-------+-------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+-------------------+
| 100|ORA19DBFS|REFRESHPDB|EXECUTING|RUNNING| 22:57:25| 0s ago|Starts in 0 minutes|
+----+---------+----------+---------+-------+----------+-------+-------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+---------+---------+-------+----------+-------+-----------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+---------+---------+-------+----------+-------+-----------------+
| 100|ORA19DBFS|DBUPGRADE|EXECUTING|RUNNING| 22:57:25|17s ago|0%Upgraded MIGPDB|
+----+---------+---------+---------+-------+----------+-------+-----------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+---------+---------+-------+----------+-------+------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+---------+---------+-------+----------+-------+------------------+
| 100|ORA19DBFS|DBUPGRADE|EXECUTING|RUNNING| 22:57:25|45s ago|95%Upgraded MIGPDB|
+----+---------+---------+---------+-------+----------+-------+------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+-----------+---------+-------+----------+-------+------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+------------------+
| 100|ORA19DBFS|NONCDBTOPDB|EXECUTING|RUNNING| 22:57:25|13s ago|noncdb_to_pdb - 0%|
+----+---------+-----------+---------+-------+----------+-------+------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+-----------+---------+-------+----------+-------+-------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+-------------------+
| 100|ORA19DBFS|NONCDBTOPDB|EXECUTING|RUNNING| 22:57:25|13s ago|noncdb_to_pdb - 60%|
+----+---------+-----------+---------+-------+----------+-------+-------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+-----------+---------+-------+----------+-------+----------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+----------------+
| 100|ORA19DBFS|NONCDBTOPDB|EXECUTING|RUNNING| 22:57:25|13s ago|80% utlrp 18,486|
+----+---------+-----------+---------+-------+----------+-------+----------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+-----------+---------+-------+----------+-------+------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+------------+
| 100|ORA19DBFS|NONCDBTOPDB|EXECUTING|RUNNING| 22:57:25|11s ago|80% utlrp 38|
+----+---------+-----------+---------+-------+----------+-------+------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+-----------+---------+-------+----------+-------+-----------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+-----------+---------+-------+----------+-------+-----------+
| 100|ORA19DBFS|NONCDBTOPDB|EXECUTING|RUNNING| 22:57:25|11s ago|80% utlrp 9|
+----+---------+-----------+---------+-------+----------+-------+-----------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+----------+---------+-------+----------+-------+----------------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+----------------------------+
| 100|ORA19DBFS|POSTCHECKS|EXECUTING|RUNNING| 22:57:25| 5s ago|Loading database information|
+----+---------+----------+---------+-------+----------+-------+----------------------------+
Total jobs 1
The command lsj is running every 30 seconds. PRESS ENTER TO EXIT
+----+---------+----------+---------+-------+----------+-------+----------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+----------------+
| 100|ORA19DBFS|POSTFIXUPS|EXECUTING|RUNNING| 22:57:25|11s ago|Executing fixups|
+----+---------+----------+---------+-------+----------+-------+----------------+
Total jobs 1
The command lsj is running every 7 seconds. PRESS ENTER TO EXIT
+----+---------+----------+---------+-------+----------+-------+------------------+
|Job#| DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+----+---------+----------+---------+-------+----------+-------+------------------+
| 100|ORA19DBFS|POSTFIXUPS|EXECUTING|RUNNING| 22:57:25| 3s ago|Refreshing DB info|
+----+---------+----------+---------+-------+----------+-------+------------------+
Total jobs 1
The command lsj is running every 7 seconds. PRESS ENTER TO EXIT
Job 100 completed
------------------- Final Summary --------------------
Number of databases [ 1 ]
Jobs finished [1]
Jobs failed [0]
Jobs restored [0]
Jobs pending [0]
Please check the summary report at:
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log
|
완료됨(더 많은 로그가 남았지만 여기엔 일부만 첨부함)
7. 결과 확인
업그레이드 완료 후 로그 확인
html 결과 리포트
/home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.html

text 결과 리포트
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
$ cat /home/oracle/autoupgrade/log/cfgtoollogs/upgrade/auto/status/status.log
==========================================
Autoupgrade Summary Report
==========================================
[Date] Tue Feb 24 23:31:40 KST 2026
[Number of Jobs] 1
==========================================
[Job ID] 100
==========================================
[DB Name] ORA19DBFS
[Version Before Upgrade] 19.27.0.0.0
[Version After Upgrade] 23.26.1.0.0
------------------------------------------
[Stage Name] PREUPGRADE
[Status] SUCCESS
[Start Time] 2026-02-24 22:55:08
[Duration] 0:00:00
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/preupgrade
------------------------------------------
[Stage Name] DRAIN
[Status] SUCCESS
[Start Time] 2026-02-24 22:55:08
[Duration] 0:00:00
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/drain
------------------------------------------
[Stage Name] CLONEPDB
[Status] SUCCESS
[Start Time] 2026-02-24 22:55:09
[Duration] 0:00:40
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/clonepdb
------------------------------------------
[Stage Name] REFRESHPDB
[Status] SUCCESS
[Start Time] 2026-02-24 22:55:49
[Duration] 0:01:43
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/clonepdb
------------------------------------------
[Stage Name] DBUPGRADE
[Status] SUCCESS
[Start Time] 2026-02-24 22:57:37
[Duration] 0:21:44
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/dbupgrade
------------------------------------------
[Stage Name] NONCDBTOPDB
[Status] SUCCESS
[Start Time] 2026-02-24 23:19:21
[Duration] 0:09:41
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/noncdbtopdb
------------------------------------------
[Stage Name] POSTCHECKS
[Status] SUCCESS
[Start Time] 2026-02-24 23:29:03
[Duration] 0:00:06
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/postchecks
[Detail] /home/oracle/autoupgrade/log/ORA19DBFS/100/postchecks/ora19dbfs_postupgrade.log
Check passed and no manual intervention needed
------------------------------------------
[Stage Name] POSTFIXUPS
[Status] SUCCESS
[Start Time] 2026-02-24 23:29:10
[Duration] 0:02:29
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/postfixups
[Detail] /home/oracle/autoupgrade/log/ORA19DBFS/100/postfixups/postfixups.html
------------------------------------------
[Stage Name] POSTUPGRADE
[Status] SUCCESS
[Start Time] 2026-02-24 23:31:40
[Duration] 0:00:00
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/postupgrade
------------------------------------------
[Stage Name] SYSUPDATES
[Status] SUCCESS
[Start Time] 2026-02-24 23:31:40
[Duration] 0:00:00
[Log Directory] /home/oracle/autoupgrade/log/ORA19DBFS/100/sysupdates
------------------------------------------
Summary:/home/oracle/autoupgrade/log/ORA19DBFS/100/dbupgrade/upg_summary.log
|
Summary 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$ cat /home/oracle/autoupgrade/log/ORA19DBFS/100/dbupgrade/upg_summary.log
Oracle Database Release 23 Post-Upgrade Status Tool 02-24-2026 23:18:3
Container Database: ORA26DBF
[CON_ID: 4 => MIGPDB]
Component Current Full Elapsed Time
Name Status Version HH:MM:SS
Oracle Server UPGRADED 23.26.1.0.0 00:17:50
Oracle Workspace Manager UPGRADED 23.26.1.0.0 00:00:45
Oracle Real Application Clusters UPGRADED 23.26.1.0.0 00:00:00
Oracle XML Database UPGRADED 23.26.1.0.0 00:00:57
Datapatch 00:00:19
Final Actions 00:00:40
Post Upgrade 00:00:19
Total Upgrade Time: 00:20:48 [CON_ID: 4 => MIGPDB]
Database time zone version is 44. It meets current release needs.
Grand Total Upgrade Time: [0d:0h:21m:44s]
|
정상적으로 마이그레이션 및 업그레이드 됨
업그레이드 중 pdb 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
|
SQL>
set lines 200 pages 1000
col name for a20
select name, open_mode, restricted from v$pdbs;
NAME OPEN_MODE RES
-------------------- ---------- ---
PDB$SEED READ ONLY NO
ORA26DBFSPDB1 READ WRITE NO
MIGPDB MIGRATE YES
|
MIGPDB가 MIGRATE 상태이고 restricted가 Yes 상태임
업그레이드 완료 후 pdb 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
|
SQL>
set lines 200 pages 1000
col name for a20
select name, open_mode, restricted from v$pdbs;
NAME OPEN_MODE RES
-------------------- ---------- ---
PDB$SEED READ ONLY NO
ORA26DBFSPDB1 READ WRITE NO
MIGPDB READ WRITE NO
|
MIGPDB가 read write 상태임
migpdb로 이동 후 버전 및 데이터 확인(타겟 db에서 수행)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SQL> alter session set container = migpdb;
Session altered.
SQL> select version_full from v$instance;
VERSION_FULL
-----------------
23.26.1.0.0
SQL> select count(*) from sample_tbl1;
COUNT(*)
----------
24963
|
db가 26ai로 업그레이드 되었고 샘플 테이블도 잘 보임
결론 :
autoupgrade를 이용해 non-cdb에서 pdb로 변환까지 하면서 간편하게 26ai로 업그레이드 및 이관이 가능함
이때 본문에서 사용한 refreshable pluggable database를 이용하면 다운타임을 최소화 하면서 증분 데이터까지 network link를 이용해 빠르게 옮길 수 있음
참조 :
AutoUpgrade Tool(KB123450)
How to Perform a Refreshable PDB Switchover.(KB130966)
https://docs.oracle.com/en/database/oracle/oracle-database/26/upgrd/understanding-non-cdb-to-pdb-upgrades-autoupgrade.html
https://mikedietrichde.com/2025/02/19/refreshable-clone-with-autoupgrade-but-keep-your-rac-configuration/
https://dohdatabase.com/2025/12/04/upgrade26/
https://dohdatabase.com/2025/04/17/using-refreshable-clone-pdbs-from-a-standby-database/
https://dohdatabase.com/2024/05/21/upgrade-oracle-base-database-service-to-oracle-database-23ai/
https://positivemh.tistory.com/540
https://docs.oracle.com/ko/learn/pdb-clone-refresh-switchover/index.html#task-4-connect-the-source-and-target-database-systems
https://alexzaballa.com/oracle-pdb-refreshable-clones-from-19-27dst-44-to-26ai-dst-43/
https://gdtn.notion.site/Oracle-26ai-using-AutoUpgrade-2fffd934e10a80c3ac16d82240f2ee43
'ORACLE > Migration' 카테고리의 다른 글
| 오라클 19c to 26ai Autoupgrade 이용 업그레이드 (0) | 2026.03.11 |
|---|---|
| 오라클 19c XTTS 마이그레이션 시 데이터파일 추가 케이스 (0) | 2026.03.07 |
| 오라클 19c XTTS(Cross Platform Transport Tablespace) 마이그레이션 방법 (0) | 2026.01.16 |
| 오라클 19c TTS(Transport Tablespace) 마이그레이션 방법 (0) | 2026.01.13 |
| 오라클 19c to 19c datapump expdp network_link 옵션 사용 (0) | 2025.10.31 |