ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/DataBase

[SQL] νŠΈλžœμž­μ…˜κ³Ό μ„Έμ…˜, TCL

NaNaRinπŸ™ƒ 2021. 3. 11. 15:56

1. νŠΈλžœμž­μ…˜ transaction

- 더 이상 λΆ„ν• ν•  수 μ—†λŠ” μ΅œμ†Œ μˆ˜ν–‰ λ‹¨μœ„

- μ–΄λ–€ κΈ°λŠ₯ ν•œ 가지λ₯Ό μˆ˜ν–‰ν•˜λŠ” 'SQLλ¬Έ 덩어리'.

- ν•œ 개 μ΄μƒμ˜ 데이터 μ‘°μž‘ λͺ…λ Ήμ–΄(DML)둜 이루어짐

- νŠΈλžœμž­μ…˜μ€ ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜ 내에 μžˆλŠ” μ—¬λŸ¬ λͺ…λ Ήμ–΄λ₯Ό ν•œ λ²ˆμ— μˆ˜ν–‰ν•˜μ—¬ μž‘μ—…μ„ μ™„λ£Œν•˜κ±°λ‚˜ λͺ¨λ“  μž‘μ—…μ„ μ·¨μ†Œ. ALL OR NOTHING

- λ°μ΄ν„°λ² μ΄μŠ€ 계정을 톡해 μ ‘μ†ν•˜λŠ” λ™μ‹œμ— μ‹œμž‘ν•œλ‹€

- νŠΈλžœμž­μ…˜μ΄ μ’…λ£Œλ˜κΈ° μ „κΉŒμ§€ μ—¬λŸ¬ SQL문을 μ‹€ν–‰ν•˜κ³  νŠΈλžœμž­μ…˜μ„ μ œμ–΄ν•˜λŠ” λͺ…λ Ή(TCL)을 μ‹€ν–‰ν•  λ•Œ κΈ°μ‘΄ νŠΈλžœμž­μ…˜μ΄ λλ‚˜κ³  κ·Έ ν›„ μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λœλ‹€

 

2. νŠΈλžœμž­μ…˜ μ œμ–΄ λͺ…λ Ήμ–΄ : TCL

- νŠΈλžœμž­μ…˜μ„ μ œμ–΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό TCL : Transaction Control Language 이라고 ν•œλ‹€

- νŠΈλžœμž­μ…˜μ— λ¬Άμ—¬μžˆλŠ” DML의 μˆ˜ν–‰ μƒνƒœλŠ” λͺ¨λ“  λͺ…λ Ήμ–΄κ°€ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰ μ™„λ£Œλœ μƒνƒœ λ˜λŠ” λͺ¨λ“  λͺ…λ Ήμ–΄κ°€ μˆ˜ν–‰λ˜μ§€ μ•Šμ•„ μ·¨μ†Œλœ μƒνƒœ 두 κ°€μ§€λ‘œλ§Œ μ‘΄μž¬ν•  수 μžˆλ‹€

- νŠΈλžœμž­μ…˜ μ œμ–΄ λͺ…λ μ–΄λŠ” 데이터 μ‘°μž‘ μƒνƒœλ₯Ό μœ„ 두가지 μƒνƒœ 쀑 ν•˜λ‚˜λ‘œ μœ λ„ν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό 의미

- 데이터 μ‘°μž‘μ„ λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ히 λ°˜μ˜ν•˜κ±°λ‚˜ μž‘μ—… 전체λ₯Ό μ·¨μ†Œ

 

2-1. νŠΈλžœμž­μ…˜μ„ 영ꡬ히 λ°˜μ˜ν•˜λŠ” COMMIT

- μ§€κΈˆκΉŒμ§€ μˆ˜ν–‰ν•œ DML λͺ…λ Ήμ–΄λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ히 반영

- COMMIT ν›„ μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λœλ‹€

COMMIT;

 

2-2. νŠΈλžœμž­μ…˜μ„ μ·¨μ†Œν•˜λŠ” ROLLBACK

- ν˜„μž¬ νŠΈλžœμž­μ…˜μ— ν¬ν•¨λœ DML λͺ…λ Ήμ–΄μ˜ μˆ˜ν–‰μ„ λͺ¨λ‘ μ·¨μ†Œ

- λ°”λ‘œ μ „μ˜ νŠΈλžœμž­μ…˜ μ‹œμž‘ μ‹œμ μœΌλ‘œ λŒμ•„κ°„λ‹€

- ROLLBACK ν›„ μƒˆλ‘œμš΄ νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘λœλ‹€

ROLLBACK;

 

3. μ„Έμ…˜ session

- μ–΄λ–€ ν™œλ™μ„ μœ„ν•œ μ‹œκ°„μ΄λ‚˜ κΈ°κ°„

- λ°μ΄ν„°λ² μ΄μŠ€ 접속을 μ‹œμž‘μœΌλ‘œ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ΄€λ ¨ μž‘μ—…μ„ μˆ˜ν–‰ν•œ ν›„ 접속을 μ’…λ£Œν•˜κΈ°κΉŒμ§€ 전체 기간을 의미

- μ„Έμ…˜μ΄ μ—¬λŸ¬ κ°œλΌλŠ” 말은 ν˜„μž¬ 였라클 λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•˜μ—¬ μ‚¬μš© 쀑인 연결이 μ—¬λŸ¬ 개 μžˆλ‹€λŠ” 뜻

 

4. νŠΈλžœμž­μ…˜κ³Ό μ„Έμ…˜μ˜ 차이

- νŠΈλžœμž­μ…˜μ€ DML이 λͺ¨μΈ ν•˜λ‚˜μ˜ μž‘μ—… λ‹¨μœ„λ₯Ό λœ»ν•˜λ©° μ„Έμ…˜ λ‚΄λΆ€μ—λŠ” ν•˜λ‚˜ μ΄μƒμ˜ νŠΈλžœμž­μ…˜μ΄ 쑴재

- λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•œ ν›„ μ’…λ£Œν•˜κΈ°κΉŒμ§€μ˜ 과정이 ν•˜λ‚˜μ˜ μ„Έμ…˜μ΄λ©° 이 μ„Έμ…˜μ΄ μœ μ§€λ˜λŠ” λ™μ•ˆ μ—¬λŸ¬ COMMIT, ROLLBACK μž‘μ—…μ΄ μ§„ν–‰λ˜κΈ° λ•Œλ¬Έ

- μ„Έμ…˜μ΄ νŠΈλžœμž­μ…˜λ³΄λ‹€ 큰 λ‹¨μœ„

 

5. 읽기 일관성 read consistency

- μ–΄λ–€ νŠΉμ • μ„Έμ…˜μ—μ„œ ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό λ³€κ²½ 쀑일 λ•Œ κ·Έ μ™Έ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œλŠ” λ°μ΄ν„°μ˜ 변경이 ν™•μ •λ˜κΈ° μ „κΉŒμ§€ λ³€κ²½ 사항을 μ•Œ ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ, 데이터λ₯Ό λ³€κ²½ 쀑인 μ„Έμ…˜μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μ„Έμ…˜μ—μ„œλŠ” ν˜„μž¬ 진행 쀑인 λ³€κ²½κ³Ό λ¬΄κ΄€ν•œ 본래의 데이터λ₯Ό 보여 μ£ΌλŠ” νŠΉμ„±

- μ–΄λ–€ 데이터 μ‘°μž‘μ΄ ν¬ν•¨λœ νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œ(COMMIT, ROLLBACK)이 되기 μ „κΉŒμ§€ 데이터λ₯Ό 직접 μ‘°μž‘ν•˜λŠ” μ„Έμ…˜ μ™Έ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œλŠ” 데이터 μ‘°μž‘ μ „ μƒνƒœμ˜ λ‚΄μš©μ΄ μΌκ΄€μ μœΌλ‘œ 쑰회, 좜λ ₯, κ²€μƒ‰λ˜λŠ” νŠΉμ„±

 

6. LOCK

- μ‘°μž‘ 쀑인 데이터λ₯Ό λ‹€λ₯Έ μ„Έμ…˜μ€ μ‘°μž‘ν•  수 없도둝 접근을 보λ₯˜μ‹œν‚€λŠ” 것

- νŠΉμ • μ„Έμ…˜μ—μ„œ μ‘°μž‘μ€‘μΈ λ°μ΄ν„°λŠ” νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œ(COMMIT, ROLLBACK)이 되기 μ „κΉŒμ§€ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œ μ‘°μž‘ν•  수 μ—†λŠ” μƒνƒœ,(LOCK)κ°€ 됨
- ν–‰ 레벨 둝 low level lock : μ‘°μž‘ν•˜λŠ” λŒ€μƒ 데이터가 ν…Œμ΄λΈ”μ˜ νŠΉμ • ν–‰ 데이터일 경우 ν•΄λ‹Ή ν–‰λ§Œ LOCK이 λ°œμƒν•œλ‹€λŠ” 의미

- ν…Œμ΄λΈ” 레벨 둝 table level lock : ν…Œμ΄λΈ” λ‹¨μœ„λ‘œ LOCK이 λ°œμƒ. INSERT문의 μˆ˜ν–‰μ€ κ°€λŠ₯

 

7. HANG

- νŠΉμ • μ„Έμ…˜μ—μ„œ 데이터 μ‘°μž‘μ΄ μ™„λ£Œλ  λ•Œ κΉŒμ§€ λ‹€λ₯Έ μ„Έμ…˜μ—μ„œ ν•΄λ‹Ή 데이터 μ‘°μž‘μ„ κΈ°λ‹€λ¦¬λŠ” ν˜„μƒ

- λ‹€λ₯Έ μ„Έμ…˜ Aμ—μ„œ μ‘°μž‘μ€‘μΈ 데이터λ₯Ό μ‘°μž‘ν•˜λ €κ³  μ„Έμ…˜ Bμ—μ„œ DML을 μ‹€ν–‰ν•˜λ©΄ 화면이 멈좘 λ“― μ•„λ¬΄λŸ° λ™μž‘μ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€

- μ„Έμ…˜ Aκ°€ μ‘°μž‘μ„ μ™„λ£Œν•  λ•Œ κΉŒμ§€ μž‘μ—…μ„ λŒ€κΈ°ν•œλ‹€. 

- νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œ(COMMIT, ROLLBACK)이 λ˜λŠ” μˆœκ°„ λŒ€κΈ°ν•˜κ³ μžˆλ˜ λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λœλ‹€

- μ„Έμ…˜ Aκ°€ νŠΈλžœμž­μ…˜μ„ μ™„λ£Œν•˜λ©΄ μ„Έμ…˜ Bκ°€ λŒ€κΈ°ν•˜κ³ μžˆλ˜ λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•˜κ³ , μ„Έμ…˜ Aκ°€ λ‹€μ‹œ μ„Έμ…˜ Bκ°€ νŠΈλžœμž­μ…˜μ„ μ™„λ£Œν•  λ•Œ κΉŒμ§€ λŒ€κΈ°(HANG)ν•œλ‹€