테마
📌 구 교재용. 이 문서는
1_시험준비_SQLP합격,2_중급실전_딥다이브,3_심화_성능고도화가 참조하는 단일 컨테이너(oracle-free) 환경 안내다. 『튜너의 1년』 본편은 컨테이너 4대 구성을 쓴다(00_자료준비/README.md). 본편의ora-hanorder가 이 문서의oracle-free에 해당하며, 계정과 포트, 서비스명은 같다.
00. Oracle 실습 환경 구축 가이드
SQLP는 실행계획을 직접 보고 튜닝하는 시험이다. 그래서 실습 환경에서 꼭 할 수 있어야 하는 일은 "쿼리를 실행하고 실행계획과 I/O 통계를 확인하는 것"이다. 아래 3가지 옵션 중 하나를 고른다.
| 옵션 | 설치 | 실행계획/AUTOTRACE | 추천 대상 |
|---|---|---|---|
| A. Oracle Live SQL | 무설치(웹) | △ (Explain Plan만 제한적) | 1~2주차 문법 연습용 |
| B. Docker + 23ai Free ⭐ | 5분 | ✅ 전부 가능 | 튜닝 실습(3주차~) 강력 추천 |
| C. Windows 네이티브 설치 | 30분+ | ✅ 전부 가능 | Docker가 어려운 경우 |
권장 조합: 빨리 시작하려면 A로 1~2주차를 시작하되, 3주차(튜닝) 전까지는 반드시 B나 C를 준비한다. 실행계획 실습이 안 되면 과목Ⅲ 학습 효과가 절반으로 떨어진다.
옵션 A. Oracle Live SQL (무설치, 가장 빠름)
- https://livesql.oracle.com에 접속해 오라클 무료 계정으로 로그인한다.
- SQL Worksheet에 쿼리를 붙여 넣고 실행한다(Ctrl+Enter).
00_sample_schema_setup.sql내용을 붙여 넣으면 실습 스키마를 만들 수 있다.
한계: 세션이 일정 시간이 지나면 초기화되고, SET AUTOTRACE/DBMS_XPLAN.DISPLAY_CURSOR 같은 런타임 통계 확인이 제한된다. 그래서 문법과 결과를 확인하기에는 충분하지만 튜닝 실습에는 맞지 않는다.
옵션 B. Docker + Oracle Database 23ai Free ⭐ (튜닝 실습 추천)
B-1. Docker Desktop 설치
- Windows: https://www.docker.com/products/docker-desktop/에서 받아 설치한 뒤 실행한다.
- (WSL2 백엔드를 권장한다. Docker Desktop을 설치할 때 자동으로 안내된다.)
B-2. Oracle 23ai Free 컨테이너 실행
가장 가볍고 빠른 커뮤니티 이미지(gvenzl/oracle-free)를 쓴다.
bash
docker run -d \
--name oracle-free \
-p 1521:1521 \
-e ORACLE_PASSWORD=oracle \
-e APP_USER=sqlp \
-e APP_USER_PASSWORD=sqlp \
gvenzl/oracle-free:23-slim- 최초 1회는 이미지를 내려받느라 몇 분 걸린다.
- 진행 상황은
docker logs -f oracle-free로 확인한다.DATABASE IS READY TO USE!가 보이면 완료다. - 이후 시작과 정지:
docker start oracle-free/docker stop oracle-free
공식 이미지를 쓰려면
docker pull container-registry.oracle.com/database/free:latest를 실행한다.
B-3. 접속 정보 (이 가이드 전체에서 사용)
| 항목 | 값 |
|---|---|
| Host | localhost |
| Port | 1521 |
| Service (PDB) | FREEPDB1 |
| 관리자 | system / oracle |
| 실습 계정 | sqlp / sqlp ← 평소에는 이 계정을 쓴다 |
B-4. ★ sqlp에 튜닝 측정용 권한 부여 (Docker는 이 단계가 필수!)
gvenzl 이미지가 만든 APP_USER(sqlp)에는 기본 권한만 있다. 이대로는 DBMS_XPLAN.DISPLAY_CURSOR/AUTOTRACE가 User has no SELECT privilege on V$SQL로 막힌다. SYS로 한 번 권한을 준다.
bash
docker exec -it oracle-free sqlplus sys/oracle as sysdbasql
ALTER SESSION SET CONTAINER = FREEPDB1;
GRANT SELECT_CATALOG_ROLE, SELECT ANY DICTIONARY, ALTER SESSION TO sqlp;
-- (선택) AUTOTRACE 통계가 계속 막히면: @?/sqlplus/admin/plustrce.sql 후 GRANT PLUSTRACE TO sqlp;동봉 스크립트
00_sqlp_권한부여.sql로 한 번에 처리해도 된다. ★ 권한을 준 뒤에는 sqlp 세션에 다시 접속해야 롤이 활성화된다(그다음00_환경점검.sql을 다시 실행한다).
옵션 C. Windows 네이티브 설치
- https://www.oracle.com/database/technologies/oracle-database-software-downloads.html에서 Oracle Database 23ai Free → Windows (64-bit) zip을 내려받는다.
- 압축을 풀고
setup.exe를 관리자 권한으로 실행한 뒤, 안내에 따라 설치한다.- 시스템 요구 사항: RAM 8GB+, 디스크 50GB+ 권장.
- 설치 중에 정한 비밀번호로
system계정에 접속한다. - 실습 계정을 만든다(아래 SQL을
system으로 1회 실행).
sql
ALTER SESSION SET CONTAINER = FREEPDB1;
CREATE USER sqlp IDENTIFIED BY sqlp;
GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO sqlp;
-- 실행계획/AUTOTRACE/트레이스 실습용 권한
GRANT SELECT_CATALOG_ROLE TO sqlp;
GRANT SELECT ANY DICTIONARY TO sqlp;
GRANT ALTER SESSION TO sqlp;클라이언트 도구 (옵션 B·C 공통)
쿼리를 작성하고 실행할 도구를 1개 고른다.
SQL Developer (GUI, 입문 추천)
- https://www.oracle.com/database/sqldeveloper/technologies/download/에서 내려받는다.
- 새 접속을 만든다.
- Name:
SQLP_local, Username:sqlp, Password:sqlp - Hostname:
localhost, Port:1521, Service name:FREEPDB1
- Name:
- 실행계획 보기:
- 쿼리를 선택한 뒤 F10 = Explain Plan(예상 실행계획)
- F6 = Autotrace(실제 실행 + 통계) ← 튜닝 실습의 핵심 버튼
SQLcl (CLI, 가볍고 강력)
- https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/
- 접속:
sql sqlp/sqlp@localhost:1521/FREEPDB1
★ 실행계획 확인 3종 세트 (반드시 익혀 둔다)
3주차부터 매주 쓰는 핵심 명령이다. 미리 손에 익혀 둔다.
① 예상 실행계획 — DBMS_XPLAN.DISPLAY (가장 기본)
sql
EXPLAIN PLAN FOR
SELECT * FROM emp WHERE deptno = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());② 실제 실행계획 + 행수 통계 — GATHER_PLAN_STATISTICS (튜닝 진단의 정석)
sql
SET SERVEROUTPUT OFF
SELECT /*+ GATHER_PLAN_STATISTICS */ *
FROM emp WHERE deptno = 10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT => 'ALLSTATS LAST'));
-- E-Rows(예상) vs A-Rows(실제) 차이로 통계 정확도/비효율을 진단합니다.③ AUTOTRACE — 한 번에 계획 + I/O(consistent gets) 통계
SQL*Plus / SQLcl:
sql
SET AUTOTRACE ON
SELECT * FROM emp WHERE deptno = 10;
-- 'consistent gets'(논리적 블록 읽기) 수치가 튜닝 전/후 비교의 핵심 지표입니다.
SET AUTOTRACE가 권한 오류를 내면system으로GRANT PLUSTRACE TO sqlp;를 실행한 뒤 (PLUSTRACE 롤이 없으면@?/sqlplus/admin/plustrce.sql을 먼저 실행한다) 다시 시도한다. SQL Developer 사용자는 그냥 F6을 쓰면 된다.
다음 단계
- ☐ 환경(옵션 A/B/C 중 하나) 준비 + (Docker라면) B-4 권한 부여
- ☐ 스키마 A:
sqlp로00_sample_schema_setup.sql실행 - ☐ 스키마 B(SQL BOOSTER):
sqlp로11_…/실습/00_SQLBOOSTER_실습스키마_setup.sql실행 (T_ORD_BIG 100만 건, 대용량 튜닝·Hero용) - ☐
00_환경점검.sql실행 → 정상 확인 - ☐
1_시험준비_SQLP합격/01주차…로 이동
📚 모든 데이터셋(A~E)의 위치, 빌드, ERD, "Hero가 쓰는 파일" 정보는 00_데이터셋_종합안내.md 한 문서에 정리해 두었다.
실습 데이터셋 — 전체 지도
A·B를 포함한 5종 전체의 위치·규모·ERD·"Hero가 쓰는 파일"·설치 순서는 00_데이터셋_종합안내.md 문서에 정리되어 있다.
기본 실습은 A + B(SQL BOOSTER T_ORD_BIG 100만)면 충분하고, 심화(Hero)도 이 둘을 쓴다. 더 다양한 도메인으로 연습하려면 다음 데이터셋을 전용 계정에 따로 설치한다.
| 데이터셋 | 계정 | 빌드 | ERD·조감도 |
|---|---|---|---|
| A 기본 샘플(SCOTT+주문) | sqlp | 00_sample_schema_setup.sql | ERD |
| B SQL BOOSTER 쇼핑몰 | sqlp | SQLBOOSTER setup | ERD |
| C 튜닝에센셜(버거·CF·파티션) | dev | README | ERD |
| D SQL파워업(유통 18테이블) | pup | README | ERD |
| E 이커머스(정규화 30테이블) | ecommerce | 구축가이드 | ERD |