λ°μ΄ν° λ½(Data Lock) μ΄λ?
λ€μ€ μ¬μ©μ νκ²½μμ λμμ μ¬λ¬ μ¬μ©μκ° λ°μ΄ν°μ μ κ·Όνκ³ λ³κ²½ν λ λ°μν μ μλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λ©μ»€λμ¦μΌλ‘,
λ°μ΄ν°μ λν μ κ·Όμ μ μ΄νλ κΈ°μ μ λλ€.
λ°μ΄ν° λ½μ λ°μ΄ν°μ μΌκ΄μ±κ³Ό 무결μ±μ μ μ§νλ©° λμμ μ¬λ¬ μ¬μ©μκ° λ°μ΄ν°λ² μ΄μ€μ μ κ·Όν μ μλλ‘ ν©λλ€.
λ°μ΄ν° λ½μ μ’ λ₯
- 곡μ λ½(Shared Lock):
- μ¬λ¬ μ¬μ©μκ° λ°μ΄ν°λ₯Ό λμμ μ½μ μ μμ§λ§, μ°κΈ° μμ μ λΆκ°λ₯ν λ½μ λλ€. μ°κΈ° μμ μ μννλ €λ κ²½μ°μλ λ€λ₯Έ μ¬μ©μμ λ½μ΄ ν΄μ λκΈ°λ₯Ό κΈ°λ€λ €μΌ ν©λλ€.
- λ°°νμ λ½(Exclusive Lock):
- λ°μ΄ν°λ₯Ό μ½κ±°λ μ°λ λμ λ€λ₯Έ μ¬μ©μκ° μ κ·Όν μ μλ λ½μ λλ€. ν μ¬μ©μκ° λ°μ΄ν°λ₯Ό μμ μ€μΌ λ λ€λ₯Έ μ¬μ©μλ ν΄λΉ λ°μ΄ν°μ λν μ½κΈ° λ° μ°κΈ° μμ μ΄ λΆκ°λ₯ν©λλ€.
λ°μ΄ν° λ½μ μ¬μ© μμ
SAP ABAP μμ μ½λ
DATA: lv_balance TYPE i,
lv_account TYPE string.
" 곡μ λ½(Shared Lock) μμ
SELECT balance FROM accounts INTO lv_balance
WHERE account_number = lv_account
FOR READ ONLY.
" λ°°νμ λ½(Exclusive Lock) μμ
SELECT balance FROM accounts INTO lv_balance
WHERE account_number = lv_account
FOR UPDATE.
μμ ABAP μ½λλ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμμ 곡μ λ½κ³Ό λ°°νμ λ½μ μ¬μ©νλ μμμ λλ€.
`FOR READ ONLY`λ 곡μ λ½μ μ€μ νλ©°, `FOR UPDATE`λ λ°°νμ λ½μ μ€μ ν©λλ€.
λ°μ΄ν° λ½μ μ£Όμμ¬ν
- κ³Όλν μ¬μ©μ μ±λ₯ μ νλ₯Ό μ΄λν μ μμΌλ―λ‘ μ μ€νκ² μ¬μ©ν΄μΌ ν©λλ€.
- λ½μ λ²μμ μ§μ μκ°μ μ΅μννμ¬ κΌ νμν λΆλΆμλ§ μ μ©νλ κ²μ΄ μ’μ΅λλ€.
- λ½μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νκ³ ν΄μ νλ κ²μ΄ μ€μν©λλ€.
λ°μ΄ν° λ½μ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν μμ μ§μνλ κΈ°λ₯μ΄λ©°,
ν¨κ³Όμ μΌλ‘ νμ©νλ©΄ λ°μ΄ν°μ 무결μ±κ³Ό μΌκ΄μ±μ μ μ§νλ©΄μ λμμ μ¬λ¬ μ¬μ©μκ° μμ νκ² λ°μ΄ν°μ μ κ·Όν μ μμ΅λλ€.