SQLD

κ³Όλͺ©II SQL κΈ°λ³Έ 및 ν™œμš© 1μž₯ - 4절 TCL

솑이 🫧 2021. 5. 21. 14:54

4절. TCL (TRANSACTION CONTROL LANGUAGE)

νŠΈλžœμž­μ…˜ 

- λ°μ΄ν„°λ² μ΄μŠ€μ˜ 논리적 μ—°μ‚°λ‹¨μœ„

- λΆ„ν• ν•  수 μ—†λŠ” μ΅œμ†Œμ˜ λ‹¨μœ„

- ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ—λŠ” ν•˜λ‚˜ μ΄μƒμ˜ SQLλ¬Έμž₯이 ν¬ν•¨λœλ‹€. 

- ALL OR NOTHING의 κ°œλ… 

 

νŠΈλžœμž­μ…˜μ˜ νŠΉμ„±

1. μ›μžμ„± - λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ˜μ§€ μ „ν˜€ μ‹€ν–‰λ˜μ§€ μ•Šμ€ μƒνƒœ 

2. 일관성 - νŠΈλžœμž­μ…˜ μ‹€ν–‰ μ „κ³Ό 후에 일관성이 μžˆμ–΄μ•Ό 함 

3. 고립성(격리성) - νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜λŠ” 도쀑 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ˜ 영ν–₯을 λ°›μ•„ 잘λͺ»λœ κ²°κ³Ό λ§Œλ“€λ©΄ μ•ˆλ¨ 

4. 지속성 - νŠΈλžœμž­μ…˜ μˆ˜ν–‰μ‹œ κ°±μ‹ ν•œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ‚΄μš©μ€ 영ꡬ μ €μž₯ 

 

1. 컀밋(COMMIT) - λ³€κ²½λœ 데이터λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ— 영ꡬ적으둜 반영 

COMMIT;

2. λ‘€λ°±(ROLLBACK) - λ³€κ²½ μ „ λ°μ΄ν„°λ‘œ 볡귀

ROLLBACK;

ROLLBACK TO SVPT1;

3. μ €μž₯점(SAVEPOINT) - μ§€μ •ν•œ μ €μž₯μ κΉŒμ§€ λ‘€λ°±

SAVEPOINT SVPT1; 

 

효과 

- 데이터 무결성 보μž₯

- μ˜κ΅¬λ³€κ²½ μ „ λ°μ΄ν„°μ˜ λ³€κ²½ 사항 확인 κ°€λŠ₯ 

- λ…Όλ¦¬μ μœΌλ‘œ μ—°κ΄€λœ μž‘μ—…μ„ κ·Έλ£Ήν•‘ν•˜μ—¬ 처리 κ°€λŠ₯ 

 

β€» DDL λ¬Έμž₯을 μ‹€ν–‰μ‹œμ—λŠ” μžλ™μœΌλ‘œ μ»€λ°‹λœλ‹€.

   ORACLE의 경우 DML λ¬Έμž₯ 이후에 컀밋이 없어도 DDLλ¬Έμž₯이 μ‹€ν–‰λ˜λ©΄ DDL μˆ˜ν–‰ 전에 μžλ™μœΌλ‘œ μ»€λ°‹λœλ‹€. 

   λ°μ΄ν„°λ² μ΄μŠ€ 정상 μ’…λ£Œμ‹œ μžλ™ 컀밋

   λ°μ΄ν„°λ² μ΄μŠ€ 이상 μ’…λ£Œμ‹œ μžλ™ λ‘€λ°± 

    SQL SERVER의 κ²½μš°μ—λŠ” μžλ™ 컀밋λͺ¨λ“œμ΄λ―€λ‘œ λ”°λ‘œ 처리 ν•„μš” X 

 

SQL SERVER - AUTO COMMIT

ORACLE - μ•”μ‹œμ  νŠΈλžœμž­μ…˜(μ‹œμž‘μ€ DBMSκ°€ 처리) 

+ λͺ…μ‹œμ  νŠΈλžœμž­μ…˜(μ‹œμž‘(BEGIN)κ³Ό 끝(COMMIT) λͺ…μ‹œμ μœΌλ‘œ μ§€μ •) 

 

κ²©λ¦¬μ„±μ—μ„œμ˜ 문제점 

1. κ°±μ‹  λΆ„μ‹€ (lost update)

- ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰ν•œ 데이터 λ³€κ²½ 연산이 μ €μž₯되기 전에 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό κ°€μ§€κ³  κ°€μ„œ 데이터λ₯Ό λ³€κ²½ν•˜κ³  λ‹€μ‹œ μ €μž₯ν•˜λŠ” 경우 첫번째 νŠΈλžœμž­μ…˜μ΄ μˆ˜ν–‰ν•œ 연산은 λ¬΄νš¨κ°€ λœλ‹€

2. μ˜€μ†νŒλ… (dirty bit) 

- commit λ˜μ§€ μ•Šμ€ 값을 읽어왔을 λ•Œ, λ‚˜μ€‘μ— commit 없이 μ’…λ£Œν•œλ‹€λ©΄ μ˜€μ†λœ 값을 κ°€μ§€κ³  있게 λ˜μ–΄ 꼬인닀. 

3. 반볡 λΆˆκ°€λŠ₯(uprepeatable read) 

 - ν•œ νŠΈλžœμž­μ…˜μ΄ 값을 μ½μ–΄μ˜¨ ν›„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ κ·Έ 값을 λ³€κ²½ν•˜κ±°λ‚˜ 없애버리면 κ·Έ dataλ₯Ό λ‹€μ‹œ 읽을 수 μ—†μŒ. 

4. νŒ¬ν…€ 문제 

- ν•œ νŠΈλžœμž­μ…˜(T1)이 μ–΄λ– ν•œ 쑰건으둜 값을 μ‘°νšŒν•œ ν›„ λ‹€λ₯Έ νŠΈλžœμž­μ…˜(T2)이 ν•΄λ‹Ή μ‘°κ±΄μ—μ„œ dataλ₯Ό μ‚½μž…,μ‚­μ œν•˜λ©΄ T1이 λ‹€μ‹œ 값을 μ‘°νšŒν–ˆμ„ λ•Œ λ³€κ²½λœ dataκ°€ μ‘°νšŒλœλ‹€. 이 μƒνƒœμ—μ„œ T2κ°€ rollbackν•œλ‹€λ©΄? 

 

νŠΈλžœμž­μ…˜μ˜ 4κ°€μ§€ 격리 레벨(isolation level)

λ―Έμ™„λ£Œλœ νŠΈλžœμž­μ…˜ 읽기(read uncommitted) 

- μ»€λ°‹ν•˜μ§€ μ•Šμ€ 데이터λ₯Ό μ½μ„μˆ˜ μžˆλ‹€.

- μ˜€μ†νŒλ…, λ°˜λ³΅λΆˆκ°€λŠ₯ 읽기 , νŒ¬ν…€λ¬Έμ œ λ°œμƒ 

μ™„λ£Œλœ νŠΈλžœμž­μ…˜ 읽기(read committed)

- 컀밋 μ™„λ£Œλœ λ°μ΄ν„°λ§Œ 읽을 수 μžˆλ‹€.

- 반볡 λΆˆκ°€λŠ₯ 읽기, νŒ¬ν…€λ¬Έμ œκ°€ λ°œμƒ 

λ°˜λ³΅κ°€λŠ₯ 읽기(repeatable read)

- νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ ν•œλ²ˆ μ‘°νšŒν•œ 데이터λ₯Ό λ°˜λ³΅ν•΄μ„œ μ‘°νšŒν•΄λ„ 같은 데이터가 쑰회 λœλ‹€.

- νŒ¬ν…€λ¬Έμ œκ°€ λ°œμƒ

직렬 κ°€λŠ₯(serializable)  

μœ„ 3κ°€μ§€ λ¬Έμ œμ μ„ λͺ¨λ‘ 예방 κ°€λŠ₯ 

μ˜€μ†νŒλ…, 반볡 λΆˆκ°€λŠ₯ 읽기, νŒ¬ν…€ 문제 λͺ¨λ‘ 예방