[Oracle DB] 성능 테스트를 위한 랜덤 데이터 생성하기 (DBMS_RANDOM)
오라클 DB의 DBMS_RANDOM 패키지 함수를 이용하여, 성능 테스트 등을 위해 다수의 랜덤 데이터를 생성할 경우가 발생하여 해당 내용을 정리하려고 합니다.
테스트용 테이블 생성
먼저 테스트를 위한 아주 간단한 EMP 테이블을 아래의 쿼리와 같이 생성해 보도록 하겠습니다. 복잡한 이런저런 컬럼들은 제외를 하고 3개의 컬럼으로 아주 간단하게 생성을 했습니다.
CREATE TABLE EMP
(
EMPNO VARCHAR2(10) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
HIREDATE DATE
)
그런 다음에 랜덤데이터를 생성할 때 원천 데이터가 될 10개의 데이터를 아래와 같이 Insert를 하였습니다.
INSERT INTO EMP VALUES(1, 'A', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(2, 'B', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(3, 'C', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(4, 'D', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(5, 'E', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(6, 'F', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(7, 'G', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(8, 'H', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(9, 'I', TO_DATE('2000-01-01','yyyy-mm-dd'));
INSERT INTO EMP VALUES(10, 'J', TO_DATE('2000-01-01','yyyy-mm-dd'));
DBMS_RANDOM 함수 이용하여 랜덤 데이터 생성
먼저 Name의 경우는 DBMS_RANDOM.STRING 함수를 이용하여 5개의 대문자 알파벳( DBMS_RANDOM.STRING('U', 5) )을 랜덤하게 생성하여 입력되도록 하였습니다. 다음으로 Date 컬럼의 경우, DBMS_RANDOM.VALUE 함수를 이용하여 1부터 1000까지 정수(CEIL(DBMS_RANDOM.VALUE(1, 1000))를 생성하여 위에서 생성한 10개의 Date에 랜덤 값을 더하여 랜덤 한 날짜를 생성하였습니다.
그런 다음 From 절에 EMP A, EMP B, EMP C과 같은 식으로 10개의 데이터가 있는 테이블들을 여러개 선언하여, 서로 조인이 되어 10 x 10 x 10 = 1000 개의 데이터가 생성이 되도록 하였습니다. EMP D를 추가하면 10,000개, EMP E를 추가하면 100,000개의 더미 데이터들을 생성할 수 있을 것입니다.
전체 Insert문은 아래와 같습니다.
INSERT INTO EMP
SELECT ROWNUM + 1000,
A.ENAME || DBMS_RANDOM.STRING('U', 5),
A.HIREDATE + CEIL(DBMS_RANDOM.VALUE(1, 1000))
FROM EMP A, EMP B, EMP C;
마지막으로 원천 데이터 10개는 삭제를 하면, 총 1000개의 랜덤 한 테스트 데이터가 생성된 것을 확인할 수 있습니다.
DELETE FROM EMP
WHERE EMPNO <= 10;
허접하지만 다수의 랜덤 데이터를 생성을 해봤습니다. 좀 더 응용을 하면 테스트를 위한 대량의 수많은 랜덤 더미 데이터들을 더 실제와 가깝게 작성을 할 수 있을 것 같은데, 이를 위해서는 많은 노력이 필요할 것 같네요..