DBCA와 데이터베이스 생성
DBCA 배치 유형과 사일런트 DB 생성 옵션, 생성 후 조회 및 등록 작업
#핵심 요약
DBCA 배치 유형은 데이터 웨어하우스, 사용자 정의 데이터베이스, 범용 또는 트랜잭션 처리(General Purpose / OLTP)가 있음
데이터 파일을 미리 만들어 둔 시드를 복사하는지 여부가 다름
dbca -silent -createDatabase의 옵션으로 템플릿, DB 이름, CDB와 PDB 구성, 문자 집합, 메모리, 데이터 파일 위치를 정함
문자 집합처럼 생성 뒤 바꿀 수 없는 값이 있음
DBCA는 데이터베이스를 만드는 것만이 아니라 /etc/oratab 등록과 리스너 연결 같은 뒷정리까지 담당함
#개념과 동작 원리
#배치 유형
| 유형 | 데이터 파일 포함 | 용도와 특징 |
|---|---|---|
| 데이터 웨어하우스 | 예(미리 만든 시드 파일 사용) | 대용량 분석, 통계, 리포팅 복잡한 SELECT, JOIN 같은 대량 조회를 빠르게 처리하도록 메모리와 파라미터가 최적화됨 |
| 사용자 정의 데이터베이스 | 아니오(스크립트로 처음부터 생성) | db_block_size, 테이블스페이스 등 생성 후 변경할 수 없는 속성을 직접 지정해야 할 때 필수생성 시간이 더 걸림 |
| 범용 또는 트랜잭션 처리 | 예(미리 만든 시드 파일 사용) | 입력, 수정, 삭제가 잦은 OLTP 가장 기본적인 템플릿이며 생성 속도가 빠름 |
#템플릿에 따른 생성 시간
New_Database.dbt는 시드 복사가 아니라 카탈로그를 스크립트로 전부 생성하므로 실습 기준 30~60분이 걸림
진행 상황은 alert 로그를 tail -f로 봄
#DBCA와 수작업의 차이
실습의 결론: 스크립트 직접 실행은 /etc/oratab 등록을 하지 않음
DBCA는 데이터베이스를 만드는 것만이 아니라 서버에 등록하고 리스너에 연결하는 뒷정리까지 담당하며, 이것이 수작업 대비 DBCA의 실질적 가치임
#필수 명령어 또는 SQL
#사일런트 모드로 바로 생성
실습 환경: 19c 홈, 파일시스템 저장, PDB 없는 CDB cdb
셸(oracle 계정)에서 실행함
export ORACLE_SID=cdb
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname cdb \
-sid cdb \
-createAsContainerDatabase true \
-numberOfPDBs 0 \
-characterSet AL32UTF8 \
-sysPassword <PASSWORD> \
-systemPassword <PASSWORD> \
-emConfiguration NONE \
-storageType FS \
-datafileDestination /u01/app/oracle/oradata \
-totalMemory 1536결과 해석:
General_Purpose.dbc는 시드 데이터 파일을 복사하는 템플릿이라 구조만 담는 New_Database.dbt보다 빨리 만들어짐(위 배치 유형 표)
실습에서는 업그레이드할 non-CDB를 PDB로 편입하려고 PDB 0개로 만들었음
비밀번호를 명령행에 쓰면 셸 히스토리와 ps 출력에 남으므로 운영 환경에서는 생략하고 프롬프트로 입력함
#생성 확인
SELECT name, cdb, log_mode, open_mode FROM v$database;
SHOW PDBS결과 해석:
실습에서는 -enableArchive를 주지 않으면 NOARCHIVELOG로 만들어지며, 백업 전략이 생성 시점에 결정된다고 설명함
#구문과 옵션 설명
| 옵션 | 의미 | 바꿀 입력값 |
|---|---|---|
-templateName |
General_Purpose.dbc(시드 복사) 또는 New_Database.dbt(구조만, 시드 복사 없음) |
템플릿 이름 |
-sysPassword, -systemPassword |
SYS, SYSTEM 비밀번호 생략하면 프롬프트 입력 |
비밀번호 |
-storageType FS |
파일시스템 저장 ASM이면 다른 값(확인 불가) |
저장 방식 |
-gdbname, -sid |
전역 DB 이름과 SID | 기존 DB와 겹치지 않는 이름 |
-createAsContainerDatabase true, -numberOfPDBs, -pdbName |
CDB와 PDB 생성 | PDB 수와 이름 |
-characterSet |
데이터베이스 문자 집합 실습에서는 나중에 바꿀 수 없는 결정이라고 설명 |
문자 집합 |
-automaticMemoryManagement false -totalMemory |
AMM 끄고 총 메모리(MB) 지정 | 서버의 남은 메모리 이내 |
-datafileDestination |
데이터 파일 위치 | 여유 있는 파일시스템 |
-emConfiguration NONE |
EM Express 사용 안 함 | |
-enableArchive |
아카이브 로그 모드로 생성 주지 않으면 NOARCHIVELOG |
실습에서는 기존 DB와 이름이 겹치지 않게 cdb2를 썼고, 루트 파티션 여유가 좁아 데이터 파일을 /home으로 보냈으며, 남은 메모리를 고려해 -totalMemory를 1536으로 낮추고 EM Express 포트 충돌을 피하려고 -emConfiguration NONE으로 했음
이 값들은 실습 서버 기준이며 자기 환경에 맞게 바꿔야 함
#사용 조건과 주의사항
실습의 오류 안내: ORA-00845 또는 메모리 오류는 -totalMemory가 남은 메모리보다 큰 것이고, ORA-01092 또는 파일 존재 오류는 이전 시도의 잔여물(.../oradata/cdb2)을 지우고 재시도함