Oracle Tuning 강좌
DBMS_XPLAN 강좌 Sample Data 생성 3 5 99,999+

by 강정식 Sample Data [2010.05.18]


Sample Data 생성

아래는 DBMS_XPLAN 강좌의 Sample Data 생성 스크립트 이다.

 
-- drop table
DROP TABLE emp PURGE;
DROP TABLE dept PURGE;

-- create emp table 
CREATE TABLE emp AS
SELECT -- 1. EMPNO(Unique 컬럼)
       LEVEL empno,
       -- 2. EMPNO(VARCHAR로 변형)
       TO_CHAR(LEVEL) empno_varchar,
       -- 3. JOB(천만건 데이터를 20개 그룹으로 분류)
       CHR(65 + CEIL(LEVEL / 500000) - 1) job,
       -- 4. HIREDATE(10개씩 증가하여 날짜 데이터 만듬) MAX(2738-11-26)
       TO_DATE('00010101', 'YYYYMMDD') + CEIL(LEVEL / 10) - 1 hiredate,
       -- 5. DEPTNO
       -- 자리수 길이를 한 그룹으로 하여 데이터 생성, 분포도 차이나도록) MAX(80)
       LENGTH(LEVEL) * 10 deptno
FROM   DUAL
CONNECT BY LEVEL <= 10000000;

-- create dept table
CREATE TABLE dept AS
SELECT LEVEL * 10  deptno,
       'SALES_' || LEVEL dname,
       'ZONE_'  || LEVEL loc
FROM   DUAL
CONNECT BY LEVEL <= 9;

-- create index
CREATE UNIQUE INDEX EMP_U1 ON EMP (EMPNO) COMPUTE STATISTICS PARALLEL 8;

ALTER INDEX EMP_U1 NOPARALLEL;

CREATE INDEX EMP_N1 ON EMP (DEPTNO) COMPUTE STATISTICS PARALLEL 8;

ALTER INDEX EMP_N1 NOPARALLEL;

CREATE INDEX EMP_N2 ON EMP (HIREDATE) COMPUTE STATISTICS PARALLEL 8;

ALTER INDEX EMP_N2 NOPARALLEL;

CREATE INDEX EMP_N3 ON EMP (EMPNO_VARCHAR) COMPUTE STATISTICS PARALLEL 8;

ALTER INDEX EMP_N3 NOPARALLEL;

CREATE UNIQUE INDEX DEPT_U1 ON DEPT (DEPTNO);

-- gather statistics
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'EMP', CASCADE => TRUE, DEGREE => 8);

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'DEPT', CASCADE => TRUE);
    

- 강좌 URL : http://www.gurubee.net/lecture/2112

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by sungyee [2010.08.01 19:12:05]
안녕하세요 .요즘 오라클 공부를 지작하고 있는데요 .. 이 장에 index 생성 부분에서 이해가 안되는 부분이 있는데요 .. SQL강좌에서 전혀 보이지 않던 index생성부분이네요 . 바로 compute statistics parallel 8 <- 이부분 설명 좀 부탁드립니다.. ^^

by 강정식 [2010.08.04 10:32:01]
안녕하세요? 강정식입니다.
해당 구문은 테이블의 인덱스 통계정보를 생성하는 구문이구요.
통계정보 부분은 compute statistics
그리고 이를 병렬프로세스 8개 이용하여 보다 빠르게 수행하도록 하는 부분이 parallel 8 입니다.

당연 병렬처리로 생성했기 때문에 그 다음에 noparallel 구문을 사용하여 즉시 다음에 병렬처리 하지 않도록 한거구요.

보다 자세한 내용은 아래의 링크에서 찾아보세요 ^^

http://oracleclub.com/article/23893
http://oracleclub.com/article/23928

by 손님 [2011.11.22 15:43:44]
emp 테이블 생성시 65536 row 밖에 입력 안돼네요. 천만건 데이터 입력되어야 하는거 맞죠? 처음부터 막히네요.

by 염정훈 [2011.12.29 13:16:49]
ctas 에서 천만건 생성시 에러가 발생하면 다음과 같이 해 보세요. ^^

CREATE TABLE emp AS
SELECT -- 1. EMPNO(Unique 컬럼)
rownum empno,
-- 2. EMPNO(VARCHAR로 변형)
TO_CHAR(rownum) empno_varchar,
-- 3. JOB(천만건 데이터를 20개 그룹으로 분류)
CHR(65 + CEIL(rownum / 500000) - 1) job,
-- 4. HIREDATE(10개씩 증가하여 날짜 데이터 만듬) MAX(2738-11-26)
TO_DATE('00010101', 'YYYYMMDD') + CEIL(rownum / 10) - 1 hiredate,
-- 5. DEPTNO
-- 자리수 길이를 한 그룹으로 하여 데이터 생성, 분포도 차이나도록) MAX(80)
LENGTH(rownum) * 10 deptno
from
(
select level
FROM DUAL
CONNECT BY LEVEL <= 1000
) a, (
select level
FROM DUAL
CONNECT BY LEVEL <= 10000
) b;

by 개똘기남 [2015.11.22 22:52:30]

많은 도움이 되어 너무너무 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입