구분 | 내용 |
1 | CDB 생성 |
2 | CDB 구조 |
3 | CDB 명명 |
4 | CDB 장점 |
5 | CDB 생성에 필요한 버전 |
6 | CDB 루트 컨테이너 |
7 | CDB common 유저 |
구분 | 내용 |
인스턴스 | CDB와 모든 PDB들은 동일한 인스턴스를 공유한다. 동일한 SGA 메모리 구조를 공유하고 메모리를 구성하는데 사용되는 파라미터는 한 개만 존재한다. |
CDB | CDB는 전체 데이터베이스로 메타데이터 및 데이터베이스의 데이터를 저장하는 여러 개의 컨테이너가 포함한다. |
컨테이너 | 시스템의 메타데이터와 스키마 정보 또는 데이터베이스의 메타데이터와 스키마 데이터를 위한 고유하고 독집적인 저장 위치를 의미한다. |
루트 컨테이너 | 각 CDB는 하나의 루트 컨테이너를 포함하고 CDB$ROOT라는 이름을 가진다. 이는 스키마, 스키마 오브젝트 또는 전체 CDB에 속한 비스키마 오브젝트에 대한 위치를 제공한다. PDB를 관리하는데 필요한 메타데이터 저장한다. |
Seed PDB | CDB는 새로운 PDB를 만드는데 사용되는 PDB$SEED라는 PDB를 가지고 있다. PDB$SEED 내에 오브젝트를 추가하거나 변경할 수 없다. |
PDB | 사용자 스키마, 데이터, 코드와 기타 데이터베이스 관련 오브젝트를 담고 있는 유저가 만든 개체이다. PDB는 CDB 내에서 고유하고 독립된 데이터베이스 환경을 가진다. 하나의 CDB는 복수 개의 PDB를 가질 수 있다. |
CDB 인스턴스 | 인스턴스 파라미터, SGA, 백그라운드 프로세스와 같이 일반적인 인스턴스 항목이 포함된 구조이다. |
하나 이상의 컨트롤 파일 | non-CDB와 같이 컨트롤 파일을 다중화 한다. 이 컨트롤 파일은 CDB와 연결된 PDB를 모두 지원한다. |
온라인 리두 로그 파일 | non-CDB와 같이 여러 그룹을 생성하고 다중화 한다. 이 리두 로그가 전체 CDB와 연결된 PDB를 같이 지원한다. 온라인 리두 로그는 루트 컨테이너의 일부로서 저장되는 것으로 간주한다. CDB가 ARCHIVELOG 모드인 경우 아카이브 파일도 생성한다. ARCHIVELOG 모드의 변경은 CDB레벨에서만 수행한다. |
하나 이상의 Temporary 파일 집합 | CDB는 디폴트로 TEMP라는 단일 Temporary 테이블 스페이스를 최소한 한 개를 가진다. 이 테이블 스페이스는 CDB와 PDB에 대한 임시 작업에 대한 요청을 처리한다. CDB는 추가로 Temporary 테이블 스페이스를 생성하거나 정의할 수 있고, PDB마다 Temporary 테이블 스페이스를 생성할 수 있다. |
Undo 테이블 스페이스와 관련 Tempfile | 하나의 UNDO 테이블 스페이스와 tempfile이 non-RAC인 CDB의 루트 컨테이너에 위치한다. 이 UNDO 테이블 스페이스는 CDB와 PDB를 모두 지원한다. RAC 구성에서 각 노드별로 Undo 테이블 스페이스를 가진다. |
SYSTEM과 SYSAUX | CDB의 시스템 테이블 스페이스의 데이터 파일에는 루트 컨테이너에 관한 데이터 딕셔너리와 PDB와 관련된 데이터 딕셔너리에 대한 Pointer를 가진다. CDB는 유저 테이블 스페이스나 유저에 관련되는 데이터 파일을 가지지 않는다. |
톰 카이트의 한 마디
12c에서 어떠한 아키텍처를 선택하는 것과는 별개로 SYSTEM이나 SYSAUX 테이블 스페이스에 오브젝트를 생성하지 못하는 것은 기존에 SYS나 SYSTEM 스키마에 유저 오브젝트를 생성하는 못하는 것과 마찬가지로 아무리 강조해도 지나치치 않다.
Internal 계정인 SYS나 SYSTEM 계정으로 관리자 작업 외 목적으로 로그인해서는 안 된다.
SQL> select name, cdb from v$database;
NAME CDB
--------------------------- ---------
CDB2 YES
1 | 비용절감 |
2 | 쉽고 간단한 데이터 이동 |
3 | 오라클 데이터베이스 Resource Manager 지원 |
4 | PDB의 독립성 |
5 | 관리 의무의 세분화된 분리 제공 |
6 | 손쉬운 퍼포먼스 튜닝 |
7 | 손쉬운 패치와 업그레이드 |
톰 카이트의 한 마디
CDB를 업그레이드/패치할 때 동시에 관련된 PDB를 모두 적용하거나 선택해서 일부만 적용할 수 있다.
패치를 적용하거나 다음 릴리스로 업그레이드할 때 기존에 존재했던 데이터베이스를 업그레이드하는 대신에 새로운 멀티테넌트 DB 인스턴스를 구성하도록 선택할 수 있다.
그런 다음 PDB를 업그레이드/패치하고 기존의 CDB로부터 간단히 몇 초 안에 언플러그해서 새로운 CDB로 플러그 할 수 있다.
이 방식으로 새로운 릴리스에서 각각의 애플리케이션을 테스트하는 목적으로 며칠 또는 몇 주 간의 과정을 통해 PDB를 업그레이드/패치 할 수 있다.
SQL> create user black identified by black container=all;
create user black identified by black container=all
*
ERROR at line 1:
ORA-65096: invalid common user or role name
SQL> create user c##black identified by black container=all;
User created.
SQL>
SQL> create user c##white identified by white;
User created.
SQL> create user c##gray identified by gray container=current;
create user c##gray identified by gray container=current
*
ERROR at line 1:
ORA-65094: invalid local user or role name
SQL> drop user c##white cascade;
User dropped.
- 강좌 URL : http://www.gurubee.net/lecture/4283
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.
이해를 위한 추가적인 내용으로
글만 보면 CDB가 더 좋아보이고
오라클 설치 강좌들은 설명 없이 컨테이너 DB 생성 옵션은 해지하고 설치하라는 말만 있어 확인 결과
쉽게 기본 DB는 Single-DB(~ Oracle11g), 1개 DB만 운영
CDB는 Logical Multi-DB(MultiTenant) 개념으로 1개 이상 DB 운영 최적화
즉 개발 테스트용으로 CDB 무의미(효과 없거나 적음)
하드웨어적으로 DB 서버 10개 이상 있고 평균 가용율이 20%라고 했을 때
(물리적)하드웨어 1대에서 20% * 기존 DB 5개 = 100%
식으로 낭비를 줄이자는 컨셉으로 CBD로 여러 DB를 묶여(=논리적) 낭비를 줄이고 가용율을 높이자는 방법
DB를 다 합쳤을 때 가용율이 100% 만들면
리소스 사용 100% 초과 발생 시, 병목 현상으로 인한 대기열, 속도 저하가 있기 때문에
감안하여 논리적으로 DB를 묶어 효율적으로 서비스 할 수 있다는 개념