ORACLE Multitenant Architecture CDB, PDB
- -
기존 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
'RDBMS > ORACLE & TIBERO' 카테고리의 다른 글
ORACLE 문자셋(characterset) 확인하기 (0) | 2022.12.03 |
---|---|
TIBERO 오브젝트 종류 확인하기 (dba_objects) (0) | 2022.11.09 |
sqlplus history 사용 (rlwrap) (0) | 2022.11.07 |
ORACLE 히든 파라미터 조회 (0) | 2022.11.04 |
ORACLE USER 생성 오류 (ORA-65096: invalid common user or role name) (0) | 2022.11.04 |
소중한 공감 감사합니다