배경 : 현재 12c 설치되어 있고 PDB 2개 설치 되어 있는 상태 입니다.

  
 

# Tablespace 관리

  1. MANAGING TABLESPACES IN A CDB
  • Tablespace

    하나의
    컨테이너(Root or PDB)에만
    속한다. CDB

    컨테이너는
    자신의
    기본 Tablespace
    가진다.
  • 기본 Tablespace
    컨테이너
    간에
    공유


    없다.

     
     

    SQL> col file_name for a40

    SQL> SELECT TABLESPACE_NAME, CON_ID

    FROM CDB_TABLESPACES

    ORDER BY CON_ID;

    SELECT FILE_NAME, CON_ID FROM CDB_DATA_FILES;

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    SYSTEM 1

    USERS 1

    SYSAUX 1

    UNDOTBS1 1

    TEMP 1

    SYSTEM 2

    TEMP 2

    SYSAUX 2

    SYSTEM 3

    TEMP 3

    SYSAUX 3

     
     

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    SYSTEM 4

    TEMP 4

    SYSAUX 4

     
     

    14 rows selected.

     
     

    SQL> CREATE TABLESPACE CDB1_USERS datafile ‘/oradata/cdb1/cdb1_users01.dbf’ size 100m;

     
     

    Tablespace created.

     
     

    SQL> SELECT TABLESPACE_NAME, CON_ID

    FROM CDB_TABLESPACES

    WHERE TABLESPACE_NAME = ‘CDB1_USERS’

    ORDER BY CON_ID;

     
     

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    CDB1_USERS 1

     
     

    SQL> SELECT FILE_NAME, CON_ID FROM CDB_DATA_FILES

    WHERE TABLESPACE_NAME = ‘CDB1_USERS’;

     
     

    FILE_NAME CON_ID

    —————————————- ———-

    /oradata/cdb1/cdb1_users01.dbf 1

     
     

    SQL> CONNECT SYS/oracle@PDB11 AS SYSDBA;

    Connected.

    SQL> CREATE TABLESPACE PDB11_USERS datafile ‘/oradata/cdb1/PDB11/pdb11_users01.dbf’ size 100m;

     
     

    Tablespace created.

     
     

    SQL> SELECT TABLESPACE_NAME, CON_ID

    FROM CDB_TABLESPACES

    WHERE TABLESPACE_NAME = ‘PDB11_USERS’

    ORDER BY CON_ID;

     
     

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    PDB11_USERS 3

     
     

    SQL> SELECT FILE_NAME, CON_ID FROM CDB_DATA_FILES

    WHERE TABLESPACE_NAME = ‘PDB11_USERS’;

     
     

    FILE_NAME CON_ID

    —————————————- ———-

    /oradata/cdb1/PDB11/pdb11_users01.dbf 3

     
     

  1. MANAGING TEMPORARY TABLESPACES
  • CDB 전체에
    하나의 default temporary tablespace가 있다. Temp에 관해서는 root 컨테이너에서 작업이 필요하며

    특정
    유저에게
    할당할

    있다.

  • PDB
    위한 default temporary tablespace
    만들

    있다. 개별 PDB
    대해
    추가할

    있으며, PDB
    특정유저에게도
    추가



    있다. CDB에서 PDB Unplug
    Temp
    같이 Unplug 된다.

     
     

     
     

    SQL> CREATE TEMPORARY TABLESPACE CDB1_TEMP tempfile ‘/oradata/cdb1/cdb_temp01.dbf’ size 100m;

     
     

    Tablespace created.

     
     

    SQL> SELECT TABLESPACE_NAME, CON_ID

    FROM CDB_TABLESPACES

    WHERE TABLESPACE_NAME = ‘CDB1_TEMP’

    AND CONTENTS = ‘TEMPORARY’;

     
     

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    CDB1_TEMP 1

     
     

     

    SQL> col file_name for a45

    SQL> SELECT FILE_NAME, CON_ID FROM CDB_TEMP_FILES

    WHERE TABLESPACE_NAME = ‘CDB1_TEMP’;

     
     

    FILE_NAME CON_ID

    ——————————————— ———-

    /oradata/cdb1/cdb_temp01.dbf 1

     
     

    SQL> CONNECT SYS/oracle@PDB11 AS SYSDBA;

    Connected.

    SQL> CREATE TEMPORARY TABLESPACE PDB11_TEMP tempfile ‘/oradata/cdb1/PDB11/pdb11_temp01.dbf’ size 100m;

     
     

    Tablespace created.

     
     

    SQL> SELECT TABLESPACE_NAME, CON_ID

    FROM CDB_TABLESPACES

    WHERE TABLESPACE_NAME = ‘PDB11_TEMP’

    ORDER BY CON_ID;

     
     

    TABLESPACE_NAME CON_ID

    ———————————————————— ———-

    PDB11_TEMP 3

     
     

    SQL> SELECT FILE_NAME, CON_ID FROM CDB_TEMP_FILES

    WHERE TABLESPACE_NAME = ‘PDB11_TEMP’;

     
     

    FILE_NAME CON_ID

    ——————————————— ———-

    /oradata/cdb1/PDB11/pdb11_temp01.dbf 3

     
     

# Alter Database 구문
관련

  1. USING ALTER DATABASE STATEMENT IN A CDB
  • 현재
    접속한
    컨테이너가 Root라면 alter database 구문은 CDB, non-CDB에서
    똑같이
    동작한다. 대부분의 alter database 명령어는 CDB 전체에

    영향을
    준다. 접속한
    컨테이너가 PDB라면 alter database alter pluggable database 명령어는
    현재 PDB만을
    변경한다.

    SQL> CONNECT SYS/oracle@CDB1 AS SYSDBA;

    Connected.

    SQL> SELECT GROUP#, MEMBER FROM V$LOGFILE;

     
     

    GROUP#

    ———-

    MEMBER

    ——————————————————————————–

    1

    /oradata/cdb1/redo01.log

     
     

    2

    /oradata/cdb1/redo02.log

     
     

    3

    /oradata/cdb1/redo03.log

     
     

     
     

    SQL> ALTER DATABASE CDB1 ADD LOGFILE GROUP 4 ‘/oradata/cdb1/redo04.log’ size 50m;

     
     

    Database altered.

     
     

    SQL> SELECT GROUP#, MEMBER FROM V$LOGFILE;

     
     

    GROUP#

    ———-

    MEMBER

    ——————————————————————————–

    1

    /oradata/cdb1/redo01.log

     
     

    2

    /oradata/cdb1/redo02.log

     
     

    3

    /oradata/cdb1/redo03.log

     
     

     
     

    GROUP#

    ———-

    MEMBER

    ——————————————————————————–

    4

    /oradata/cdb1/redo04.log

     
     

     
     

     
     

  1. ALTER DATABASE TO MODIFY ONLY THE ROOT

    현재
    접속한 container Root 라면 ALTER DATABASE 명령어는 PDBs 의 변경 없이 root 를 변경할


    있다. 테이블스페이스가 명시적으로 지정되지 않은 현재 접속한 container Root 인 유저는

    root
    기본 테이블스페이스를 사용한다. ALTER DATABASE 문에 지정된 테이블스페이스는 root

    존재해야
    한다.

     
     

    SQL> CONNECT SYS/oracle@CDB1 AS SYSDBA;

    Connected.

    SQL> COLUMN PROPERTY_NAME FORMAT A30;

    SQL> COLUMN PROPERTY_VALUE FORMAT A30;

    SQL> SELECT CON_ID, PROPERTY_NAME, PROPERTY_VALUE

    FROM CDB_PROPERTIES

    WHERE PROPERTY_NAME LIKE ‘%TABLESPACE’ order by con_id;

     
     

    CON_ID PROPERTY_NAME PROPERTY_VALUE

    ———- —————————— ——————————

    1 DEFAULT_PERMANENT_TABLESPACE USERS

    1 DEFAULT_TEMP_TABLESPACE TEMP

    2 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    2 DEFAULT_TEMP_TABLESPACE TEMP

    3 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    3 DEFAULT_TEMP_TABLESPACE TEMP

    4 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    4 DEFAULT_TEMP_TABLESPACE TEMP

     
     

    8 rows selected.

     
     

    SQL> ALTER DATABASE DEFAULT TABLESPACE CDB1_USERS;

     
     

    Database altered.

     
     

    SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE CDB1_TEMP;

     
     

    Database altered.

     
     

    SQL> COLUMN PROPERTY_NAME FORMAT A30;

    SQL> COLUMN PROPERTY_VALUE FORMAT A30;

    SQL> SELECT CON_ID, PROPERTY_NAME, PROPERTY_VALUE

    FROM CDB_PROPERTIES

    WHERE PROPERTY_NAME LIKE ‘%TABLESPACE’ order by con_id;

     
     

    CON_ID PROPERTY_NAME PROPERTY_VALUE

    ———- —————————— ——————————

    1 DEFAULT_PERMANENT_TABLESPACE CDB1_USERS

    1 DEFAULT_TEMP_TABLESPACE CDB1_TEMP

    2 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    2 DEFAULT_TEMP_TABLESPACE TEMP

    3 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    3 DEFAULT_TEMP_TABLESPACE TEMP

    4 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    4 DEFAULT_TEMP_TABLESPACE TEMP

     
     

    8 rows selected.

     
     

     
     

  2. ALTER DATABASE TO MODIFY THE PDB.

    ALTER DATABASE 구문에
    지정된 tablespace 또는 tablespace group PDB 에 존재해야 한다.

    테이블스페이스가
    명시적으로 지정되지 않은 현재 접속한 container PDB 인 유저는 PDB 의 기본

    테이블스페이스를
    사용한다.

    ALTER DATABASE ALTER PLUGGABLE DATABASE 명령어는 PDB 에서 동일하게 동작한다

     
     

    SQL> CONNECT SYS/oracle@PDB11 AS SYSDBA;

    Connected.

    SQL> ALTER DATABASE DEFAULT TABLESPACE PDB11_USERS;

     
     

    Database altered.

     
     

    SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE PDB11_TEMP;

     
     

    Database altered.

     
     

    SQL> COLUMN PROPERTY_NAME FORMAT A30;

    SQL> COLUMN PROPERTY_VALUE FORMAT A30;

    SQL> SELECT CON_ID, PROPERTY_NAME, PROPERTY_VALUE

    FROM CDB_PROPERTIES

    WHERE PROPERTY_NAME LIKE ‘%TABLESPACE’ order by con_id;

     
     

    CON_ID PROPERTY_NAME PROPERTY_VALUE

    ———- —————————— ——————————

    3 DEFAULT_TEMP_TABLESPACE PDB11_TEMP

    3 DEFAULT_PERMANENT_TABLESPACE PDB11_USERS

     
     

    SQL> CONNECT SYS/oracle@CDB1 AS SYSDBA;

    Connected.

    SQL> COLUMN PROPERTY_NAME FORMAT A30;

    SQL> COLUMN PROPERTY_VALUE FORMAT A30;

    SQL> SELECT CON_ID, PROPERTY_NAME, PROPERTY_VALUE

    FROM CDB_PROPERTIES

    WHERE PROPERTY_NAME LIKE ‘%TABLESPACE’ order by con_id;

     
     

    CON_ID PROPERTY_NAME PROPERTY_VALUE

    ———- —————————— ——————————

    1 DEFAULT_PERMANENT_TABLESPACE CDB1_USERS

    1 DEFAULT_TEMP_TABLESPACE CDB1_TEMP

    2 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    2 DEFAULT_TEMP_TABLESPACE TEMP

    3 DEFAULT_PERMANENT_TABLESPACE PDB11_USERS

    3 DEFAULT_TEMP_TABLESPACE PDB11_TEMP

    4 DEFAULT_PERMANENT_TABLESPACE SYSTEM

    4 DEFAULT_TEMP_TABLESPACE TEMP

     
     

    8 rows selected.

     
     

  3. USING ALTER SYSTEM STATEMENT IN A CDB
  • CDB inheritance model(상속 방식)을 사용한다.

    root
    초기화 파라미터 값을 상속하여 PDBs 의 초기화 파라미터를 설정한다.

  • 이러한
    파라미터들에 대한 inheritance property true 또는 false 이다.

    파라미터의
    상속 속성이 false 일 때는 PDB root 의 파라미터 값을 상속하지 않는다.

  • V$SYSTEM_PARAMETER ISPDB_MODIFIABLE 값이 TRUE 이면 ALTER SYSTEM SET 문장을

    사용하여
    상속 속성을 false 로 변경 할 수 있다.

     
     

현재 container root 이면 ALTER SYSTEM SET 문장에 CONTAINER 절을 사용하여 PDB 에 상속

파라미터
값을 설정한다.

CONTAINER
문법 : CONTAINER = {CURRENT | ALL}

  • CURRENT(default) : 현재
    컨테이너에만 파라미터 설정 값 적용.
  • ALL : CDB
    속한 모든 컨테이너(root and all of the PDBs)에 파라미터 설정 값 적용.

 
 

SQL> CONNECT SYS/oracle@CDB1 AS SYSDBA;

Connected.

SQL> SHOW CON_NAME;

 
 

CON_NAME

——————————

CDB$ROOT

SQL> SELECT NAME, VALUE, ISPDB_MODIFIABLE

FROM V$PARAMETER

WHERE NAME = ‘open_cursors’;

 
 

NAME

——————————————————————————–

VALUE

——————————————————————————–

ISPDB_MODI

———-

open_cursors

300

TRUE

 
 

SQL> ALTER SYSTEM SET OPEN_CURSORS = 200 CONTAINER = ALL;

 
 

SQL> ALTER SYSTEM SET OPEN_CURSORS = 400 CONTAINER = CURRENT;

 
 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다