忍者ブログ

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

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

ブログ内検索

プロフィール

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

カレンダー

04 2024/05 06
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 31

最新CM

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

バーコード

P R

忍者アナライズ

免責事項

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