この記事を読むメリット
- ロックに関する知識が体系的に習得できます
- SM12を使ったロックエントリ状況の確認方法が理解できます
T-CODE:SM12は、SAPの“テーブルロック(Table Enqueue)”を監視・解除するための管理トランザクションです。
ロックエントリが残留すると、他ユーザの更新がブロックされて業務停止の原因になりかねません。SM12を使えば、誰が・どのテーブルの・どのキーを・いつからロックしているかを瞬時に特定し、必要に応じて適切に解除できます。
本記事では、ロックに関する概要をおさえつつ、SM12を使ったロックエントリの確認から強制解除まで実務視点で整理していますので、ぜひご参考ください!
この記事のポイント
概要
SAPは、同一データの同時更新を防ぐために共有メモリ上でロック情報を管理する仕組みを持っています。このロック情報は、「ロックエントリ」と呼ばれ、「どのテーブルの、どのキーを、どのモード(共有S/排他Eなど)で、誰が、いつ、どのアプリサーバでつかんでいるか」という情報を指します。
テーブルのロックはデータ同士の“取り合い”を防ぐ安全装置で、トランザクション(画面操作)やジョブ、RFC処理が更新を行うときにロックエントリを取り、コミット/ロールバック/明示解除(DEQUEUE)で手放します。
重要なのは、これらのロックエントリはデータベースに履歴として残るものではなく、アプリケーションサーバのメモリに現在有効なロックエントリとして存在します。
その為、もし処理が異常終了したり、長時間放置されたりすると、ロックエントリが残り続け、他の人の更新が待たされて業務が止まる原因になります。
T-CODE:SM12は、この現在存在するロックエントリを一覧表示し、必要に応じて安全に解除するための管理機能です。主な機能は、ロックの検索・一覧表示し、個別エントリをドリルダウンで分析すること、そして特定のロックを強制解除することです。
留意点として、強制解除の際にいきなり消すと更新中の処理を壊す恐れがあるため、SM04(ユーザセッションの状態)やSM13(更新エラーの有無)、SM37(関連ジョブ)、ST22(ダンプ)を先に確認し、本当に残留ロックなのかを見極めてから最小範囲で解除するのが基本ルールです。これを徹底すれば、データ整合性を守りつつ、詰まった業務を手早く復旧できます。
もっと詳しく💡
ロックの単位はあらかじめ定義されたロックオブジェクトが使用されます。どのテーブル(複数制御可能)をどのKEY項目で、どのモードでロックするか等を定義しています。そして、このロックオブジェクトを作成した時に自動で生成されるロック用と解除用の汎用モジュールを使って、実際にロックと解除が実行されるという仕組みです。
ロックオブジェクトの登録方法や使用方法を、もっと詳しく知りたい方はぜひ下記の記事をご参考ください!
あわせて読みたい
【SAP ABAP】ロックオブジェクトの登録方法と使用方法
この記事を読むメリット SAPで複数の人が同じデータを安全に扱うために必要な「ロックオブジェクト」の基本的な仕組みと使い方が分かります。 SAPでは、複数のユーザが…
ロックに関連するトランザクションコード
| T-CODE | 内容 |
|---|
| SM12 | ロックエントリの一覧照会と強制解除ができます |
| SM04 | 対象ユーザがまだ操作中かを確認できます |
| SM13 | 更新失敗の有無を確認できます (更新エラーが原因でロックが残ることがあるため) |
| SM37 | バックグラウンド実行されたジョブの状態確認できます (バックグラウンド起因のロックかを確認) |
| ST22 | ショートダンプを確認できます (ダンプで処理が落ちたことでロックが残ることがあるため) |
| SE11 | ロックオブジェクトの登録/変更/照会ができます |
ロックに関連するトランザクションコード
ロックエントリの確認方法
そもそもロックエントリを確認するきっかけになるのは、ある処理を行おうとしたときに「データはユーザ XXXがロックしており、照会のみ可能です。」などの警告が出ることが多いです。
例えば、下記の例はT-CODE:VA02で伝票を開こうとしたときに、他のユーザがロックをかけていることからエラーメッセージが表示されています。
受注伝票登録画面
検索画面
T-CODE:SM12を実行した後、検索画面で選択条件を指定して「一覧」ボタンを押し、対象のロックエントリを絞り込みます。
テーブルやユーザ名などがわかっている場合は、直接指定すればよいですが、わかっていない場合はクライアント番号のみで検索することが可能です*。
*権限の制御で自分以外のユーザのロックエントリを照会したり、ロックの強制解除ができないケースもあります。
SM12 検索画面
ロックエントリ照会画面
検索されたロックエントリが一覧で出力されます。
基本的な項目は以下の通りです。
- クライアント:対象のクライアント
- ユーザ名:ロックしているユーザ名
- 日時/時刻:ロックが開始された日時
- Lockモード:共有(S)、排他(E)、排他累積(X)、楽観(O)
- テーブル:ロックされているテーブル名
- ロック引数:対象テーブルのKEY項目のデータが連結表示
Lockモードが排他ロック(E)であり、テーブル名が販売伝票ヘッダ(VBAK)、さらにロック引数がVBAKのKEY情報であるクライアント番号(800)と伝票番号(0000023032*)であることから、例に挙げたVA02のロックは上から2行目のロックエントリが影響していると考えられます。
*この伝票番号は外部書式です
SM12 一覧照会画面
2行目の行をダブルクリックするとさらに明細情報がポップアップで表示されます。
ここでは、ロックされている環境のホスト名や使われているロックオブジェクト名、さらにロックしているユーザが使用しているトランザクションコードなどの情報を確認することができます。
強制解除する場合は、対象のレコードを選択した状態でゴミ箱マークの削除ボタンを押下するだけです。
上述の通り、強制解除の際にいきなり消すと更新中の処理を壊す恐れがあります。
その為、T-CODE:SM04でユーザセッションの状態を確認し、そのユーザがログイン中で作業しているのかを確認したりして、本当に残留ロックなのかを見極めてから最小範囲で解除するのが基本ルールです。
もし、そのユーザに対して連絡が取れる状態であれば、直接確認するのが一番確実です。
ロックの関連テーブル
ロックエントリの情報はテーブル上で履歴をとることはなく、あくまで共有メモリ上に存在していますので、ここではロックオブジェクトの定義に関連するテーブルをご紹介します。
| テーブルID | テーブル内容 |
|---|
| DD25L | ロックオブジェクト名とロック対象テーブルなどの情報が格納されています ビュー定義と混在しており、項目:集合体タイプでE(ロックオブジェクト)を指定するとロックオブジェクトの情報を照会できます |
| DD26S | ロックパラメータ(キー項目)など、オブジェクト配下の“項目定義”が格納されています |
ロックオブジェクト関連テーブル
まとめ
SM12は、その時点でのシステム上に存在するロックエントリを可視化し、誰が・どのテーブルの・どのキーを・どのモードで掴んでいるかを把握して、必要に応じて安全に解除するための“現場の復旧ツール”です。
強制解除の注意点としては、SM04・SM13・SM37・ST22で周辺状況を確認してから、最小範囲で解除することです。整合性と復旧速度を両立させるためにこの順番を守ることが肝要です。是非参考にしてください!
SAP運用保守でよく使うトランザクションコードを以下の記事にまとめた記事が参考になるぞい!
あわせて読みたい
【SAP運用保守で使える!】システム不具合調査で役立つトランザクションコードまとめ
この記事を読むメリット SAPシステムの不具合調査で使える主要なトランザクションコードを知ることができます。 エラーの種類別に効率的な調査手順を習得できます。 シ…