CDB에서 모든 PDB 정보 조회

Containers in a CDB

 

[1] STUDY 요약

  1. 컨테이너
     : CDB 컨테이너, PDB도 컨테이너이며 CDB가 논리적으로 상위 개념입니다.
       컨테이너는 여러 개의 데이터베이스를 하나의 인스턴스에서 관리할 수 있도록 해주는 독립적인 단위입니다.

     이러한 컨테이너는 두 가지 주요 유형으로 나눌 수 있습니다:

       1) CDB : Container Database
         : CDB는 여러 개의 플러그형 데이터베이스(PDB)를 포함할 수 있는 상위 컨테이너입니다.
           CDB 자체는 관리 및 설정 작업을 위한 메타데이터와 공통 시스템 데이터베이스를 포함합니다.

        2) PDB : Pluggable Database
         : PDB는 CDB 안에 존재하며, 각각 독립적인 데이터베이스처럼 작동합니다.
           각 PDB는 자신의 데이터와 메타데이터를 가지고 있으며, 필요한 경우 다른 CDB로 이동하거나 클론할 수 있습니다.
           PDB는 응용 프로그램 및 사용자 데이터가 저장되는 곳으로, 이를 통해 여러 개의 애플리케이션 데이터베이스를 하나의 CDB 안에서
           효율적으로 관리할 수 있습니다.

  2. DB 유형

    :  CDB, PDB 당연히 DB 단어가 들어가니 모두 DB일 뿐입니다. 
       단지, CDB는 PDB의 METADATA 정보 보유하고, PDB 관리하는 차원에서 사용되는 것이지 업무 DB로 쓰면 안됩니다.  
       DATBASE를 시작하면 CDB가 올라가는 것이고, 이후에 사용자 설정에 따라 자동 OR 수동으로 PDB가 올라갑니다. 

  3. Resource  

    :  CDB와 PDB 모두 동일 서버 Resorce를 사용합니다.  
       쉽게 말해 Database 설치시 설정한 SGA와 PGA 셋팅으로 모두 DB가 같이 쓰는 것입니다. 
       PDB마다 별개의 물리적 자원 셋팅은 불가합니다.  
       ( 즉, CPU 100% 치는 pdb가 있으면, 다른 pdb들도 영향을 받을수 있는 형태라는 겁니다. )

  4. Archive 

   :  CDB에 종속적인 PDB이다 보니 아카이브 모드 처리를 하면, 모두 PDB들은 아카이브 모드 처리가됩니다.
      여러 PDB 중에 1개 노아카이브 하겠다? 이런 예외는 없습니다. 

 

[2] 이미지

  위는 오라클 매뉴얼에서 볼 수 있는 "멀티테넌트 CDB 내 컨테이너" 이미지입니다.   
  PLUG 원기둥 도형은 PDB( 보통 업무 DB )이며,  Root(CDB$ROOT)에 PLUG 를 꽂는 형태로 되어있습니다.
  꽂으니 뺄수도 있습니다. Plug and Unplug 표현이 되네요. 그래서 PDB(Pluggable Database) 라고 합니다.  
  Plug해서  간편하게 DB 서비스를 시작할수있고, 반대로 Unplug 하면 DB 쉽게 중단 할 수 있습니다. 

  Seed(PDB$SEED)는 새로운 PDB 데이터베이스를 만들 때 사용되는 기본 템플릿 역할을 합니다. 
  새로운 데이터베이스는 이 Seed를 복사하여 생성되므로 Seed는 일종의 원본 데이터베이스 소스입니다. 
  즉, Seed(PDB$SEED)는 새로운 PDB를 시작할 때 참고하는 표준이라고 생각하면 됩니다.

 

[3] 매뉴얼 내용

아래 링크 매뉴얼에 CDB와 PDB의 관계를 일부 발췌하면 다음과 같습니다. 
   1. 모든 PDB는 ROOT(CDB$ROOT)에 속함 
   2. ROOT는 시스템 PDB를 관리하는 메타데이터 정보를 가지고 있음
        ROOT는 모든 PDB가 속한 스키마, 스키마 개체 및 비스키마 개체의 집합임
   3. 시스템 컨테이너는 CDB루트와 이에 속하는 모든 PDB임 ( 시스템 컨테이너 = CDB + 모든 PDB )
   4.  CDB 루트는 사용자 데이터 저장하면 안됨 ( 모든 PDB 메타 관리 DB ) 
   5. 루트에 공통 개체를 추가하거나, 루트의 스키마를 수정하지 않는 것이 좋다고 함
   6. 데이터베이스 관리를 위해 공통 사용자와 역할 만들수 있음 ( 참고 : C##계정  https://cafe.naver.com/oraclebank/1077 )
   7. 루트 캐릭터셋은 AL32UTF8 권장하며, 캐릭터셋이 다른 PDB는 캐릭터셋 변경없이 CDB로 상주 할수 있다고 함 
      ( 테스트는 안했지만 캐릭터셋이 다르더라도 PDB에서 alter session set container=CDB$ROOT 변경이 된다는 의미로 보임 )

 

[4] CDB 메타데이터 조회

  : CDB는 PDB를 관리하는 메타데이터 정보가 있다고 해서 관련 뷰 정보를 찾아 보았습니다. 

 

1. 메타데이터 정보 조회 뷰 ( prefix = cdb_ )

1,176개 (21C기준)
SELECT COUNT(*) 
  FROM DBA_OBJECTS 
 WHERE OBJECT_NAME LIKE 'CDB_%'
   AND OWNER = 'PUBLIC';

 

2. 대표적인 2개 조회 TEST 

   : CDB에 접속해야 조회가능함. PDB에 접근하여 조회하면 접속한 PDB 정보만 조회됨.

 

 2.1) PDB별 테이블스페이스 목록 조회

SELECT A.CON_ID, B.PDB_NAME, A.TABLESPACE_NAME, A.CONTENTS 
  FROM CDB_TABLESPACES A
     , CDB_PDBS B 
 WHERE A.CON_ID = B.CON_ID 
 ORDER BY A.CON_ID, A.TABLESPACE_NAME;

 2.2) PDB별 테이블 개수 조회

SELECT A.CON_ID , B.PDB_NAME , COUNT(*) 
  FROM CDB_TABLES A , CDB_PDBS B 
 WHERE A.CON_ID = B.CON_ID 
 GROUP BY A.CON_ID, B.PDB_NAME ORDER BY 1;

링크 : https://docs.oracle.com/en/database/oracle/oracle-database/21/cncpt/CDBs-and-PDBs.html

'ORACLE > MULTITENENT' 카테고리의 다른 글

Oracle CDB 계정 생성  (0) 2024.06.10