배경 : 현재 12c 설치되어 있고 PDB 2개 설치 되어 있는 상태 입니다.
# Tablespace 관리
- 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
- 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 구문
관련
- 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
-
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.
-
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.
- 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;