πŸ–₯️ λ°μ΄ν„°λ² μ΄μŠ€/SQL

[Oracle] TRANSACTION CONTROL νŠΈλžœμž­μ…˜ 컨트둀

OR15A 2024. 1. 5. 17:22
TRANSACTION의 κ°œλ…
  • νŠΈλžœμž­μ…˜. Tx
  • 논리적인 μ—…λ¬΄μ˜ μž‘μ—… λ‹¨μœ„
  • (μ˜ˆμ‹œ- κ³„μ’Œμ΄μ²΄ = ‘좜금’ + ‘μž…κΈˆ’ )

 

 

νŠΈλžœμž­μ…˜μ˜ 속성
A μ›μžμ„±
Atomicity
ν•˜λ‚˜μ˜ μ›μžμ μΈ μž‘μ—… λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•¨.
ν•˜λ‚˜μ˜ μž‘μ—…μ΄λΌλ„ μ‹€νŒ¨ν•˜λ©΄ νŠΈλžœμž­μ…˜ 전체가 μ‹€νŒ¨.
νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—…μ€ λͺ¨λ‘ 성곡 or λͺ¨λ‘ μ‹€νŒ¨ν•΄μ„œ μ›μƒνƒœλ‘œ λ‘€λ°±
C 일관성
Consistency
νŠΈλžœμž­μ…˜ μ‹œμž‘μ „κ³Ό μ’…λ£Œν›„ DBλŠ” 항상 μΌκ΄€λœ μƒνƒœ μœ μ§€
I 독립성
Isolation
각각의 νŠΈλžœμž­μ…˜μ€ 독립적인 μž‘μ—… λ‹¨μœ„.
νŠΈλžœμž­μ…˜ κ°„μ˜ 동기화 μœ μ§€λ¨.
D 지속성
Durability
νŠΈλžœμž­μ…˜ 성곡후 κ·Έ κ²°κ³ΌλŠ” 영ꡬ적으둜 DB에 μ €μž₯λ˜μ–΄μ•Ό 함

 

 

 

νŠΈλžœμž­μ…˜ 컨트둀

νŠΈλžœμž­μ…˜ 컨트둀

 

 

λͺ…μ‹œμ  νŠΈλžœμž­μ…˜ μ œμ–΄ λͺ…λ Ήμ–΄
λͺ…λ Ήμ–΄ μ„€λͺ…
COMMIT λͺ¨λ“  데이터 변경사항 DB에 μ™„μ „νžˆ 반영. ν˜„μž¬ νŠΈλžœμž­μ…˜ μ’…λ£Œ.
SAVEPOINT ν˜„μž¬μ˜ νŠΈλžœμž­μ…˜μ— SAVEPOIINT 지정함.
ROLLBACK TO
μ„Έμ΄λΈŒ
포인트 이름
아직 μ €μž₯μ•ˆλœ 데이터 변경사항을 μ·¨μ†Œν•˜κ³  ν˜„μž¬μ˜ νŠΈλžœμž­μ…˜ μ’…λ£Œν•¨.
κ·Έλƒ₯ λ‘€λ°±=λ§ˆμ§€λ§‰ μ»€λ°‹μƒνƒœλ‘œ.

 

 

μ•”μ‹œμ  νŠΈλžœμž­μ…˜ μ œμ–΄ λͺ…λ Ήμ–΄
λͺ…λ Ήμ–΄ μ„€λͺ…
μžλ™ COMMIT
=AUTO COMMIT
DDLλͺ…λ Ή(ꡬ쑰관련 λͺ…λ Ήμ˜ˆ: CREATE TABLE
DCLλͺ…λ Ή(κΆŒν•œκ΄€λ ¨ λͺ…λ Ή)
μ»€λ°‹μ΄λ‚˜ λ‘€λ°± μ‹€ν–‰ μ•ˆ ν•˜κ³  SQL*Plusλ₯Ό 정상적 μ’…λ£Œν•¨
ROLLBACK
TO μ„Έμ΄λΈŒ
포인트 이름
SQL*Plus의 비정상적인 μ’…λ£Œ
μ‹œμŠ€ν…œ μ‹€νŒ¨
  • AUTO COMMIT
  • ON/TRUE μƒνƒœ: λͺ…λ Ήλ§ˆλ‹€ 컀밋함. 이 경우 νŠΈλžœμž­μ…˜μ΄ λΆˆκ°€λŠ₯함. OFF/FALSE둜 λ°”κΎΈκ³  ν•˜κΈ°.

 

 

COMMITκ³Ό ROLLBACK μ „/ν›„ 데이터 μƒνƒœ
ROLLBACK μ „
COMMIT μ „
βž€λ°μ΄ν„° 이전 μƒνƒœ 볡ꡬ κ°€λŠ₯ (λ²„νΌλ§Œ 영ν–₯λ°›μ•„μ„œ)
βž€ν˜„μž¬μ‚¬μš©μž SELECT문으둜 μž‘μ—…κ²°κ³Ό 확인가λŠ₯
βž€λ‹€λ₯Έμ‚¬μš©μžλŠ” ν˜„μž¬μ‚¬μš©μžμ˜ μˆ˜ν–‰μž‘μ—… κ²°κ³Ό λͺ»λ΄„
βž€λ³€κ²½λœ 행은 LOCKμ„€μ •λ˜μ–΄ λ‹€λ₯Έμ‚¬μš©μžκ°€ λ³€κ²½λΆˆκ°€λŠ₯ (DB에 λ°˜μ˜μ€ μ•ˆλΌλ„ λ‹€λ₯Έμ‚¬λžŒμ΄ μž…λ ₯/μˆ˜μ • λͺ»ν•¨)
ROLLBACK ν›„ βž€λ°μ΄ν„°μ— λŒ€ν•œ 변경사항 μ·¨μ†Œ
βž€μ΄μ „λ°μ΄ν„° λ‹€μ‹œ μž¬μ €μž₯됨 (DBμ—μ„œ μƒˆλ‘œ κ°€μ Έμ˜¨λ‹€)
βž€κ΄€λ ¨λœ 행에 λŒ€ν•œ LOCK이 ν’€λ €μ„œ λ‹€λ₯Έμ‚¬μš©μžκ°€ μ‘°μž‘κ°€λŠ₯
COMMIT ν›„ βž€λ°μ΄ν„°μ— λŒ€ν•œ 변경사항 DB에 반영됨
βž€μ΄μ „ λ°μ΄ν„°λŠ” μ˜μ›νžˆ 사라짐 (λ°±μ—…μ•ˆν–ˆμ„ λ•Œ)
➀λͺ¨λ“  μ‚¬μš©μžκ°€ λ‚΄κ°€ μž‘μ—…ν•œ κ²°κ³Όλ₯Ό λ³Ό 수 있음
βž€κ΄€λ ¨λœ 행에 λŒ€ν•œ LOCK이 ν’€λ €μ„œ λ‹€λ₯Έμ‚¬μš©μžκ°€ν–‰ μ‘°μž‘ κ°€λŠ₯함