배경 : 현재 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;
 
 
