버전 비교
키
- 이 줄이 추가되었습니다.
- 이 줄이 삭제되었습니다.
- 서식이 변경되었습니다.
사전 준비
환경 조사
코드 블럭 | ||||
---|---|---|---|---|
| ||||
select COMP_NAME, VERSION_FULL, STATUS from DBA_REGISTRY;
select NAME, DISPLAY_VALUE from V$PARAMETER where NAME = 'compatible';
select * from NLS_DATABASE_PARAMETERS where parameter = 'NLS_CHARACTERSET'; |
펼치기 | ||||
---|---|---|---|---|
※ PDB로 전환할 DB의 정보
※ CDB의 정보
|
{}
변환할 DB와 CDB 간의 호환성을 확인합니다.
CDB 쪽의 compatible이 높은 버전이거나, CDB쪽의 컴포넌트가 더 있을 경우에도 추가 작업 없이 전환할 수 있습니다.
또한 CDB쪽의 character set이 전환할 DB의 character set보다 superset이면 문제 없이 전환할 수 있습니다.
Read only 모드로 전환
코드 블럭 | ||||
---|---|---|---|---|
| ||||
shutdown immediate
startup open read only |
펼치기 | ||
---|---|---|
|
구성 정보 확인
DB 정보 추출
코드 블럭 | ||||
---|---|---|---|---|
| ||||
BEGIN
DBMS_PDB.DESCRIBE(pdb_descr_file => '<XML 파일 저장 경로 및 파일명>');
END;
/ |
펼치기 | ||
---|---|---|
|
플러그인 호환성 조사
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '<XML 파일 저장 경로 및 파일명>')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/ |
펼치기 | ||
---|---|---|
|
플러그인 위반 사항 확인
코드 블럭 | ||||
---|---|---|---|---|
| ||||
select NAME, CAUSE, TYPE, MESSAGE, STATUS, ACTION from PDB_PLUG_IN_VIOLATIONS order by TIME, LINE; |
펼치기 | ||
---|---|---|
※ 예제에서는 CDB쪽에 JVM 관련 컴포넌트(CATJAVA, JAVAVM, XML)들이 누락되어 ERROR가 발생한 것을 확인할 수 있습니다.
|
WARNING 상태인 메시지는 PDB로 전환하거나 DB를 재기동하는 등의 일련의 과정을 통해 해결될 수 있으나, ERROR 상태인 메시지는 반드시 문제의 원인을 찾아 해결해야 합니다.
플러그인 이슈 해결
CDB에 누락된 컴포넌트 생성 스크립트 작성
코드 블럭 | ||||
---|---|---|---|---|
| ||||
cat > install_jvm.sql
SET VERIFY OFF
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool <작업 로그 저장 경로>/JServer.log append
alter pluggable database all open;
alter system set "_system_trig_enabled" = false scope=memory;
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -v -b initjvm -c 'PDB$SEED CDB$ROOT' -U "SYS"/"&&sysPassword" <ORACLE_HOME 경로>/javavm/install/initjvm.sql;
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -v -b initxml -c 'PDB$SEED CDB$ROOT' -U "SYS"/"&&sysPassword" <ORACLE_HOME 경로>/xdk/admin/initxml.sql;
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -v -b xmlja -c 'PDB$SEED CDB$ROOT' -U "SYS"/"&&sysPassword" <ORACLE_HOME 경로>/xdk/admin/xmlja.sql;
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -v -b catjava -c 'PDB$SEED CDB$ROOT' -U "SYS"/"&&sysPassword" <ORACLE_HOME 경로>/rdbms/admin/catjava.sql;
connect "SYS"/"&&sysPassword" as SYSDBA
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -v -b catxdbj -c 'PDB$SEED CDB$ROOT' -U "SYS"/"&&sysPassword" <ORACLE_HOME 경로>/rdbms/admin/catxdbj.sql;
shutdown immediate
startup
host <ORACLE_HOME 경로>/perl/bin/perl <ORACLE_HOME 경로>/rdbms/admin/catcon.pl -n 1 -l <작업 로그 저장 경로> -e -b utlrp <ORACLE_HOME 경로>/rdbms/admin/utlrp.sql
SELECT comp_name, version, status FROM dba_registry ORDER BY comp_name;
SELECT dbms_java.get_jdk_version JDK_Version FROM dual;
spool off |
테스트 케이스에서는 CDB 쪽에 JAVA 관련 컴포넌트들이 누락되어 이를 추가해야 하는 상황입니다.
이를 위해 컴포넌트 생성 스크립트를 작성하여 실행해야 하며, CDB와 PDB$SEED에 컴포넌트가 적용되도록 옵션을 주어야 합니다.
CDB에는 있으나 PDB로 전환할 DB에 없는 컴포넌트에 대해서는 PDB로 전환한 후에 추가할 수 있습니다.
CDB 누락 컴포넌트 설치
코드 블럭 | ||||
---|---|---|---|---|
| ||||
@install_jvm |
펼치기 | ||
---|---|---|
|
작성된 컴포넌트 생성 스크립트를 CDB에서 실행합니다.
CDB 컴포넌트 설치 결과 확인
코드 블럭 | ||||
---|---|---|---|---|
| ||||
select COMP_NAME, VERSION_FULL, STATUS from DBA_REGISTRY; |
펼치기 | ||
---|---|---|
|
호환성 이슈 해결 결과 확인
코드 블럭 | ||||
---|---|---|---|---|
| ||||
SET SERVEROUTPUT ON;
DECLARE
compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '<XML 파일 저장 경로 및 파일명>')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/ |
펼치기 | ||
---|---|---|
|
코드 블럭 | ||||
---|---|---|---|---|
| ||||
select NAME, CAUSE, TYPE, MESSAGE, STATUS, ACTION from PDB_PLUG_IN_VIOLATIONS order by TIME, LINE; |
펼치기 | ||
---|---|---|
|
ERROR가 모두 사라졌다면 PDB로 전환해도 됩니다.
PDB 전환
PDB 생성
코드 블럭 | ||||
---|---|---|---|---|
| ||||
CREATE PLUGGABLE DATABASE <새로 생성할 PDB명> USING '<XML 파일 저장 경로 및 파일명>'
COPY FILE_NAME_CONVERT = ('<원본 데이터 파일 저장 경로>', '<PDB 데이터 파일 저장 경로>'); |
펼치기 | ||
---|---|---|
|
펼치기 | |||||||
---|---|---|---|---|---|---|---|
|
기존의 데이터 파일을 복제하여 PDB로 전환하거나, 원래 파일 그대로 전환할 수 있습니다.
NOCOPY 옵션으로 기존의 파일 그대로 PDF로 전환할 경우에는, 기존 경로에 있던 temp file은 사용하지 않게 되므로 모두 지워야 합니다.
PDB로 변환
코드 블럭 | ||||
---|---|---|---|---|
| ||||
ALTER SESSION SET CONTAINER=<새로 생성된 PDB명>;
@?/rdbms/admin/noncdb_to_pdb.sql |
펼치기 | ||
---|---|---|
|
PDB 기동 및 확인
변환된 PDB 기동
코드 블럭 | ||||
---|---|---|---|---|
| ||||
ALTER PLUGGABLE DATABASE <새로 생성된 PDB명> OPEN;
SELECT name, open_mode FROM v$pdbs; |
펼치기 | ||
---|---|---|
|
최종 결과 확인
코드 블럭 | ||||
---|---|---|---|---|
| ||||
select PDB_NAME, to_char(OP_TIMESTAMP,'YYYY/MM/DD HH24:MI:SS') OP_TIME, OPERATION, DB_VERSION, CLONED_FROM_PDB_NAME, DB_NAME from CDB_PDB_HISTORY; |
펼치기 | ||
---|---|---|
|