Oracle® 19c Database는 시장과 기업 환경에서 널리 사용되는 자동화 데이터베이스의 최신 릴리스입니다. Oracle Database 19c는 Oracle Database 12c(릴리스 12.2) 제품군에 속하며, 안정성은 이 제품군의 핵심 요소입니다. 이 두 부분으로 구성된 블로그 시리즈에서는 19c 버전의 설치 및 업그레이드 과정을 다룹니다.
소개
시리즈의 두 번째 파트인 이 글에서는 Windows® 환경에서 Oracle Database를 11.2.0.4에서 19c로 업그레이드하는 방법을 설명합니다. 여기서 소개하는 수동 방식은 데이터베이스 업그레이드 어시스턴트(DBUA)를 사용하지 않습니다.
설치 단계는 이 시리즈의 1부를 참고하세요. 필자는 19c Oracle 홈 디렉터리에 바이너리를 설치했습니다.
ORACLE_HOME=d:\app\product\19.0.0\dbhome_1
다음 단계에 따라 Oracle Database를 19c로 업그레이드할 수 있습니다.
참고: 업그레이드 과정에서 문제가 발생할 경우에 대비하여 업그레이드 전 반드시 유효한 백업을 확보해 두어야 합니다.
1단계: 설치 파일 준비(Staging)
업그레이드를 진행할 수 있도록 19.3 RDBMS(Relational Database Management System) 설치 파일을 미리 준비합니다.
2단계: 사전 업그레이드 작업
사전 업그레이드 프로세스를 완료하려면 다음 단계를 실행합니다.
2.0단계: 준비 작업
Metalink 노트 884522.1을 통해 Oracle Database Pre-Upgrade Utility를 다운로드합니다. 사전 업그레이드 도구를 실행하려면 다음 코드를 실행합니다.
set ORACLE_HOME=d:\app\product\11.2.0.4\dbhome_1
set ORACLE_BASE=d:\app
set ORACLE_SID=ABC
set PATH=%ORACLE_HOME%\bin;%PATH%
%ORACLE_HOME%\jdk\bin\java -jar <top_dir>\preupgrade.jar TERMINAL TEXT -u sys -p <sys_password>d:\app\cfgtoollogs\ABC\preupgrade\preupgrade.txt 파일의 출력 결과를 확인하고, 사전 업그레이드 로그 파일을 검토하여 오류가 있으면 수정합니다.
로그에서 AUTOFIXUP으로 표시된 항목들은 사전 업그레이드 fixup 스크립트를 실행해 자동으로 처리할 수 있습니다. 예를 들어 d:\app\cfgtoollogs\ABC\preupgrade\preupgrade_fixups.sql을 실행하려면 다음 코드를 실행합니다.
cd d:
cd d:\app\cfgtoollogs\ABC\preupgrade
sqlplus sys/<password> as sysdba @preupgrade_fixups.sqlpreupgrade_fixups.sql의 출력 결과를 검토하고, 남아 있는 수동 작업을 모두 수행합니다.
2.1단계: pfile 백업
다음 명령어를 실행하여 pfile을 백업합니다.
SQL> create pfile='d:\app\init_ABC.ora' from spfile;2.2단계: 무효 객체 제거
SQL*Plus에서 utlrp.sql 스크립트를 실행하여 무효 객체(invalid objects)를 컴파일합니다. SYS/SYSTEM 스키마에 무효 객체가 남아 있지 않은지 확인합니다. 그 외의 무효 객체는 별도 테이블에 저장해 두었다가, 나중에 사후 업그레이드 단계에서 비교하는 데 활용합니다.
SQL>@?/rdbms/admin/utlrp.sql
SQL> create table system.invalids_before_upgrade as select * From dba_invalid_objects;2.3단계: EM 리포지토리 제거
다음 단계에 따라 EM(Enterprise Manager) 리포지토리를 제거합니다.
emremove.sql 스크립트를 19c 홈에서 11g 홈으로 복사합니다.
copy d:\app\product\19.0.0\dbhome_1\rdbms\admin\emremove.sql d:\app\product\11.2.0.4\dbhome_1\rdbms\admin
cd d:\app\product\11.2.0.4\dbhome_1\rdbms\admin
sqlplus sys/<password> as sysdba
SET ECHO ON;
SET SERVEROUTPUT ON;
@emremove.sql2.4단계: OLAP 카탈로그 제거
다음 단계에 따라 OLAP 카탈로그를 제거합니다.
cd d:\app\product\11.2.0.4\dbhome_1\olap\admin\
sqlplus sys/<password> as sysdba @catnoamd.sql2.5단계: APEX 제거
Application Express(APEX)를 사용하지 않는다면 다음 명령어를 실행하여 제거할 수 있습니다.
cd d:\app\product\11.2.0.4\dbhome_1\apex
sqlplus sys/<password> as sysdba @apxremov.sql
drop package htmldb_system;
drop public synonym htmldb_system;2.6단계: RECYCLEBIN 비우기
다음 명령어로 DBA RECYCLEBIN을 비웁니다.
PURGE DBA_RECYCLEBIN;2.7단계: 딕셔너리 통계 수집
다음 명령어로 딕셔너리 통계를 수집합니다.
EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;모든 준비가 완료되었는지 확인하기 위해 사전 업그레이드 도구를 다시 한번 실행합니다.
3단계: 업그레이드 작업
다음 업그레이드 단계를 실행하여 업그레이드를 수행합니다.
3.1단계: 업그레이드 수행
Oracle 11g 데이터베이스를 종료합니다.
데이터베이스 종료 후 관리자 권한으로 CMD를 열고, 명령 프롬프트에서 다음 명령어를 실행하여 Oracle 11g Windows 서비스를 모두 제거합니다.
set ORACLE_HOME=d:\app\product\19.0.0\dbhome_1
set PATH=%ORACLE_HOME%\bin;%PATH%
set ORACLE_SID=ABC
sc delete OracleJobSchedulerABC
sc delete OracleMTSRecoveryService
sc delete OracleServiceABC
sc delete OracleVssWriterABC다음 명령어를 실행하여 Oracle 19c Windows 서비스를 생성합니다.
d:\app\product\19.0.0\dbhome_1\bin\ORADIM -NEW -SID ABC -SYSPWD ********* -STARTMODE AUTO -PFILE D:\app\product\19.0.0\dbhome_1\database\INITABC.ORA
Oracle 19c Windows 서비스 생성이 완료되면 해당 서비스를 시작합니다.
3.2단계: Oracle 데이터베이스 시작
19c 환경에서 Oracle Database를 업그레이드 모드(upgrade mode)로 시작합니다.
데이터베이스가 업그레이드 모드로 시작되면 다음 단계를 수행합니다.
다음 명령어를 실행합니다.
cd d:\app\product\19.0.0\dbhome_1\bin
Windows 명령 프롬프트에서 dbupgrade 유틸리티를 실행합니다.
업그레이드가 완료되면 데이터베이스를 시작하고 다음 명령어를 실행합니다.
SQL> @?\rdbms\admin\utlrp.sql
4단계: 사후 업그레이드 작업
업그레이드가 성공적으로 완료되면 사후 업그레이드 fixup 스크립트를 실행합니다.
d:\ cd d:\app\cfgtoollogs\ABC\preupgrade
sqlplus sys/<password> as sysdba @postupgrade_fixups.sql4.1단계: 타임존(Time Zone) 업그레이드
사후 업그레이드 fixup 스크립트를 실행한 후, 다음 명령어를 실행하여 타임존을 업그레이드합니다.
sqlplus / as sysdba <<EOF
-- 현재 설정 확인.
SELECT * FROM v$timezone_file;
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
-- 최신 버전으로 업그레이드 시작.
SET SERVEROUTPUT ON
DECLARE
l_tz_version PLS_INTEGER;
BEGIN
l_tz_version := DBMS_DST.get_latest_timezone_version;
DBMS_OUTPUT.put_line('l_tz_version=' || l_tz_version);
DBMS_DST.begin_upgrade(l_tz_version);
END;
/
SHUTDOWN IMMEDIATE;
STARTUP;
-- 업그레이드 수행.
SET SERVEROUTPUT ON
DECLARE
l_failures
PLS_INTEGER;
BEGIN
DBMS_DST.upgrade_database(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.upgrade_database : l_failures=' || l_failures);
DBMS_DST.end_upgrade(l_failures);
DBMS_OUTPUT.put_line('DBMS_DST.end_upgrade : l_failures=' || l_failures);
END;
/
-- 타임존 검증.
SELECT * FROM v$timezone_file;
COLUMN property_name FORMAT A30
COLUMN property_value FORMAT A20
SELECT property_name, property_value
FROM database_properties
WHERE property_name LIKE 'DST_%'
ORDER BY property_name;
exit;
SQL> select TZ_VERSION from registry$database;TZ_VERSION이 이전 버전으로 표시되면 다음 명령어를 실행합니다.
SQL>update registry$database set TZ_VERSION = (select version FROM v$timezone_file);
SQL>commit;
SQL>select TZ_VERSION from registry$database;
TZ_VERSION
----------
324.2단계: 객체 통계 수집
다음 명령어를 실행하여 고정 객체(fixed objects) 통계를 수집합니다.
sqlplus / as sysdba <<EOF
EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;
exit;4.3단계: 딕셔너리 통계 수집
업그레이드 후 다음 문장을 실행하여 딕셔너리 통계를 수집합니다.
EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;4.4단계: 해결된 이슈 검증
utlusts.sql을 실행하여 남아 있는 이슈가 없는지 확인합니다.
d:\app\product\19.0.0\dbhome_1\rdbms\admin\utlusts.sql TEXT4.5단계: 무효 객체 비교
모든 무효 객체를 2.2단계에서 저장해 둔 목록과 비교하여 일치하는지 확인합니다.
4.6단계: 정리 작업
업그레이드를 완료하려면 다음 단계를 수행합니다.
listener.ora, tnsnames.ora, sqlnet.ora 파일을 Oracle 11g 홈 디렉터리에서 Oracle 19c 홈 디렉터리로 복사하고, oracle_home 파라미터를 그에 맞게 변경합니다.
이 파일들을 모두 d:\app\product\19.0.0\dbhome_1\network\admin 경로에 배치합니다.
참고: 추후 Oracle Database를 11g로 다운그레이드해야 할 가능성에 대비하려면 compatible=11.2.0.4 설정을 유지하는 것이 좋습니다.
결론
위에서 소개한 단계들을 따르면 Windows 환경에서 Oracle Database 11.2.0.4를 19c로 손쉽게 업그레이드할 수 있습니다.
데이터베이스 서비스에 대해 더 자세히 알아보세요.
피드백 탭을 통해 의견을 남기거나 질문을 보내실 수 있습니다. 언제든지 대화를 시작해 주세요.