프린트 하기

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 이관 참고 이미지

https://docs.oracle.com/en/database/oracle/oracle-database/26/upgrd/img/noncdb-pdb.png

 

 

서버 정보
소스 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