2013/03/25

Office 365 Access アプリ -13- データマクロ レコードロック

レコードのロックについて勉強してみた。さて、あってるのかどうか。


  レコードごと/ForEachRecord データブロックで確認する。
BEGIN TRAN

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

DECLARE _dm_cur1 CURSOR LOCAL STATIC FOR
 SELECT
  [F_text]
 FROM
  [Table1]
 
 WHERE [Table1].[ID] = 1
 --ORDER BY [ID] ASC

OPEN _dm_cur1
CLOSE _dm_cur1
DEALLOCATE _dm_cur1

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
--- ここまで実行して確認

ROLLBACK TRAN
  こんな感じのものをSSMSで実行しながら確認。データ マクロがストアド プロシージャに変換されたものを簡略化した。



  これらの状態でどのようなロックがされるか。
  • t0
    テーブル全体でレコードの追加/編集/削除ができない
  • t1
    [ID]が1または3または5のレコードの編集削除ができない
  • t2
    [ID]が5から10の範囲のレコードは編集削除ができない。また、新規レコードの[ID]が範囲に含まれる場合追加ができない。
  また、こういうことも起こり得るのだろうか。

  フィールド[F_text]にはインデックスが用いられている。そこに、
    SELECT
        [F_text]
    FROM
        [Query1] 
    WHERE [Query1].[F_text] = N'115'
  という内容でロックがかかるものとして、フィールド[F_text]を"115"として編集や追加をすることはできない。と同時に、"111"や"116"でも編集/追加することができない。キー範囲ロックということなのだろうと憶えておく。そのうちもう少し確かめてみよう。

0 件のコメント: