μ€λΌν΄(Oracle) - TCL (νΈλμμ ) COMMIT, ROLLBACK
νΈλμμ ?
- 'μͺΌκ°€ μ μλ μ 무 μ²λ¦¬μ μ΅μ λ¨μ' νΉμ 'κ±°λ λ΄μ'μ΄λΌκ³ λ νλ€.
μ μλ§ λ€μμ λλ μ΄ν΄κ° μ μλμμ£ ? (μΌλ¨ μ λ μ΄ν΄κ° μ μλμ΅λλ€. ^^;
κ°μ₯ λνμ μΈ μλ‘ μν κ³μ’μ΄μ²΄λ₯Ό λ€ μ μμ΅λλ€.
Aκ° Bμκ² 1000μμ μ΄μ²΄νκ³ , Bκ° κ·Έ λμ λ°μ κ²½μ°, μ΄ κ±°λ κΈ°λ‘μ λ μ΄μ μκ² μͺΌκ°€ μ μλ νλμ νΈλμμ μ λλ€.
λ§μ½ Aλ Bμκ² λμ μ΄μ²΄νμΌλ Bλ λμ λ°μ§ λͺ»νλ€λ©΄ κ·Έ κ±°λλ μ±λ¦½λμ§ μμ΅λλ€.
μ΄ μμμ κ°μ΄ Aκ° λμ μ§λΆνλ νμμ Bκ° λμ λ°λ νμλ λ³κ°λ‘ λΆλ¦¬λ μ μμΌλ©°, νλμ κ±°λλ΄μμΌλ‘ μ²λ¦¬λμ΄μΌ νλ λ¨μΌ κ±°λ μ λλ€. μ΄λ° κ±°λμ μ΅μ λ¨μλ₯Ό νΈλμμ μ΄λΌκ³ ν©λλ€.
νΈλμμ
μ²λ¦¬κ° μ μμ μΌλ‘ μλ£λ κ²½μ° COMMIT
μ νκ³ ,
μ€λ₯κ° λ°μν κ²½μ° μλ μνλλ‘ ROLLBACK
μ ν©λλ€.
νΉμ±
- μμμ±(Automicity)
νΈλμμ μμ μ μλ μ°μ°λ€μ λͺ¨λ μ±κ³΅μ μΌλ‘ μ€νλλμ§ μλλ©΄
μ ν μ€νλμ§ μμ μνλ‘ λ¨μ μμ΄μΌ ν©λλ€. (All or Nothing) - μΌκ΄μ±(Consistency)
νΈλμμ μ΄ μλ£λ κ²°κ³Όκ°μ΄ μΌκ΄μ μΈ DB μνλ₯Ό μ μ§νλ κ²μ μλ―Έ
μ¦, νΈλμμ μ΄ μ§νλλ λμ λ°μ΄ν°λ² μ΄μ€κ° λ³κ²½λλλΌλ μ λ°μ΄νΈλ λ°μ΄ν°λ² μ΄μ€λ‘ νΈλμμ μ΄ μ§νλλ κ²μ΄ μλλΌ μ²μ νΈλμμ μ μ§ννκΈ° μν΄ μ°Έμ‘°ν λ°μ΄ν°λ² μ΄μ€λ‘ μ§νλ©λλ€. - κ³ λ¦½μ±(Isolation)
νλμ νΈλμμ μνμ λ€λ₯Έ νΈλμμ μ μμ μ΄ λΌμ΄λ€μ§ λͺ»νλλ‘ λ³΄μ₯νλ κ²
μ¦, νΈλμμ μ΄ μ€ννλ λμ€μ λ³κ²½ν λ°μ΄ν°λ μ΄ νΈλμμ μ΄ μλ£λ λκΉμ§ λ€λ₯Έ νΈλμμ μ΄ μ°Έμ‘°νμ§ λͺ»νλ€. - μμμ±(Durability)
νΈλμμ μ΄ μ μμ μΌλ‘ μ’ λ£λ λ€μμλ μꡬμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ μμ μ κ²°κ³Όκ° μ μ₯λλ€.
COMMITκ³Ό ROLLBACK
- COMMIT : νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μ λ°μ
- ROLLBACK : νΈλμμ μ λ°μ΄ν°λ² μ΄μ€μ λ°μνμ§ μμ
πΈ COMMIT
μ΄μ μλ λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ λ³κ²½μ¬νμ΄ μ μ©λκΈ° μ μ΄κΈ° λλ¬Έμ μ΄μ λ°μ΄ν°λ‘ λ³΅κ΅¬κ° κ°λ₯ν©λλ€.
SELECT
λ¬Έμ μ΄μ©νμ¬ μμ
μλ λ³κ²½ν μ¬νμ νμΈν μ μμΌλ©°, λ€λ₯Έ μ¬μ©μλ λ³κ²½ μ¬νμ νμΈν μ μμ΅λλ€.
λ³κ²½λ νμ LOCKμ΄ μ€μ λμ΄ μλ μνλ‘ λ€λ₯Έ μ¬μ©μλ λ³κ²½ν μ μλ μνκ° λ©λλ€.
μ΄κ²μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν° μΌκ΄μ±μ μ 곡ν©λλ€.
πΈ COMMIT
μ΄νμλ λ³κ²½μ¬νμ΄ μꡬμ μΌλ‘ λ°μ΄ν°λ² μ΄μ€μ λ°μμ΄ λλ©° μ΄μ μνλ μ.μ .ν μμ€νκ² λ©λλ€.
μμ μλ₯Ό ν¬ν¨ν΄ λͺ¨λ μ¬μ©μκ° λ³κ²½ μ¬νμ μ‘°νν μ μμΌλ©° LOCKμ΄ μ€μ λμ΄ μλ νμ LOCKμ΄ ν΄μ λ©λλ€.
π μΆν, νΈλμμ μ JAVAμ λΉμ¦λμ€ λ‘μ§(Spring Boot)μμ ꡬνν μμ
π¨μ°Έκ³ π¨
1. DDL(ν
μ΄λΈ μμ±/λ³κ²½/μμ μ κ°μ..)μ COMMIT
, ROLLBACK
μν₯μ΄ μλ―ΈμΉκΈ° λλ¬Έμ COMMIT
μν΄λ ν
μ΄λΈ μμ± λ©λλ€.
2. UPDATE
ν κ²μ COMMIT
λκΈ° μ μ λ λ°κΎΈλ €κ³ νλ©΄ μμ
λκΈ° 걸립λλ€.
JAVA μ½λ λ¬Έμ κ° μλλ°λ λΆκ΅¬νκ³ , μ λͺ¨λ₯΄κΈ° λλ¬Έμ λΉν©ν μ μμΌλ κΌ! μ μνμΈμ.
3. μ΄λ΄ κ²½μ°, μ°μ μμκ° μλ κ³³μ COMMIT
μ λ 리면 μμ
λκΈ° κ±Έλ Έλ κ³³μμλ μλμ μΌλ‘ λ°μ λ©λλ€.
4. κ°μ λ§μ΄μ§λ§ COMMIT
μ νλ©΄ μ¬λ¬ μΈμ
μμ λ³κ²½νλ μ¬νλ μꡬμ μΌλ‘ νλ²μ μ μ©λ©λλ€.
5. ROLLBACK
μ νΈλμμ
μ΄ μμλκΈ° μ΄μ μ μνλ‘ λλμκ°λλ€.
6. LOCKμ JAVAμ Syncronized
μ κ°μ κ°λ
μΌλ‘ νμ₯μ€ ν μΉΈμ μκ°νλ©΄ λ©λλ€.
(κ·Έλμ COMMIT
νκΈ° μ κΉμ§λ μμ ν΄λ λ°μ μλκ³ μμ
λκΈ° 걸립λλ€.)
μμ
DEPT_TCL ν μ΄λΈ μμ±
CREATE TABLE DEPT_TCL
AS SELECT *
FROM DEPT; -- 볡μ¬
ν λ°μ΄ν° μΆκ°
INSERT INTO DEPT_TCL VALUES(50, 'DATABASE', 'SEOUL');
πΆ νΈλμμ μ COMMIT μνκΈ° λλ¬Έμ CMDμμλ λ°μ΄ν° μΆκ° λ°μ μλμμ νμΈ.
λ°μ΄ν° λ³κ²½
(DEPTNO 40λ² ν LOC λ³κ²½)
UPDATE DEPT_TCL SET LOC = 'BUSAN'
WHERE DEPTNO = 40;
λ°©κΈ λ³κ²½νλ ν(DEPT 40λ²) CMDμμ μΆκ° λ³κ²½
-- CMDμμ 컀맨λ λ λ¦Ό
UPDATE DEPT_TCL SET LOC = 'ULSAN' WHERE DEPTNO = 40;
πΆ νμ§λ§ λ³κ²½λμ§ μκ³ μμ λκΈ°κ° κ±Έλ¦Ό
COMMIT
-- Dbeaver
COMMIT;
μ°μ μμκ° μλ Dbeaverμ COMMITμ λ 리μ CMDμμλ μλμΌλ‘ λ°μλλ κ² νμΈ