데이터베이스 연구실.log

DBCA 템플릿과 생성 스크립트

템플릿 파일(.dbc, .dbt, .dfb)의 차이, 기존 DB로 템플릿을 만드는 명령, -generateScripts로 생성 스크립트만 뽑아 검토하고 직접 실행할 때 필요한 oratab 등록

DBCAdbcdbtdfbcreateCloneTemplategenerateScriptsoratab

#핵심 요약

템플릿 파일 .dbc는 복사할 시드 파일(.dfb)을 가리키고, .dbt는 시드 없이 어떻게 만들지를 적어 둔 구조 정의임
배치 유형별 차이는 DBCA와 데이터베이스 생성에 있음

기존 데이터베이스에서 템플릿을 만들 때 구조만이면 -createTemplateFromDB, 데이터 파일까지면 -createCloneTemplate을 씀

-generateScripts는 데이터베이스를 만들지 않고 실행될 스크립트(CREATE DATABASE 포함)만 파일로 남김
실행 전에 검토해야 하는 운영 환경에서 쓰는 방식이라고 수업 자료가 설명함

그 스크립트만으로도 DBCA 없이 데이터베이스를 만들 수 있지만, /etc/oratab 등록 같은 서버 등록 작업은 해 주지 않음

#개념과 동작 원리

#템플릿 파일 종류

파일 형식 저장 내용 실습 파일과 크기
.dbc 데이터 파일을 포함하는 템플릿
datafileJarLocation으로 .dfb를 가리킴
General_Purpose.dbc, Data_Warehouse.dbc
.dbt 구조만 담는 템플릿
가리킬 시드 파일이 없고 CREATE DATABASE를 직접 수행
블록 크기, 문자 집합이 "지금 정할 값"으로 적혀 있음
New_Database.dbt
.dfb 시드 데이터베이스 데이터 파일의 압축본 Seed_Database.dfb(262MB, 풀면 1.5GB 이상), pdbseed.dfb(83MB, 시드 PDB용)
CDB 생성 시 두 파일이 함께 복사됨

.dbt가 구조만 담는데도 .dbc보다 파일이 큰 이유는 만드는 방법을 전부 적어 두어야 하기 때문이라는 것이 실습의 설명임
두 .dbc의 크기 차이(4888과 4768바이트)의 원인은 수업 자료에서 세 군데로 언급되지만 구체적인 내용은 확인 불가

#생성 스크립트 구성

-generateScripts -scriptDest <디렉터리>를 주면 SQL 조각들과 init.ora, 전체를 순서대로 실행하는 셸 스크립트가 만들어짐
실습 예시의 파일 구성은 CreateDB.sql, CreateDBCatalog.sql, CreateDBFiles.sql, CreateClustDBViews.sql, init.ora, postDBCreation.sql, postScripts.sql, <SID>.sh, <SID>.sql임
셸 스크립트는 디렉터리를 만들고, 환경변수를 잡고, SQL을 순서대로 실행함
실습에서는 "DBCA가 내부에서 하는 일이 이게 전부"라고 설명함
이 파일 목록은 실습 예상 출력에서 가져온 것으로, 실제 서버에서 확인된 값인지는 수업 자료에 표시되지 않았음

#주요 용어와 구성 요소

용어 설명
-createTemplateFromDB 기존 DB에서 구조만 담는 템플릿 생성
-createCloneTemplate 기존 DB에서 데이터 파일(RMAN 백업 압축본)까지 담는 복제 템플릿 생성
-dataFileBackup false면 데이터 파일 없는 복제 템플릿이 되어 구조만 담는 쪽과 결과가 같아짐
기본값 true
-datafileJarLocation 템플릿 생성 시 데이터 파일 압축본을 저장할 디렉터리
-sourceSID, -sourceDB 둘 다 "단일 인스턴스면 SID, RAC이면 DB_UNIQUE_NAME"이라는 같은 설명이 붙음
-generateScripts, -scriptDest DB를 만들지 않고 생성 스크립트만 지정 위치에 생성
/etc/oratab SID:ORACLE_HOME:Y 또는 N 형식의 등록 파일
맨 뒤 플래그는 dbstart, dbshut 대상 여부

#필수 명령어 또는 SQL

#템플릿 파일 확인

셸 (oracle)조회만 함
ls -l $ORACLE_HOME/assistants/dbca/templates/*.dbc $ORACLE_HOME/assistants/dbca/templates/*.dbt
ls -lh $ORACLE_HOME/assistants/dbca/templates/*.dfb
grep -i "dfb\|datafile" $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc | head
grep -i "dfb" $ORACLE_HOME/assistants/dbca/templates/New_Database.dbt
grep -i "blockSize\|characterSet" $ORACLE_HOME/assistants/dbca/templates/New_Database.dbt

결과 해석:

해석: .dbc에서 datafileJarLocation이 Seed_Database.dfb를 가리키면 복사해 올 소스가 적힌 것임
.dbt에서 dfb 검색 결과가 없으면 시드 복사가 아니라 CREATE DATABASE를 직접 수행하는 방식임
같은 파일에서 blockSize와 characterSet이 값으로 적혀 있으면 "복사해 올 값이 아니라 지금 정할 값"임

#템플릿 생성 명령의 사용법 확인

셸 (oracle)조회만 함
dbca -help -createTemplateFromDB
dbca -help -createCloneTemplate

결과 해석: 개별 실행 출력은 기재 없음

#클론 템플릿 만들기

실습에서는 이 명령을 "소스 데이터베이스를 RMAN으로 백업하는 실작업"이라고 하고 시작 전에 가상 머신 스냅샷을 뜨라고 안내했음

실행 조건 확인(조회)

SQL조회만 함
SELECT log_mode, cdb, open_mode FROM v$database;
SELECT ROUND(SUM(bytes)/1024/1024/1024,2) data_gb FROM dba_data_files;
SELECT con_id, name, open_mode, restricted FROM v$pdbs;

결과 해석:

저장 위치 준비와 생성

셸 (oracle)객체 또는 설정을 변경함
df -h /u01 /home/oracle
mkdir -p /u01/clone_template

dbca -silent -createCloneTemplate \
  -sourceSID orcl \
  -templateName orcl_clone.dbc \
  -datafileJarLocation /u01/clone_template \
  -rmanParallelism 2 \
  -maintainFileLocations false \
  -sysDBAUserName sys

결과 해석:

정리(실습 마무리, 생성한 템플릿과 압축본 삭제)

셸 (oracle)데이터 또는 파일을 삭제함, 되돌릴 수 없음
rm -f $ORACLE_HOME/assistants/dbca/templates/orcl_clone.dbc
rm -rf /u01/clone_template

결과 해석: 개별 실행 출력은 기재 없음

#생성 스크립트만 만들기

셸 (oracle)객체 또는 설정을 변경함
mkdir -p /home/oracle/oradata

$ORACLE_HOME/bin/dbca -silent -createDatabase \
  -templateName New_Database.dbt \
  -gdbname cdb2 -sid cdb2 \
  -createAsContainerDatabase true \
  -numberOfPDBs 1 -pdbName cdb2pdb \
  -characterSet AL32UTF8 \
  -automaticMemoryManagement false -totalMemory 1536 \
  -datafileDestination /home/oracle/oradata \
  -emConfiguration NONE \
  -generateScripts -scriptDest /home/oracle/dbca_scripts

결과 해석:

비밀번호 옵션을 주지 않으면 프롬프트로 입력받음
실습에서는 이 명령으로 데이터베이스가 만들어지지 않는다고 설명함
나머지 생성 옵션의 뜻은 DBCA와 데이터베이스 생성의 옵션 표에 있음

#생성된 스크립트 확인

셸 (oracle)조회만 함
ls -l /home/oracle/dbca_scripts
grep -A 10 "CREATE DATABASE" /home/oracle/dbca_scripts/CreateDB.sql
cat /home/oracle/dbca_scripts/init.ora
cat /home/oracle/dbca_scripts/cdb2.sh

결과 해석:

CreateDB.sql에서 CHARACTER SET AL32UTF8 한 줄이 나중에 바꿀 수 없는 문자 집합 결정이라는 것이 실습의 설명임
init.ora에는 db_block_size, control_files, compatible, enable_pluggable_database=true, undo_tablespace 등이 들어감

#스크립트로 직접 DB 생성과 등록

셸 (oracle)객체 또는 설정을 변경함
sh /home/oracle/dbca_scripts/cdb2.sh

결과 해석:

생성 후 DBCA가 하던 등록을 수동으로 함

셸 (root 또는 oratab 쓰기 권한 계정)객체 또는 설정을 변경함
echo "cdb2:$ORACLE_HOME:N" >> /etc/oratab

결과 해석:

등록을 빠뜨리면 이후 dbca -deleteDatabase에서 "database not found"가 남
삭제 절차는 데이터베이스 삭제와 잔여 파일에 있음

#구문과 옵션 설명

옵션 의미 바꿀 입력값 해석
-sourceSID orcl 템플릿 생성에 사용할 소스 DB 실습 SID "orcl이라는 이름으로 만들라"가 아니라 "orcl을 소스 DB로 사용하라"는 뜻
-templateName 새 템플릿 이름 이름 .dbc 파일명
-datafileJarLocation .dfb 저장 디렉터리 여유 공간이 있는 경로 기본 위치가 좁을 때 다른 파일시스템으로 빼는 옵션
어느 쪽이 넓은지는 서버마다 달라 df -h로 확인
-rmanParallelism RMAN 병렬도 정수
-maintainFileLocations 파일 위치 유지 여부 true 또는 false
-sysDBAUserName SYSDBA 권한 사용자 사용자명
-sysDBAPassword 비밀번호 비밀번호 실습에서는 일부러 주지 않고 프롬프트로 입력하게 했음
인자로 주면 셸 히스토리와 ps -ef에 남기 때문

실습에서는 이 명령이 데이터베이스를 만들지 않고 orcl_clone.dbc와 orcl_clone.dfb 두 파일만 만든다고 설명함
인스턴스도 뜨지 않고 /etc/oratab도 건드리지 않음
새 DB 이름이 정해지는 것은 이 템플릿으로 dbca -createDatabase를 수행하는 다음 단계임

실습에서는 -createCloneTemplate 실행 조건으로 다음을 확인했음
LOG_MODE가 ARCHIVELOG이면 DB를 내리지 않고 온라인 백업으로 생성되고, CDB이면 PDB 전체가 담기며 PDB만 골라낼 수 없고, RESTRICTED 상태 PDB는 그 상태 그대로 복제됨

#사용 조건과 주의사항

위 명령은 소스 DB에 RMAN 백업 부하를 줌
운영 환경에서는 영향을 확인한 뒤 실행해야 함
실습에서는 실습 환경(VM 스냅샷 가능)을 전제로 했음

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

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

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