Programming/SQL

PDB와 CDB, 멀티 태넌트 개념. 테이블 스페이스 생성. 2021-07-06

최동훈1 2021. 7. 6. 16:41

우선 우리는 이전 포스트에서 서버를 생성한 것은, SID 가 XE 즉, 기본 컨테이너 서버(CDB)를 만든 것이다.

형광색 팬 클릭하면 새로운 DB서버를 만들수 있다.
형광팬 질한 곳: XE 즉 CDB 서버를 만든 것.

오라클은 버전이 업데이트 되면서, 기존에는 한가지 서버로만 사용했던 것들이, 이제는 서버안에 또 다른 가상의 서버를 만듬으로서 조금 더 쉽게 갈아끼우거나, 변경, 삭제 할수 있도록 만들었다. 또한 하나의 템플릿(서버의 틀)을 카피하며, 다양한 종류의 서버를 만들수 있도록 하였다. 그것이 바로 Pluggable database이다. 

 

요약하자면, 큰 컨테이너 서버의 자원을 공유하면서 완전히 독립된 조그마한 서버를 여러개 만드는 것이다. 왜 이런 짓을 하는지 내가 구글 검색해본 결과 큰 서버 한개의 자원을 100%쓰는 경우는 드물기에 나머지 놀고먹는 자원들을 활용하기 위해, 다른 별개의 용도를 가진 서버들을 큰 서버에다가 셋방살이 시키는 것이다. 애초에 이 개념을 지칭하는 말인 Mutli-Tenent 를 직역하면 다중 세입자라는 뜻이다. 찾아보니 클라우드도 이런 구조로 되어 있다고 한다.

우리가 방금 SID에 XE라고 만든 것은 그림에 보이는 CDB( 컨테이너 데이터 베이스) 를 만든 것이다.

 

오라클 공식 문서에 나온 그림.

즉 CDB라는 아주 큰 기본 베이스가 되는 ROOT 서버에 Seed 라는 PDB 를 카피를 통해 만들수 있는 템플릿인 XEPDB1이 존재한다. 이 XEPDB1이라는 템플릿을 이용하여 PDB들을 만드는 것이다. 오라클DB를 처음 설치하게 되면, CBD, SEED, XEPDB1이 존재하는데 이 XEPDB1은 SEED를 통해 새로운 pdb들을 생성하기 위해 복사해온 것이라 보면 된다.

xepdb1 으로 pdb 서버를 만듬.

즉 글 맨 위 처음 서버를 만들 때는 CDB 서버(SID에 XE 넣은 것)을 만든 것이고, 이것은 CDB 속 가상 데이터베이스인 PDB를 xepdb1을 이용해 만든것이다.

 

**여기서 주의할 점은 CDB 와 PDB 서버는 서로 "별개의 서버" 라는 것이다. 각자의 서버에서 만든 사용자 계정과 저장소들은 분리되어있으며 서로 공유될수 없다. 일례로 맨위에 만든 CDB서버의 sys 사용자와 현재 만들고 있는 xepdb1 서버의 사용자 sys는 "별개의 사용자이다" 이름만 같을 뿐이다.  또 PDB서버에서 만든 새로운 사용자(NEWLEC) 와 테이블스페이스는 CDB서버와 분리되어있는 별개의 공간이다. 서로 연관이 아예없다.

예를들면 PDB 서버에서 "choi" 라는 사용자를 만든 후, CDB서버에 "choi" 라는 사용자로 접속할려하면 접속이 안된다.

 

이렇게 PDB서버를 하나 만들었다. 그 다음 해당 스키마(계정)에서 이용할 테이블 스페이스를 생성해야 한다. 테이블 스페이스의 종류에는 영구적으로 각 접속세션에서 공유되는 저장공간과, 세션마다 commit이나 rollback을 하기 전에 임시로 저장되는 공간으로 나뉘어져 있다.(이전 포스트의 commit, rollback 참고)  

 

**테이블 스페이스 생성방법 보기->DBA 클릭 후, 아래 사진 참고.

여기서 DBA 클릭.

 

DBA를 클릭 후 DBA 창이 왼쪽 하단에 나오면, 형광팬 으로 + 버튼 누르면, 어느 서버에 접속할것인지 선택 가능하다. 이렇게 하면 아래와 같은 카테고리가 나오는데 여기서 테이블 스페이스를 추가해주면 된다.

 

DBA에 +클릭후 수정할 서버 선택(난 현재 바로 전에 만든 PDB서버를 선택함.)

 

새로운 테이블 스페이스 만들기위해 클릭해야 되는 곳.

 

 

영구 테이블 스페이스 설정.
임시 테이블 스페이스 설정.

이 과정이 완료되면 DBA에 내가 만든 영구/임시 테이블 스페이스가 생성된다.

 

 내가 생성해 준 임시 저장 테이블 스페이스인 NEWLEC_LOGSPACE와 NEWLEC_TABLESPACE1 이 보인다.

 

또 새로운 사용자를 설정하는 과정에서(기존에는 sys라는 관리자 계정으로 서버에 접속했음) 그 사용자가 쓸 테이블 스페이스를 영구/임시 모두 설정해 주어야 하는데 여기서 방금 내가 생성했던, 테이블 스페이스를 지정해주면, 앞으로 이 NEWLEC이라는 사용자가 생성해서 접속하는 서버의 모든 테이블 저장소는 지정한 곳에 쓰인다. 

 

 

 

공부시간 2시간.

순공시간 1시간.

 

오늘 따라 잠이 부족한지 너무 피곤했다..ㅠㅠ 밍

 

*추가

SQL Developer 을 쓰는 이유를 알게 되었다. 그냥 클릭을 통해 쿼리를 생성해서 오라클 DBMS로 날려준다. 예를들면 오늘 pdb 서버를 만드는 것도 CREATE PLUGGABLE ~ 이렇게 직접 쿼리를 써서 날려야 되는데, SQL Developer를 사용한다면, 데이터 베이스 만들기 창에서 클릭 몇번을 통해 서버를 만들수 있다.(맨 위에 사진). 또한 GRANT/REVOKE 등 SQL에서 DCL 의 역할인 사용자의 권한을 부여하는것도, 굳이 GRANT/REVOKE 쿼리를 쓰지않고 체크박스 클릭을 통해 쉽게 충족시킬수 있다.