데이터베이스 연구실.log

수동 DB 생성: 파라미터 파일, CREATE DATABASE, 데이터 딕셔너리

DBCA 없이 파라미터 파일 작성, 인스턴스 NOMOUNT 기동, CREATE DATABASE, catalog.sql과 catproc.sql로 non-CDB를 만드는 5단계

CREATE DATABASEpfilecatalog.sqlcatproc.sqloratab

#핵심 요약

수동 생성은 파라미터 파일 작성, 디렉터리 생성, NOMOUNT 기동, CREATE DATABASE, 데이터 딕셔너리 생성의 5단계임

CREATE DATABASE만으로는 딕셔너리 뷰가 없음
catalog.sql, catproc.sql, pupbld.sql을 실행해야 함

오류가 나면 만들어진 파일을 모두 지우고 다시 생성함

#개념과 동작 원리

실습의 순서

  1. 파라미터 파일을 만듦
  2. 데이터 파일 디렉터리와 감사 파일(adump) 디렉터리를 만듦
  3. 그 파라미터 파일로 인스턴스를 올림(startup nomount)
  4. CREATE DATABASE 스크립트로 DB를 만듦
  5. 데이터 딕셔너리를 만듦

#주요 용어와 구성 요소

파라미터 값 의미
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. 파라미터 파일

셸 (oracle)객체 또는 설정을 변경함
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 등록

셸 (oracle)객체 또는 설정을 변경함
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. 인스턴스 기동

셸 (oracle)객체 또는 설정을 변경함
. oraenv
# ORACLE_SID = [...] ? <DB_NAME>
echo $ORACLE_SID
sqlplus / as sysdba
SQL*Plus (SYSDBA)객체 또는 설정을 변경함
startup nomount pfile=$ORACLE_HOME/dbs/init<DB_NAME>.ora
select instance_name, status from v$instance;

결과 해석:

해석: 상태가 STARTED면 NOMOUNT임

#4. CREATE DATABASE

SQL*Plus (SYSDBA, NOMOUNT 상태)객체 또는 설정을 변경함
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;

결과 해석:

생성 전에 데이터 파일이 만들어질 디렉터리가 있고 비어 있는지 확인함

#오류가 났을 때

셸 (oracle)데이터 또는 파일을 삭제함, 되돌릴 수 없음
cd /u01/app/oracle/oradata/<DB_NAME>
ls
rm -rf *

결과 해석:

#5. 데이터 딕셔너리 생성

SQL*Plus (SYSDBA)객체 또는 설정을 변경함
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>으로 접속했음
설정 파일 내용은 접속과 리스너 글에서 다룸

SQL*Plus현재 세션 설정만 변경함
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로 함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기