AutoUpgrade로 12.2 Non-CDB 업그레이드
Oracle 12.2.0.1에서 19c로 AutoUpgrade 진행, PRECHECKS 실패의 FRA 및 아카이브 모드 원인과 조치
#핵심 요약
환경: RHEL 8.4, Oracle 12.2.0.1 Non-CDB ORCL, 19c 소프트웨어는 별도 ORACLE_HOME에 설치
흐름: 12c 사전 점검, 19c Software Only 설치, 19c 대상 CDB 생성, AutoUpgrade 설정 파일 작성, analyze와 fixups, deploy, non-CDB를 PDB로 전환, 최종 검증
deploy는 업그레이드 실패 시 복구용 Guaranteed Restore Point(GRP)를 만들기 때문에 소스 DB에 FRA와 ARCHIVELOG가 필요함
실습 첫 deploy는 이 조건 미충족으로 PRECHECKS에서 실패했음
수업 자료가 사용한 AutoUpgrade JAR 빌드로는 non-CDB의 PDB 자동 전환에 실패해 수동으로 진행했음
#개념과 동작 원리
| 모드 | 하는 일 |
|---|---|
analyze |
사전 점검 preupgrade 결과(html, log)를 만듦 |
fixups |
analyze가 찾은 사전 조치 중 자동 처리 가능한 항목을 실제 source DB에 적용함 |
deploy |
실제 업그레이드 기본적으로 실패 시 복구할 GRP를 만듦 |
설정 upg1.target_cdb=cdb는 12c non-CDB를 업그레이드하면서 19c CDB 안의 PDB로 전환하라는 핵심 설정이라고 수업 자료가 설명함
다만 수업 자료가 쓴 AutoUpgrade JAR의 build.version은 20190207이었고, non-CDB에서 PDB로 자동 전환하는 기능은 2020년 이후 버전 JAR에 적용된 것이라 자동 전환이 실패했다는 것이 실습의 판단임
그래서 전환은 수동으로 진행했음(Non-CDB를 PDB로 전환)
#주요 용어와 구성 요소
| 설정 키 | 의미(환경 값이라 일부만 표기) |
|---|---|
global.autoupg_log_dir |
AutoUpgrade 전체 로그 디렉터리 |
upg1.dbname, upg1.sid |
대상 DB 이름과 SID (orcl) |
upg1.source_home, upg1.target_home |
12.2와 19c의 Oracle Home |
upg1.target_version |
19 |
upg1.target_cdb |
편입할 대상 CDB 이름 |
upg1.log_dir, upg1.start_time, upg1.upgrade_node |
로그 위치, 시작 시간(now), 노드(localhost) |
upg1.add_during_upgrade_pfile |
업그레이드 중 추가할 파라미터 파일(FRA 설정) |
#필수 명령어 또는 SQL
#1. 사전 점검 (12.2 non-CDB)
select banner from v$version;
select name, open_mode, cdb
from v$database;결과 해석: 개별 실행 출력은 기재 없음
#2. 19c Software Only 설치 (사일런트)
Oracle 19c 소프트웨어 설치의 사일런트 설치 명령과 root.sh 실행을 씀
설치 ZIP은 scp로 전송했음(<USERNAME>@<IP>:/home/oracle/)
압축 해제 위치를 만들 때는 아래를 root로 실행했음
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown -R oracle:oinstall /u01/app/oracle/product/19.0.0
chmod -R 775 /u01/app/oracle/product/19.0.0결과 해석: 개별 실행 출력은 기재 없음
#3. 대상 CDB 생성 (PDB 0개)
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=cdb
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname cdb \
-sid cdb \
-createAsContainerDatabase true \
-numberOfPDBs 0 \
-characterSet AL32UTF8 \
-sysPassword <PASSWORD> \
-systemPassword <PASSWORD> \
-emConfiguration NONE \
-storageType FS \
-datafileDestination /u01/app/oracle/oradata \
-totalMemory 1536결과 해석:
비밀번호를 명령행에 쓰면 셸 히스토리와 ps 출력에 남으므로 운영 환경에서는 피함
#4. AutoUpgrade 버전과 설정 파일
/u01/app/oracle/product/19.0.0/dbhome_1/jdk/bin/java \
-jar /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \
-versionmkdir -p /home/oracle/autoupgrade/logs/orcl
vi /home/oracle/autoupgrade/autoupgrade.cfgglobal.autoupg_log_dir=/home/oracle/autoupgrade/logs
upg1.dbname=orcl
upg1.sid=orcl
upg1.source_home=/u01/app/oracle/product/12.2.0/dbhome_1
upg1.target_home=/u01/app/oracle/product/19.0.0/dbhome_1
upg1.target_version=19
upg1.target_cdb=cdb
upg1.log_dir=/home/oracle/autoupgrade/logs/orcl
upg1.start_time=now
upg1.upgrade_node=localhost
upg1.add_during_upgrade_pfile=/home/oracle/autoupgrade/fra_during_upgrade.ora결과 해석:
수업 자료에는 target_cdb가 trarget_cdb로 잘못 쓰인 설명 줄이 있음(설명 문장의 오타로 보이며 설정 파일의 키는 target_cdb)
#5. analyze, fixups, deploy
/u01/app/oracle/product/19.0.0/dbhome_1/jdk/bin/java \
-jar /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \
-config /home/oracle/autoupgrade/autoupgrade.cfg \
-mode analyze
find /home/oracle/autoupgrade/logs -type f | sort# fixups: source DB에 사전 조치를 실제로 적용
/u01/app/oracle/product/19.0.0/dbhome_1/jdk/bin/java \
-jar /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \
-config /home/oracle/autoupgrade/autoupgrade.cfg \
-mode fixups# deploy: 실제 업그레이드
/u01/app/oracle/product/19.0.0/dbhome_1/jdk/bin/java \
-jar /u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/autoupgrade.jar \
-config /home/oracle/autoupgrade/autoupgrade.cfg \
-mode deploy결과 해석: 개별 실행 출력은 기재 없음
#6. deploy 실패 원인 확인
grep -Ei "ERROR|FATAL|ORA-|UPG-|Exception|failed" \
/home/oracle/autoupgrade/logs/orcl/102/dbupgrade_20260906_user.log
grep -Ri -n -B 3 -A 8 "Severity.*ERROR\|ERROR" \
/home/oracle/autoupgrade/logs/orcl/102/prechecks결과 해석:
실습의 결론: deploy가 PRECHECKS 단계에서 실패했고 원인은 FRA 미설정과 source DB의 NOARCHIVELOG 상태, 조치는 DB_RECOVERY_FILE_DEST 구성과 ARCHIVELOG 활성화임
로그 경로의 102와 날짜는 실습 환경의 작업 번호와 날짜이므로 자기 환경의 값으로 바꿈
#7. FRA 구성과 ARCHIVELOG 활성화 (12.2 source DB)
mkdir -p /u01/app/oracle/fast_recovery_area
chown -R oracle:oinstall /u01/app/oracle/fast_recovery_areaexport ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orclALTER SYSTEM SET db_recovery_file_dest_size=10G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest=
'/u01/app/oracle/fast_recovery_area'
SCOPE=BOTH;# /home/oracle/autoupgrade/fra_during_upgrade.ora
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=10GSHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST;결과 해석:
deploy 재실행 전에 실습에서는 이전 로그 디렉터리를 지우고 다시 만들었음
rm -rf /home/oracle/autoupgrade/logs
mkdir -p /home/oracle/autoupgrade/logs결과 해석:
이 rm -rf는 AutoUpgrade 로그만 지움
경로가 맞는지 확인한 뒤 실행하고, 지우기 전 필요한 로그는 보관함
#8. 업그레이드 후
PDB 전환과 최종 검증은 Non-CDB를 PDB로 전환의 절차를 따름
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
autoupgrade.jar -version |
JAR 실행 가능 여부와 빌드 확인 | 홈 경로 |
-config <파일> |
설정 파일 | 경로 |
-mode analyze / fixups / deploy |
모드 | |
SCOPE=BOTH |
메모리와 SPFILE에 모두 반영 | |
ALTER DATABASE ARCHIVELOG |
아카이브 모드 활성화(MOUNT 상태에서) | |
-numberOfPDBs 0 |
대상 CDB를 PDB 없이 생성 |
#사용 조건과 주의사항
실습의 AutoUpgrade 빌드(20190207)는 오래된 버전임
현재 권장 버전, 최신 JAR 사용 여부는 수업 자료에 없어 확인 불가
수업 자료에서 CV_ASSUME_DISTID=OL7로 RHEL 8.4에서 설치했고 INS-13014 경고를 확인했음(소프트웨어 설치 참조)
로그 파일명의 날짜는 실습 실행일임