Skip to content

Latest commit

 

History

History
79 lines (57 loc) · 4.31 KB

File metadata and controls

79 lines (57 loc) · 4.31 KB

대규모 E-Commerce 데이터베이스 설치 및 적재 가이드

이 가이드는 SQLP 자격증 실습용 대용량 데이터(수십만 건)를 파이썬으로 자동 생성하고, Oracle 데이터베이스(23ai Free 등)에 초고속으로 적재(SQL*Loader)하기 위한 완벽한 설치 절차를 안내합니다.


🚀 1. 파이썬 데이터 스트리밍 생성

기존의 메모리 집약적인 INSERT 구문 생성 방식을 벗어나, 메모리 사용량을 최소화하는 파이썬 제너레이터(yield)와 CSV 스트리밍 방식을 사용하여 데이터를 생성합니다.

# 프로젝트 루트 디렉토리에서 파이썬 스크립트 실행
uv run src/main.py

💡 결과물: 실행이 완료되면 output/ 폴더에 테이블 생성/삭제 SQL 파일, 쉘 스크립트(load_data.sh), 그리고 output/data/ 폴더에 대량의 .csv 파일과 제어 파일(.ctl)이 생성됩니다.


🐳 2. 도커(Docker) 컨테이너로 파일 전송 및 권한 설정 (중요)

데이터베이스가 로컬 PC가 아닌 도커(Docker) 컨테이너에서 실행 중이라면, 생성된 결과물(output 폴더)을 도커 내부로 복사해야 합니다.

Warning

권한 문제 해결 (ORA-SQL*Loader-522 오류 방지): docker cp 명령어로 파일을 넘기면 기본적으로 소유자가 root로 설정됩니다. Oracle SQL*Loader가 작동하려면 로그 파일(.log)을 해당 폴더에 작성할 수 있어야 하므로, **반드시 권한을 oracle 유저로 변경(chown)**해야 합니다.

# 1. 호스트 OS(맥/리눅스/윈도우)에서 도커로 파일 복사
docker cp output/ oracle26ai:/home/oracle/all_schema/output/

# 2. 도커 내부의 파일 소유권을 oracle 계정으로 변경
docker exec -u 0 oracle26ai chown -R oracle:oinstall /home/oracle/all_schema

🛠 3. 스키마 및 테이블 생성 (DDL)

오라클에 접속하여 ECOMMERCE 유저를 만들고 30개의 테이블과 인덱스, 시퀀스를 생성합니다.

Note

PDB(Pluggable Database) 접속 주의 (ORA-01918 오류 방지): 오라클 12c 이상의 멀티테넌트 환경(특히 23ai Free)에서는 일반 유저를 루트 컨테이너(CDB$ROOT)에 생성할 수 없습니다. 따라서 install.sql 파일 내부에 자동으로 FREEPDB1 컨테이너로 이동(ALTER SESSION SET CONTAINER = FREEPDB1;)하는 코드가 포함되어 있습니다.

# 터미널에서 sqlplus 접속 (또는 DBeaver 등의 툴에서 실행)
docker exec -it oracle26ai sqlplus sys/비밀번호 AS SYSDBA

# 설치 스크립트 실행 (미리 도커 내부로 복사된 경로 사용)
SQL> @/home/oracle/all_schema/output/install.sql

실행 중 ECOMMERCE 유저의 비밀번호를 설정하라는 프롬프트가 나오면 원하시는 비밀번호(예: admin1234)를 입력하세요.


⚡ 4. 초고속 데이터 대량 적재 (SQL*Loader)

수십만 건의 데이터를 INSERT 쿼리로 넣으면 엄청난 시간이 소요되지만, 오라클 자체 내장 툴인 SQL*Loader를 사용하면 몇 초 만에 데이터가 밀어넣어집니다.

Tip

줄바꿈(Line Terminator) 오류 해결 (ORA-01722 오류 방지): 파이썬 CSV 생성 시 윈도우 스타일(\r\n)이 들어가면 마지막 숫자 컬럼을 읽을 때 에러가 발생합니다. 이를 파이썬 소스에서 lineterminator='\n' 옵션으로 완벽히 해결해두었습니다.

# 도커 컨테이너 내부 쉘로 접속
docker exec -it oracle26ai bash

# output 폴더로 이동하여 적재 쉘 스크립트 실행
cd /home/oracle/all_schema/output/
sh load_data.sh

비밀번호를 입력하면 CATEGORIES, ORDERS 등 테이블마다 Rows successfully loaded. 메시지가 출력되며 순식간에 적재가 완료됩니다.


🗑 5. 초기화 및 삭제 (Uninstallation)

환경을 처음부터 다시 구성하고 싶다면 아래의 언인스톨 스크립트를 실행합니다.

SQL> @/home/oracle/all_schema/output/uninstall.sql

이 스크립트 역시 오류 방지를 위해 내부적으로 FREEPDB1으로 자동 접속한 뒤 ECOMMERCE 유저를 통째로 날려버리도록(CASCADE) 안전하게 설계되어 있습니다. (DBeaver에서 SYSTEM 계정으로 직접 접속하여 DROP USER ecommerce CASCADE;를 수행하셔도 무방합니다.)