๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/DB

[Oracle] ์˜ค๋ผํด Sequence auto_increment ์‚ฌ์šฉ ๋ฐ ์ •๋ฆฌ :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 3. 23.

์ƒˆ๋กœ์šด ์‚ฌ์› INSERT

์ƒˆ๋กœ์šด ์‚ฌ์›์ด ์ž…์‚ฌํ•˜์—ฌ Database์— Insertํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ฐจ์ ์ธ ๋ฒˆํ˜ธ๋กœ ์‚ฌ์›ID๋ฅผ ๋ถ€์—ฌํ•ด์ค๋‹ˆ๋‹ค. ์ด๋•Œ 1006์ด๋ผ๋Š” ์‚ฌ์›ID๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ›์•„์™€์„œ Insert ์‹œํ‚ฌ๊นŒ์š”?

MAX(์‚ฌ์›ID) + 1 ?

MAX ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฌ์›ID์˜ ์ตœ๋Œ€๊ฐ’์„ ๋ฐ›์•„์„œ 1์„ ๋”ํ•ด์ค€ ๊ฐ’์„ Insertํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. 1000์ •๋„์˜ ์ˆซ์ž๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์—†์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋ถ€ํ•˜๋Š” ์ปค์งˆ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

INDEX ์‚ฌ์šฉ ?

INDEX๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. index์˜ ๋งจ ๋งˆ์ง€๋ง‰ ๋ธ”๋Ÿญ์„ ์ฐพ๋„๋ก ํ•˜๋ฉด Root - Branch - Leaf ์ด 3๋‹จ๊ณ„์— ๊ฑธ์ณ ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํผํฌ๋จผ์Šค๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, Sequence๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Sequence

์˜ค๋ผํด์˜ Sequence ์˜ค๋ธŒ์ ํŠธ๋Š” ๋ฒˆํ˜ธ ์ž๋™ ์ƒ์„ฑ๊ธฐ ์ž…๋‹ˆ๋‹ค. Sequence๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ๊ทธ๋ƒฅ ๋‹ค์Œ ๋ฒˆ ๊ฐ’์„ ๋‹ฌ๋ผ๋Š” ์š”์ฒญ(PseudoColumn : NEXTVAL)์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Sequence ์ƒ์„ฑ

1
GRANT CREATE SEQUENCE TO SCOTT;

ORACLE SCOTT ๊ณ„์ •์œผ๋กœ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ์—†๋‹ค๋ฉด DBA ๊ถŒํ•œ์˜ ๊ณ„์ •์—์„œ Sequence๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ค๋‹ˆ๋‹ค.

 

 

CREATE SEQUENCE ์‹œํ€€์Šค๋ช…
์ƒ๋žต๊ฐ€๋Šฅ[INCREMENT BY ์ˆซ์ž]
์ƒ๋žต๊ฐ€๋Šฅ[START WITH ์ˆซ์ž]
์ƒ๋žต๊ฐ€๋Šฅ[MAXVALUE ์ˆซ์ž | NOMAXVALUE]
์ƒ๋žต๊ฐ€๋Šฅ[MINVALUE ์ˆซ์ž | NOMINVALUE]
์ƒ๋žต๊ฐ€๋Šฅ[CYCLE | NOCYCLE]
์ƒ๋žต๊ฐ€๋Šฅ[CACHE ์ˆซ์ž | NOCYCLE]
์ƒ๋žต๊ฐ€๋Šฅ[ORDER | NOORDER]

 

1
CREATE SEQUENCE SEQ_ROW;

 

INCREMENT BY : Sequence์˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ ๊ฐ„๊ฒฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žต ์‹œ 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

START WITH : ์ƒ์„ฑํ•  ์ฒซ๋ฒˆ์งธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์ƒ๋žต์‹œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

MAXVALUE : ๋ฒˆํ˜ธ์˜ ์ตœ๋Œ€๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žต์‹œ NOMAXVALUE๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 10^27์ด ์ตœ๋Œ€ ์ž…๋‹ˆ๋‹ค.

MINVALUE : ์ตœ์†Œ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žต์‹œ NOMINVALUE๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 1์ด ์ตœ์†Œ์ž…๋‹ˆ๋‹ค.

CYCLE : ์ตœ๋Œ€๊ฐ’์ด๋‚˜ ์ตœ์†Œ๊ฐ’์„ ๋„๋‹ฌํ–ˆ์„๋•Œ ๋ฐ˜๋ณตํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋žต์‹œ NOCYCLE์ด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

CACHE : ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•  ๋ฒˆํ˜ธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 20๊ฐœ์ž…๋‹ˆ๋‹ค.

 

Sequence ํ™•์ธ

1
SELECT SEQ_ROW.NEXTVAL FROM DUAL;

PseudoColumn์ธ NEXTVAL์„ ์ด์šฉํ•ด์„œ ๋‹ค์Œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

 

ํ•œ๋ฒˆ์ด์ƒ NEXTVAL์„ ํ†ตํ•ด Sequence๊ฐ€ ์‹œ์ž‘๋ฌ๋‹ค๋ฉด CURRVAL์„ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

DataDictionary ํ™•์ธ

1
SELECT * FROM USER_SEQUENCES;

๋ถ„๋ช… ํ•œ๋ฒˆ๋งŒ NEXTVAL์„ ํ†ตํ•ด์„œ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•˜์ง€๋งŒ, DataDictionary์— ์žˆ๋Š” LAST_NUMBER๊ฐ’์€ 21๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” CACHE_SIZE๊ฐ€ ๊ธฐ๋ณธ 20์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋ฉด SGA ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ์— SEQUENCE์˜ CACHE_SIZE๋งŒํผ ๋ฏธ๋ฆฌ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ™ˆ์‡ผํ•‘์ด๋‚˜ ์ฃผ์‹๊ณผ ๊ฐ™์ด ๋งŽ์€ ์–‘์˜ Transaction์ด ๋ฐœ์ƒ๋˜๋Š” ์—…๋ฌด์—์„œ ํ•œ๋ฒˆ์— ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ SEQUENCE๋ฅผ ์ ‘๊ทผ์‹œ ๋น ๋ฅธ ์†๋„๋กœ ๋Œ€์‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฒˆํ˜ธ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. CACHE์˜ SIZE๋Š” Sequence์ƒ์„ฑ ์‹œ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Sequence ๋ฌธ์ œ์ 

Sequence๋Š” ํผํฌ๋จผ์Šค๋ฅผ ๋†’์ผ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆํ˜ธ์˜ ์ˆœ์„œ์— ๊ฐญ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐญ์ด ์ƒ๊ธธ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

1. Transaction rollback ๋˜์—ˆ์„ ๋•Œ

 Sequence๋Š” ํ•œ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ์ด์ „ ๋ฒˆํ˜ธ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ 1๋ฒˆ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” Sequence๋ฅผ ์ด์šฉํ•ด์„œ Insert ์ž‘์—…์„ 10๋ฒˆ ํ–ˆ๋Š”๋ฐ Rollback์„ ํ•˜๊ฒŒ ๋˜์—ˆ์„ ๊ฒฝ์šฐ Sequence์˜ ๋ฒˆํ˜ธ๋Š” Rollback ๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋‹ค์Œ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•„์™€ ๊ฐญ์ด ์ƒ๊น๋‹ˆ๋‹ค.

 

2. ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ Sequence ์‚ฌ์šฉํ•  ๋•Œ

ํ•˜๋‚˜์˜ Sequence๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฒˆํ˜ธ ์‚ฌ์ด์˜ ๊ฐญ์ด ์ƒ๊น๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ถ€๋ถ„์€ ๊ฐ๊ฐ ํ…Œ์ด๋ธ”๋ณ„๋กœ ๋”ฐ๋กœ Sequence๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ์ž…๋‹ˆ๋‹ค.

 

3. ์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ

์˜ค๋ผํด ์„œ๋ฒ„ ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ์— CACHE SIZE ๋งŒํผ์˜ Sequence ๋ฒˆํ˜ธ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ํœ˜๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ์ธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋œ๋‹ค๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ƒ์„ฑ๋œ Sequence ๋ฒˆํ˜ธ๋Š” ๋‹ค์‹œ Rollback ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋œ๋‹ค๋ฉด ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ๋ฒˆํ˜ธ๋“ค์€ ๋‚ ์•„๊ฐ€๊ณ  ๋‹ค์Œ Sequence์˜ ์ˆœ์„œ๋ถ€ํ„ฐ ๋ฒˆํ˜ธ๊ฐ€ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

 

Sequence ๋ฌธ์ œ์  ํ•ด๊ฒฐ

2๋ฒˆ์˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, 1๋ฒˆ 3๋ฒˆ์˜ ๋ฌธ์ œ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Sequence์˜ ๊ฒฝ์šฐ, ์ˆœ์ฐจ์ ์ผ ํ•„์š”์—†์ด ๊ทธ๋ƒฅ ๊ณ ์œ ์˜ ์•„์ด๋””๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

๋Œ“๊ธ€