새소식

RDBMS/ORACLE & TIBERO

ORACLE Multitenant Architecture CDB, PDB

  • -
728x90
반응형

기존 ORACLE은 1ENGINE에 1INSTANCE 구성으로 데이터베이스를 운영해왔습니다.
(경우에 따라 환경 변수를 바꿔 1ENGINE에 여러개의 INSTANCE를 구성할 수 있지만, 권장은 아님)
ORACLE 12c 부터 "Multitenant Architecture" 라는 새로운 개념의 Architecture를 출시 했습니다.
12년도에 출시된 버전에서 이미 공개된 구성이지만 뒤 늦게 알게되었네요.


Multitenant Architecture

오라클 엔진 위에 CDB(거대한?)를 구성하고 그 안에 컨테이너처럼 PDB를 만들어 사용하고 애플리케이션들은 각각의 PDB를 보고 연결하여 서비스를 할 수 있다.

처음 Multitenant Architecture 구성을 보고 도커와 마치 비슷한 느낌을 받았습니다.
도커 엔진을 통해 컨테이너를 개별적으로 구성/운영하여 마이크로 서비스를 제공하는...

CDB / PDB

오라클 엔진에 CDB를 구성하고 그 위에 개별적으로 PDB를 생성 할 수 있습니다.

[oracle@2235f66166cf ORCLCDB]$ ss

SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 7 07:41:05 2022

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT

show con_name을 통해 CDB$ROOT 즉 CDB 인걸 확인했습니다.

set pagesize 1000
set linesize 500
col name for a30
col open_mode for a10
col open_time for a50
SQL> select name, open_mode, open_time from v$pdbs;

NAME			       OPEN_MODE  OPEN_TIME
------------------------------ ---------- --------------------------------------------------
PDB$SEED		       READ ONLY  07-NOV-22 05.32.42.299 AM +00:00

다음 V$PDBS를 조회하여 해당 CDB에 생성 되어 있는 PDB를 조회 해봅니다.
조회 결과 PDB$SEED가 확인되는데요. PDB를 만들기 위한 템플릿과 같은 용도로 사용 됩니다.
(SQL Server (ms sql)의 model 템플릿 DB와 비슷함.)

SQL> create pluggable database ORCLPDB1 admin user pdb1admin identified by "oracle"
default tablespace ORCLPDB1
datafile '/ORCL/u02/app/oracle/oradata/ORCLCDB/orclpdb1/orclpdb1_usr01.dbf' size 250m autoextend on
file_name_convert=('/pdbseed','/orclpdb1/');

Pluggable database created.

create pluggable database SQL 문장을 사용하여 PDB를 생성 합니다.

 

CREATE PLUGGABLE DATABASE

Use the CREATE PLUGGABLE DATABASE statement to create a pluggable database (PDB). Note: When a new PDB is established in a CDB, it is possible that the name of a service offered by the new PDB will collide with an existing service name. The namespace in wh

docs.oracle.com

set pagesize 1000
set linesize 500
col name for a30
col open_mode for a10
col open_time for a50
SQL> select name, open_mode, open_time from v$pdbs;

NAME			       OPEN_MODE  OPEN_TIME
------------------------------ ---------- --------------------------------------------------
PDB$SEED		       READ ONLY  07-NOV-22 05.32.42.299 AM +00:00
ORCLPDB1		       MOUNTED	  07-NOV-22 07.46.36.910 AM +00:00

정상적으로 PDB가 생성 된걸 확인할 수 있습니다.

SQL> alter pluggable database orclpdb1 open;

Pluggable database altered.

SQL> select name, open_mode, open_time from v$pdbs;

NAME			       OPEN_MODE  OPEN_TIME
------------------------------ ---------- --------------------------------------------------
PDB$SEED		       READ ONLY  07-NOV-22 05.32.42.299 AM +00:00
ORCLPDB1		       READ WRITE 07-NOV-22 07.51.40.111 AM +00:00

기본적으로 PDB 생성 후에는 mount 모드로 되어 있어 open을 수행 합니다.
open 뒤에 아무런 옵션을 주지 않으면 read write 모드로 기동 됩니다.

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=ORCLPDB1;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
ORCLPDB1

CDB에서 PDB로 접속할 수 있습니다. 

SQL> create user pdb1_user identified by oracle;

User created.

SQL> grant connect to pdb1_user;

Grant succeeded.

일반 유저 생성 후 PDB의 admin 유저와 일반 유저 접속 테스트를 해보겠습니다.

[oracle@2235f66166cf ORCLCDB]$ cat tnsnames.ora 
ORCLCDB =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = ORCLCDB.localdomain)     )   ) 
ORCLPDB1 =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = ORCLPDB1.localdomain)     )   )

tnsnames.ora 파일에 PDB 접속 정보 추가해줍니다.

[oracle@2235f66166cf ORCLCDB]$ sqlplus pdb1admin/oracle@ORCLPDB1

SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 7 07:57:33 2022

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@2235f66166cf ORCLCDB]$ sqlplus pdb1_user/oracle@ORCLPDB1

SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 7 07:57:48 2022

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

타 DBMS 사용하시다 ORACLE을 12c 이상 부터 접하시면 개념이 혼동 될 수 있습니다. CDB를 통한 PDB 구성으로 마이크로 애플리케이션 서비스가 아닌 마이크로 데이터베이스 환경을 구성할 수 있습니다.

분석용, 서비스용, 적재용, 로그성용 다양하게 한 CDB내에서 복수의 PDB를 구성하여 서비스 다양성을 나타낼 수 있습니다. 분명 단점과 장점이 있겠지만 현재 21c까지 나온 상황에서 ORACLE에서 Multitenant Architecture 채택하고 있어 미래의 기술이 되지 않을까 싶습니다.


번외로 ORACLE 유저 생성 시 C##을 하거나 alter session set "_ORACLE_SCRIPT"=true; 적용하여 유저를 생성하는 경우 CDB에서 유저를 생성하는 것 입니다. CDB는 데이터베이스 서비스용이 아닌 관리 목적이기에 오라클사에서도 CDB에서 강제로 C##이 아닌 유저를 만들지 말라고 합니다..

 

ORACLE USER 생성 오류 (ORA-65096: invalid common user or role name)

ORACLE 테스트 중 유저 생성을 하게 되면 ORA-65096 에러를 만나게 되는 경우가 있습니다. SQL> create user test_user1 identified by test; create user test_user1 identified by test * ERROR at line 1: ORA-65096: invalid common user or

junsuyoun.tistory.com


 

Can you select a PDB’s character set?

Since Oracle Database 12.2.0.1 a Multitenant container database can host PDBs with different character sets. This was a huge restriction in Oracle Database 12.1., at least outside the US and Canada…

mikedietrichde.com

 

 

Administrator’s Guide

This document describes how to create, configure, and administer an Oracle database.

docs.oracle.com


 

728x90
반응형

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.