DBCA 템플릿과 생성 스크립트
템플릿 파일(.dbc, .dbt, .dfb)의 차이, 기존 DB로 템플릿을 만드는 명령, -generateScripts로 생성 스크립트만 뽑아 검토하고 직접 실행할 때 필요한 oratab 등록
#핵심 요약
템플릿 파일 .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
#템플릿 파일 확인
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이 값으로 적혀 있으면 "복사해 올 값이 아니라 지금 정할 값"임
#템플릿 생성 명령의 사용법 확인
dbca -help -createTemplateFromDB
dbca -help -createCloneTemplate결과 해석: 개별 실행 출력은 기재 없음
#클론 템플릿 만들기
실습에서는 이 명령을 "소스 데이터베이스를 RMAN으로 백업하는 실작업"이라고 하고 시작 전에 가상 머신 스냅샷을 뜨라고 안내했음
실행 조건 확인(조회)
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;결과 해석:
저장 위치 준비와 생성
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결과 해석:
정리(실습 마무리, 생성한 템플릿과 압축본 삭제)
rm -f $ORACLE_HOME/assistants/dbca/templates/orcl_clone.dbc
rm -rf /u01/clone_template결과 해석: 개별 실행 출력은 기재 없음
#생성 스크립트만 만들기
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와 데이터베이스 생성의 옵션 표에 있음
#생성된 스크립트 확인
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 생성과 등록
sh /home/oracle/dbca_scripts/cdb2.sh결과 해석:
생성 후 DBCA가 하던 등록을 수동으로 함
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 스냅샷 가능)을 전제로 했음