Oracle

[Oracle] 12c 메인테넌트 (CDB, PDB)

bbugge 2020. 7. 20. 20:52

// Oracle 12c부터 메인테넌트 기능을 제공함.

// 해당 기능을 간략히 설명하자면, CDB (Container Database) 안에 여러 PDB (Pluggable Database)를 사용할 수 있는데

컨테이너 안에 여러 개의 PDB를 생성하여 Unplug 또는 Plug 하며 효과적으로 DB를 운영할 수 있음.

// 여러 개의 데이터베이스를 생성하여 운영하는 것보다 메인테넌트 기능을 사용하면 리소스를 효율적으로 사용할 수 있을 것 같음.

(보통 1개의 데이터 베이스 당 프로세스 할당 갯수가 53 ~54 정도 되는데 메인테넌트 기능을 이용하면 PDB 추가 할 때마다 프로세스가 1~2개 정도만 증가함.)

 

SQL > show pdbs

           CON_ID  CON_NAME                                 OPEN  MODE  RESTRICTED
------------------  ----------------------------------------  ------  -------  --------------
                   2  PDB$SEED                                    READ  ONLY   NO
                   3  PDB1                                          READ  WRITE  NO
                   4  PDB1_2                                       READ  ONLY   NO

 

SQL > show con_name

CON_NAME

--------------------------------------------------

CDB$ROOT

 

// 사용하고자 하는 container로 변경

SQL > alter session set container=PDB1;

SQL > show con_name

CON_NAME

--------------------------------------------------

PDB1

 

// Restricted는 Database 외부에서 접근할 때 sysdba 계정을 제외한 나머지 계정들에게 제한을 하는 모드임.

// sysdba가 부여한 권한을 가진 계정만 접근 가능.

SQL > alter pluggable database open restricted;

 

// read only는 데이터를 수정하는 일 없이 select 요청만 이용하고자 할 때 사용하는 모드임.

SQL > alter pluggable database open read only;

 

// CDB 아키텍처

참조 -> http://www.gurubee.net/lecture/3316

// 로그를 쓸 때 존재하는 모든 PDB들의 Container가 단일로 로그를 쓰기 때문에 archivelog 모드 사용 시 CDB에서 alter 구문을 날려야 한다.

// sga_target을 각 PDB별로 다르게 적용할 수 있는 것으로 보아, SGA로 부터 공간을 나눠서 쓰는 듯함.

// 시스템에 큰 영향을 끼치지 않는 parameter들은 각 PDB에서 별도로 적용 및 사용가능(?) CDB에서 설정해야하는 parameter도 존재

 

> PDB를 언플러그해서 CDB로 플러그

SQL > alter pluggable database pdb1 close;

SQL > alter pluggable database pdb1 unplug into '/tmp/pdb1.xml';

SQL > drop pluggable database pdb1 keep datafiles;

 

// plug하고 싶은 CDB에서 plug 가능 여부를 체크 (DBMS_PDB.CHECK_PLUG_COMPATIBILITY) 후

// ASM인 경우

SQL > create pluggable database pdb1 using '/tmp/pdb1.xml';  // 이전 위치의 파일 지울 것!

// ASM이 아닌 경우

SQL > create pluggable database pdb1 using '/tmp/pdb1.xml' file_name_convert=('/oradata/CDB1/pdb3', '/oradata/CDB2/pdb3');

 

> non-CDB를 PDB로 플러그

// non-cdb를 startup open read only 

SQL > exec DBMS_PDB.DESCRIBE('/tmp/pbd1.xml');

 

// plug하고 싶은 CDB에서 plug 가능 여부를 체크 (DBMS_PDB.CHECK_PLUG_COMPATIBILITY) 후

// ASM인 경우

SQL > create pluggable database pdb1 using '/tmp/pdb1.xml';  // 이전 위치의 파일 지울 것!

// ASM이 아닌 경우

SQL > create pluggable database pdb1 using '/tmp/pdb1.xml' file_name_convert=('/oradata/CDB1/pdb3', '/oradata/CDB2/pdb3');

 

> CDB와 PDB의 백업과 복구

 

> MORE => http://www.gurubee.net/lecture/3316