忍者ブログ

OracleDBAの技術メモ

最近物覚えが悪くなったので 仕事中に調べた後々役立つ情報をメモしております。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

悲観ロックと楽観ロック

・悲観ロック
  DBMS(死語?)が管理して、データ更新時にかかるロック。
  DBでテーブルロックと言えばほぼ悲観ロック。
  同一トランザクション上でしか制御できない(しない)。

・楽観ロック
  DBMS(死語?)では管理しきれない、処理が複数のセッション(トランザクション?)にまたがる場合のロック方式。
  Web系のシステムではこちらが主?
  ロックテーブルに「更新カウンタ」もしくはデータの「バージョン番号」を示すカラムを設け、
  データ更新時にこの値を取得して、事前に取得していたこの値と比較して同じでなければ、
  他のセッションから更新がかかったとして、自セッションの更新を破棄する。
  (同一であれば自セッションのデータで更新する)

   例:
     (1)更新用画面のためにDBからデータを取得 ・・・ 「更新カウンタ」=1
     (2)更新用画面を表示
     (3)更新用画面でデータを入力
     (4)更新用画面から更新済みデータを受信
     (5)更新可否確認のためにDBからデータを取得(ここは悲観ロックが必要?)
       (5)-1 「更新カウンタ」=1
          更新可能と判断し画面からのデータでDBのデータを更新
       (5)-2 「更新カウンタ」≠1
          別セッションから先に更新がかかったと判断
          ( (1)で取得したデータはすでに古いものということ )
          更新不可と判断し、その旨の処理を行う
          ( メッセージ出力なり )
PR

ブログ内検索

プロフィール

HN:
宇佐 義男
性別:
男性
自己紹介:
都内で活動中のフリーエンジニア
最近はOracle DBに関する作業が主です。

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

最新CM

[08/06 Apagajid]
[06/23 Ajimehof]
[05/28 ovkftcz]
[05/20 Adeepen]
[05/13 Ajirubuy]

バーコード

P R

忍者アナライズ

免責事項

当ブログは日本オラクル株式会社 及びその子会社、関連会社とは一切関係ありません。 当ブログに記述の内容については、実際とは異なる場合があります。 記載しているコマンド、スクリプトを利用したことによって発生した問題、障害等については一切責任を負いません。 利用は自己責任にてお願い致します。