A) 파라미터 파일 생성
인스턴스 생성을 위해 pfile을 vi 편집기로 생성합니다. 파일이 있어야 할 디렉토리는 $ORACLE_HOME/dbs입니다.
cd $ORACLE_HOME/dbs vi initorcl.ora
db_name='orcl' enable_pluggable_database=true audit_trail='db' control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' db_block_size=8192 db_domain='' memory_target=800M open_cursors=300 processes=300 remote_login_passwordfile='EXCLUSIVE' undo_tablespace='UNDOTBS1'
B) 디렉토리 생성
데이터 파일을 저장할 디렉토리와 Fast Recovery Area 디렉토리를 생성합니다. container database, seed pluggable database, pluggable database의 데이터 파일을 저장할 위치를 각각 생성합니다.
mkdir -p /u01/app/oracle/oradata/orcl mkdir -p /u01/app/oracle/oradata/orcl/pdbseed mkdir -p /u01/app/oracle/oradata/orcl/salespdb mkdir -p /u01/app/oracle/oradata/orcl/hrpdb mkdir -p /u01/app/oracle/fast_recovery_area/orcl
C) 데이터베이스 생성
sysdba 권한으로 접속하여 nomount에서 데이터베이스 생성 스크립트를 실행합니다.
sqlplus / as sysdba
startup nomount
create spfile from pfile;
CREATE DATABASE orcl
CONTROLFILE REUSE
USER sys IDENTIFIED BY oracle
USER system IDENTIFIED BY oracle
LOGFILE GROUP 1
('/u01/app/oracle/oradata/orcl/redo01.log') SIZE 50M,
GROUP 2
('/u01/app/oracle/oradata/orcl/redo02.log') SIZE 50M,
GROUP 3
('/u01/app/oracle/oradata/orcl/redo03.log') SIZE 50M
MAXLOGFILES 16
MAXLOGMEMBERS 4
MAXDATAFILES 1024
MAXINSTANCES 1
MAXLOGHISTORY 680
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/u01/app/oracle/oradata/orcl/sysaux01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
SIZE 100M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
DEFAULT TABLESPACE USERS
DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
SIZE 100M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
USER_DATA TABLESPACE userstbs
DATAFILE '/u01/app/oracle/oradata/orcl/pdbseed/userstbsp01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE 1000M
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl',
'/u01/app/oracle/oradata/orcl/pdbseed');
D) 시스템 뷰, 딕셔너리 테이블 생성
시스템 뷰와 딕셔너리 테이블 생성을 위한 스크립트를 실행합니다. 12c에서는 perl 스크립트를 이용해서 생성하는 것을 권장하고 있습니다.
cd $ORACLE_HOME/rdbms/admin perl catcon.pl -u sys/oracle -s -e -d $ORACLE_HOME/rdbms/admin -b catalog1 catalog.sql > catcon-catalog.log perl catcon.pl -u sys/oracle -s -e -d $ORACLE_HOME/rdbms/admin -b catproc1 catproc.sql > catcon-catproc.log perl catcon.pl -u system/oracle -s -e -d $ORACLE_HOME/sqlplus/admin -b pupbld1 pupbld.sql > catcon-pupbld.log
E) PDB 생성
sysdba 권한으로 pluggable database(이하 PDB)를 create pluggable database 문을 이용해서 생성합니다.
CREATE PLUGGABLE DATABASE salespdb
ADMIN USER salesadm IDENTIFIED BY oracle
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl/pdbseed',
'/u01/app/oracle/oradata/orcl/salespdb');
CREATE PLUGGABLE DATABASE hrpdb
ADMIN USER hradm IDENTIFIED BY oracle
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl/pdbseed',
'/u01/app/oracle/oradata/orcl/hrpdb');
F) 리스너 생성
$ORACLE_HOME/network/admin 디렉토리에 listener.ora 파일을 생성합니다.
cd $ORACLE_HOME/network/admin vi listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.localdomain)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = salespdb)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
)
(SID_DESC =
(SID_NAME = hrpdb)
(ORACLE_HOME = /u01/app/oracle/product/12.1.0/db_1)
)
)
원격 접속을 위한 tnsnames.ora 파일은 아래와 같습니다.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SALESPDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = salespdb)
)
)
HRPDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = hrpdb)
)
)
G) PDB 복제
create pluggable database ... from 문을 이용해서 PDB를 복제할 수 있습니다.
CREATE PLUGGABLE DATABASE salespdb2
FROM salespdb
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl/salespdb',
'/u01/app/oracle/oradata/orcl/salespb2')
STORAGE (MAXSIZE 6G MAX_SHARED_TEMP_SIZE 100M);
H) 데이터베이스 정지
PDB를 close한 후에 전체 인스턴스를 shutdown 합니다.
alter pluggable database all close immediate; select con_id, name, open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 SALESPDB MOUNTED
4 HRPDB MOUNTED
shutdown immediate;
I) 데이터베이스 기동
Container Database를 startup 명령을 이용해 open한 후에 PDB를 open합니다.
startup;
alter pluggable database all open;
Pluggable database altered.
select con_id, name, open_mode from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE