수동 DB 생성: 파라미터 파일, CREATE DATABASE, 데이터 딕셔너리
DBCA 없이 파라미터 파일 작성, 인스턴스 NOMOUNT 기동, CREATE DATABASE, catalog.sql과 catproc.sql로 non-CDB를 만드는 5단계
#핵심 요약
수동 생성은 파라미터 파일 작성, 디렉터리 생성, NOMOUNT 기동, CREATE DATABASE, 데이터 딕셔너리 생성의 5단계임
CREATE DATABASE만으로는 딕셔너리 뷰가 없음catalog.sql, catproc.sql, pupbld.sql을 실행해야 함
오류가 나면 만들어진 파일을 모두 지우고 다시 생성함
#개념과 동작 원리
실습의 순서
- 파라미터 파일을 만듦
- 데이터 파일 디렉터리와 감사 파일(adump) 디렉터리를 만듦
- 그 파라미터 파일로 인스턴스를 올림(
startup nomount) CREATE DATABASE스크립트로 DB를 만듦- 데이터 딕셔너리를 만듦
#주요 용어와 구성 요소
| 파라미터 | 값 | 의미 |
|---|---|---|
db_name, db_unique_name |
<DB_NAME> |
데이터베이스 식별 |
compatible |
19.0.0 |
19c 기본값 또는 최소 19.0.0 |
sga_target, pga_aggregate_target |
1G, 300M |
주석: 19c는 256M로 부족할 확률이 높고 최소 1GB 이상 권장, 테스트용이면 800M 정도 |
control_files |
컨트롤 파일 3개 | 경로를 작은따옴표로 감쌈 |
db_block_size, undo_management, undo_tablespace |
8192, AUTO, UNDOTBS1 |
주석: undo 테이블스페이스 이름은 관례상 1을 붙이는 경우가 많아 확인 필요 |
processes |
300 |
19c 백그라운드 프로세스가 늘어 여유 있게 설정 |
diagnostic_dest, audit_file_dest |
/u01/app/oracle, .../admin/<DB_NAME>/adump |
진단과 감사 경로(필수) |
remote_login_passwordfile |
EXCLUSIVE |
#필수 명령어 또는 SQL
#1. 파라미터 파일
cd $ORACLE_HOME/dbs
vi init<DB_NAME>.ora
db_name=<DB_NAME>
db_unique_name=<DB_NAME>
compatible=19.0.0
sga_target=1G
pga_aggregate_target=300M
control_files=('/u01/app/oracle/oradata/<DB_NAME>/control01.ctl',
'/u01/app/oracle/oradata/<DB_NAME>/control02.ctl',
'/u01/app/oracle/oradata/<DB_NAME>/control03.ctl')
db_block_size=8192
undo_management=AUTO
undo_tablespace=UNDOTBS1
processes=300
diagnostic_dest='/u01/app/oracle'
audit_file_dest='/u01/app/oracle/admin/<DB_NAME>/adump'
remote_login_passwordfile=EXCLUSIVE결과 해석: 개별 실행 출력은 기재 없음
#2. 디렉터리와 oratab 등록
mkdir -p /u01/app/oracle/oradata/<DB_NAME>
mkdir -p /u01/app/oracle/admin/<DB_NAME>/adump결과 해석:
root로 /etc/oratab에 <DB_NAME>:/u01/app/oracle/product/19.3.0/dbhome_1:N 줄을 추가함(실습은 vi로 편집)
#3. 인스턴스 기동
. oraenv
# ORACLE_SID = [...] ? <DB_NAME>
echo $ORACLE_SID
sqlplus / as sysdbastartup nomount pfile=$ORACLE_HOME/dbs/init<DB_NAME>.ora
select instance_name, status from v$instance;결과 해석:
해석: 상태가 STARTED면 NOMOUNT임
#4. CREATE DATABASE
create database <DB_NAME>
user sys identified by <PASSWORD>
user system identified by <PASSWORD>
datafile '/u01/app/oracle/oradata/<DB_NAME>/system01.dbf'
size 100M autoextend on maxsize unlimited extent management local
sysaux
datafile '/u01/app/oracle/oradata/<DB_NAME>/sysaux01.dbf'
size 50M autoextend on maxsize unlimited
default temporary tablespace temp
tempfile '/u01/app/oracle/oradata/<DB_NAME>/temp01.dbf'
size 50M autoextend on maxsize unlimited
undo tablespace undotbs1
datafile '/u01/app/oracle/oradata/<DB_NAME>/undotbs01.dbf'
size 50M autoextend on maxsize unlimited
logfile
group 1 ('/u01/app/oracle/oradata/<DB_NAME>/redo01a.log',
'/u01/app/oracle/oradata/<DB_NAME>/redo01b.log') size 50M,
group 2 ('/u01/app/oracle/oradata/<DB_NAME>/redo02a.log',
'/u01/app/oracle/oradata/<DB_NAME>/redo02b.log') size 50M,
group 3 ('/u01/app/oracle/oradata/<DB_NAME>/redo03a.log',
'/u01/app/oracle/oradata/<DB_NAME>/redo03b.log') size 50M,
group 4 ('/u01/app/oracle/oradata/<DB_NAME>/redo04a.log',
'/u01/app/oracle/oradata/<DB_NAME>/redo04b.log') size 50M,
group 5 ('/u01/app/oracle/oradata/<DB_NAME>/redo05a.log',
'/u01/app/oracle/oradata/<DB_NAME>/redo05b.log') size 50M;결과 해석:
생성 전에 데이터 파일이 만들어질 디렉터리가 있고 비어 있는지 확인함
#오류가 났을 때
cd /u01/app/oracle/oradata/<DB_NAME>
ls
rm -rf *결과 해석:
#5. 데이터 딕셔너리 생성
select status from v$instance;
@$ORACLE_HOME/rdbms/admin/catalog.sql
@$ORACLE_HOME/rdbms/admin/catproc.sql
connect system/<PASSWORD>
@$ORACLE_HOME/sqlplus/admin/pupbld.sql결과 해석: 개별 실행 출력은 기재 없음
#접속 확인
실습에서는 이어서 listener.ora와 tnsnames.ora에 새 DB의 서비스 이름을 등록하고 sqlplus <USERNAME>/<PASSWORD>@<DB_NAME>으로 접속했음
설정 파일 내용은 접속과 리스너 글에서 다룸
alter session set nls_date_format='RRRR/MM/DD HH24:MI:SS';
select name, created from v$database;결과 해석: 개별 실행 출력은 기재 없음
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
startup nomount pfile= |
지정한 파라미터 파일로 인스턴스만 기동 | pfile 경로 |
extent management local |
SYSTEM 테이블스페이스를 로컬 관리로 | |
autoextend on maxsize unlimited |
데이터 파일 자동 확장, 상한 없음 | 운영에서는 상한을 정하는지 확인 필요 |
logfile group n (...) |
리두 그룹과 멤버 지정 멤버 2개씩 다중화 |
경로, 크기 |
catalog.sql |
데이터 딕셔너리 뷰 생성 | |
catproc.sql |
표준 PL/SQL 패키지 등 프로시저 환경 생성 | |
pupbld.sql |
SYSTEM으로 실행 설명 기재 없음 |
확인 불가 |
#사용 조건과 주의사항
실습의 DB 이름이 문서 안에서 섞여 있음
디렉터리 예시는 한 이름, oratab과 인스턴스 기동 예시는 그 이름, 파라미터 파일과 create database는 다른 이름임
DB 이름이 일관되지 않아 <DB_NAME>으로 표기함
실습의 파일명 예시 init호스트명.ora는 뒤에 나오는 init<DB_NAME>.ora 형태의 파일명과 다름
의도한 파일명 규칙은 확인 불가
데이터 딕셔너리 단계는 시간이 오래 걸릴 수 있음
CDB의 같은 단계는 수동 CDB 생성에서 catcdb.sql로 함