원문 출처: TriCore, 2017년 8월 29일 게시
Oracle® Database 12c는 하나의 컨테이너 데이터베이스(CDB) 안에 여러 개의 플러거블 데이터베이스(PDB)를 함께 운영할 수 있는 멀티테넌트 아키텍처를 지원합니다. 기존의 일반 데이터베이스(Non-CDB)를 CDB에 통합해야 하는 경우가 종종 발생하는데, 이 글에서는 Non-CDB 데이터베이스를 PDB로 변환하는 방법을 단계별로 소개합니다.
테스트 환경 구성
이 테스트 시나리오는 ABC123.xyz.com 서버에서 실행 중인 Non-CDB 인스턴스 noncdb12c에서 시작됩니다. 목표는 동일한 머신에 CDB 데이터베이스 cdb12c를 생성하고 기존 데이터베이스를 그 안으로 통합하는 것입니다. 변환된 CDB 데이터베이스를 수용하기에 충분한 디스크 공간이 있는지 반드시 사전에 확인하세요.
- 호스트 서버: ABC123.xyz.com
- Non-CDB 데이터베이스: noncdb12c
- Oracle 버전: 12.1.0.2
다음 이미지는 테스트 시나리오를 보여줍니다:
변환 절차
아래 단계에 따라 Non-CDB 데이터베이스를 CDB 데이터베이스로 변환할 수 있습니다.
1단계: 데이터베이스 정상 종료
Non-CDB 데이터베이스를 깨끗하게 종료하려면 다음 단계를 수행합니다:
noncdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
shutdown immediate
2단계: 읽기 전용 모드로 데이터베이스 열기
데이터베이스를 정상 종료한 후, 마운트 배타(exclusive) 모드로 시작하고 읽기 전용 모드로 엽니다:
noncdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
startup mount exclusive
alter database open read only;
3단계: PDB 매니페스트 파일 생성
Non-CDB로부터 PDB 매니페스트 파일을 생성합니다:
noncdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
exec dbms_pdb.describe (pdb_descr_file=>'/tmp/noncdb12c_manifest_file.xml');
4단계: Non-CDB 종료
3단계가 완료되면 Non-CDB를 종료합니다:
noncdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
shutdown immediate
5단계: CDB 시작 및 호환성 확인
CDB가 아직 실행 중이 아니라면 다음 단계에 따라 시작하고 호환성을 검증합니다:
cdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
startup
SET SERVEROUTPUT ON;
DECLARE
Compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY
(pdb_descr_file => '/tmp/noncdb12c_manifest_file.xml')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
6단계: 오류 확인
CDB 데이터베이스 시작이 완료되면 PDB_PLUG_IN_VIOLATIONS 뷰에서 오류 여부를 확인합니다:
cdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
SELECT name, cause, type, message, status FROM PDB_PLUG_IN_VIOLATIONS
WHERE name='NONCDB12C';
참고: 오류가 있다면 다음 단계로 진행하기 전에 반드시 해결해야 합니다.
7단계: CDB에 접속하여 PDB 연결(플러그)
Non-CDB 매니페스트 파일을 사용해 CDB에 접속하고 pdb12c 데이터베이스를 플러그합니다:
cdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
CREATE PLUGGABLE DATABASE pdb12c USING '/tmp/noncdb12c_manifest_file.xml'
COPY
FILE_NAME_CONVERT = ('<Datafile_Location_for_noncdb>', 'Datafile_Location_for_pdb');
참고: 다음 세 가지 옵션이 지원되며, 운영 환경에 맞게 선택할 수 있습니다:
- COPY: 원본 noncdb 데이터파일은 그대로 유지되고, 새 위치에 복사본을 만들어 PDB를 생성합니다. 따라서 PDB 생성 후에도 원본 noncdb 데이터베이스는 계속 운영 가능합니다.
- MOVE: noncdb의 데이터파일을 새 위치로 이동하여 PDB를 생성합니다. 이 경우 PDB 생성 후에는 noncdb 데이터베이스를 더 이상 사용할 수 없습니다.
- NOCOPY: noncdb의 데이터파일을 그대로 사용해 동일한 위치에서 PDB를 생성합니다. 이 경우에도 PDB 생성 후에는 noncdb 데이터베이스를 사용할 수 없습니다.
COPY 또는 MOVE 옵션을 사용할 때는 FILE_NAME_CONVERT 파라미터로 데이터파일의 새 위치를 지정할 수 있습니다.
8단계: 변환 스크립트 실행
7단계가 성공적으로 완료되면 PDB 컨테이너로 전환한 뒤 변환 스크립트인 $ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql을 실행합니다:
cdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
alter session set container=pdb12c
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
9단계: PDB 시작 및 모드 확인
PDB를 시작하고 모드가 open(정상 열림) 상태인지 확인합니다:
cdb12c환경을 설정합니다.- 다음 명령어를 실행합니다:
sqlplus / as sysdba
- SQL 프롬프트에서 다음 코드를 실행합니다:
alter pluggable database open;
SELECT name, open_mode FROM v$pdbs;
결론
Non-CDB 데이터베이스를 CDB 플러거블 데이터베이스로 변환할 때는 데이터베이스 크기에 따라 여러 옵션 중에서 선택할 수 있습니다.
데이터베이스 용량이 매우 크다면 NOCOPY 옵션을 고려할 수 있습니다. 이 방식은 추가로 필요한 디스크 공간을 최소화하고 변환 작업 시간도 단축합니다. 다만 NOCOPY는 원본 데이터베이스 파일을 그대로 보존하지 않으므로 위험 부담이 있습니다. 변환 이전 상태로 되돌려야 하는 상황이 생기면, 변환 작업 전에 미리 백업해 둔 데이터를 이용해 복원해야만 합니다.
반대로 데이터베이스 크기가 작다면 COPY 옵션을 사용하는 것이 좋습니다. 문제가 발생하더라도 원본 파일이 항상 그대로 보존되므로 기존 Non-CDB로 손쉽게 롤백할 수 있기 때문입니다.
궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨 주세요.
Rackspace 애플리케이션 서비스에 대해 자세히 알아보세요.