OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 19.27.0.0
방법 : 오라클 19c 유저 100개, 테이블 100개, 인덱스 100개, 데이터 1000건 생성
본문 내용은 오라클 19c에서 유저 100개와 해당 유저에 테이블 100개, 인덱스 100개 생성 후 데이터도 1000건씩 생성하는 테스트용 스크립트임
유저 100개 생성
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL>
BEGIN
FOR i IN 1..100 LOOP
EXECUTE IMMEDIATE '
CREATE USER IMSI' || LPAD(i, 3, '0') || ' IDENTIFIED BY IMSI' || LPAD(i, 3, '0') ||
' DEFAULT TABLESPACE users QUOTA UNLIMITED ON users';
EXECUTE IMMEDIATE '
GRANT CONNECT, RESOURCE TO IMSI' || LPAD(i, 3, '0');
END LOOP;
END;
/
PL/SQL procedure successfully completed.
|
각 유저별로 테이블 100개씩 생성
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SQL>
BEGIN
FOR u IN 1..100 LOOP -- 유저명 루프
FOR t IN 1..100 LOOP -- 테이블명 루프
EXECUTE IMMEDIATE '
CREATE TABLE IMSI' || LPAD(u, 3, '0') || '.IMSI' || LPAD(u, 3, '0') ||
'_tbl' || LPAD(t, 3, '0') || ' (
id NUMBER,
name VARCHAR2(100)
)';
END LOOP;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
|
각 테이블에 데이터도 1000건씩 삽입
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
SQL>
CREATE TABLE SYSTEM.SAMPLE_1K (
id NUMBER,
name VARCHAR2(100)
);
INSERT INTO SYSTEM.SAMPLE_1K (id, name)
SELECT LEVEL, 'name' || TO_CHAR(LEVEL, 'FM0000')
FROM dual
CONNECT BY LEVEL <= 1000;
COMMIT;
DECLARE
v_user VARCHAR2(30);
v_tbl VARCHAR2(128);
BEGIN
FOR u IN 1..100 LOOP
v_user := 'IMSI' || LPAD(u, 3, '0');
FOR t IN 1..100 LOOP
v_tbl := v_user || '_tbl' || LPAD(t, 3, '0');
EXECUTE IMMEDIATE
'INSERT /*+ APPEND */ INTO ' || v_user || '.' || v_tbl || ' (id, name) ' ||
'SELECT id, name FROM SYSTEM.SAMPLE_1K';
COMMIT;
END LOOP;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
|
테이블 건수 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
SQL>
SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE
v_user VARCHAR2(30);
v_tbl VARCHAR2(128);
v_cnt NUMBER;
BEGIN
FOR u IN 1..100 LOOP
v_user := 'IMSI' || LPAD(u, 3, '0');
FOR t IN 1..100 LOOP
v_tbl := v_user || '_tbl' || LPAD(t, 3, '0');
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || v_user || '.' || v_tbl
INTO v_cnt;
DBMS_OUTPUT.PUT_LINE(v_user || '.' || v_tbl || ' count : ' || v_cnt);
END LOOP;
END LOOP;
END;
/
IMSI001.IMSI001_tbl001 count : 1000
IMSI001.IMSI001_tbl002 count : 1000
IMSI001.IMSI001_tbl003 count : 1000
...
IMSI100.IMSI100_tbl098 count : 1000
IMSI100.IMSI100_tbl099 count : 1000
IMSI100.IMSI100_tbl100 count : 1000
PL/SQL procedure successfully completed.
|
각 테이블당 1000건씩 삽입됨
각 유저 테이블에 인덱스도 생성
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SQL>
BEGIN
FOR u IN 1..100 LOOP -- 유저명 루프
FOR t IN 1..100 LOOP -- 테이블명 루프
EXECUTE IMMEDIATE '
CREATE INDEX IMSI' || LPAD(u, 3, '0') || '.IMSI' || LPAD(u, 3, '0') ||
'_tbl' || LPAD(t, 3, '0') || '_id_idx ' ||
'ON IMSI' || LPAD(u, 3, '0') || '.IMSI' || LPAD(u, 3, '0') ||
'_tbl' || LPAD(t, 3, '0') || ' (id)';
END LOOP;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
|
100개의 유저에 100개의 인덱스가 있는 100개의 테이블에 1000건씩 데이터가 삽입됨
|
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select count(*) from dba_tables where table_name like '%IMSI%';
COUNT(*)
----------
10000
SQL> select count(*) from dba_indexes where index_name like '%IMSI%';
COUNT(*)
----------
10000
|
용량 확인
|
1
2
3
4
5
6
7
|
SQL>
select count(*), sum(bytes/1024/1024) mb from dba_segments
where segment_name like '%IMSI%';
COUNT(*) MB
---------- ----------
20000 1250
|
1.2gb정도 생성됨
참조 :
'ORACLE > Sql' 카테고리의 다른 글
| 오라클 19c 리스너 로그 집계 스크립트 (0) | 2025.11.11 |
|---|---|
| 오라클 19c Hugepages 설정 스크립트 최신버전 및 수동계산 (1) | 2025.09.28 |
| 오라클 19c 테스트용 테이블스페이스 및 데이터파일 여러개 생성 쿼리 (0) | 2025.07.28 |
| 오라클 23ai cdb, pdb, 리스너 전체 기동 및 정지 스크립트 (0) | 2025.05.18 |
| 오라클 19c 유저, 백그라운드 프로세스 pga 사용량 확인 (0) | 2024.05.01 |
