すべてのデータベース・ファイルは、定義上、複数のユーザーにより同時に使用できます。しかし、一部の 操作では、ファイル、メンバー、またはレコードが複数のジョブで共用されないようにするために、ロック することができます。
ファイル、メンバー、またはレコードがロックされているとき、他のジョブが更新操作のために同じデータ を読み取ることはできません。このことは、最初のジョブによる更新を、別のジョブが不用意に削除するこ とも防ぐことになります。
System i ナビゲーターから表を開いてロックしたい行を編集することにより、行をロックすることができ
ます。または SQL LOCK TABLE ステートメントをこのために使用します。行に加えて、ファイル、メン バー、およびデータ・レコードをロックできます。ロックされたレコードは、「レコード・ロック表示 (DSPRCDLCK)」コマンド、または System i ナビゲーターを使用して表示できます。
関連資料:
LOCK TABLE レコードのロック:
DB2 for i には、レコードの保全性が組み込まれています。
ここでは、レコードの組み込み保全性の例を示します。PGMA がレコードを更新操作のために読み取る場 合、そのレコードをロックします。別のプログラムは、PGMA がこのレコードを解放するまで、同じレコ ードを更新操作のために読み取ることはできません。しかし単に照会のためだけであれば、レコードを読み 取ることができます。
このような方法でシステムは、データベースの保全性を確保します。ただし、WAITRCD パラメーターを 使用して、ロック・レコードが解放されるまでの待ち時間を設定できます。
システムは、プログラムで指定されているファイル処理のタイプと、要求された操作に基づいてロック条件 を判別します。たとえば、オープンのオプションに更新または削除が含まれている場合、複数ユーザーが同 時にレコードを読み取ることができても、 1 人のユーザーしかレコードを更新することができないよう に、レコードの読み取りのたびにロックされます。
システムは通常、ロックされたレコードが解放されるのを指定された秒数だけ待ち、その後、ユーザーが要 求しているレコードを入手することができないというメッセージをプログラムに送ります。省略時のレコー ド待ち時間は 60 秒です。しかし、ファイルの作成コマンド、ファイルの変更コマンド、およびデータベー ス・ファイルの一時変更コマンドに WAITRCD パラメーターを指定して、独自の待ち時間を設定すること ができます。必要とするレコードが別の操作によってロック中であるということがプログラムに通知された 場合、プログラムに適切な処置を取らせる (たとえば、要求されたレコードが現在使用できないというメッ セージを操作員に送る) ことができます。
参照保全 CASCADE DELETE、SET NULL、または SET DEFAULT 削除規則の結果としてレコード・ロ ックが暗黙的に獲得される場合には、ロック待ち時間が 30 秒に制限されます。
ロックされたレコードが更新または削除されると、システムは自動的にロックを解除します。ただし、レコ ードを更新しないでレコード・ロックを解除することもできます。レコード・ロックの解除方法について は、該当の高水準言語のコレクションを参照してください。
注: コミットメント制御を使用すると、レコード・ロックの規則が変わります。
ロックされたレコードは、「レコード・ロック表示 (DSPRCDLCK)」コマンド、または System i ナビゲー ターのいずれかを使用して、表示できます。
関連概念:
コミットメント制御
121ページの『「レコード・ロック表示 (DSPRCDLCK)」コマンドを使用した、ロックされたレコードの 表示』
「レコード・ロックの表示 (DSPRCDLCK)」コマンドを使用して、物理ファイル・メンバーのレコードの 現在のロック状況 (待機または保留) を表示することもできます。
関連タスク:
120ページの『System i ナビゲーターを使用した、ロックされた行の表示』
System i ナビゲーターを使用して、ロックされた行を表に表示することができます。
ファイルのロック:
データベース・ファイルが排他的に割り振られている間は、そのファイルをオープンしようとするどのプロ グラムも、ファイルが解放されるまで待たなければなりません。ただし、WAITFILE パラメーターを使用 して、ファイルが使用可能になるまでの待ち時間を設定できます。
ファイルが使用可能になるまでプログラムが待つ時間を制御するには、ファイルの作成コマンド、ファイル の変更コマンド、およびデータベース・ファイルの一時変更コマンドの WAITFILE パラメーターで待ち時 間を指定します。待ち時間を特に要求していない場合には、システムはファイル待ち時間の省略時である 0 秒を使用します。
ファイルの属性を変更する操作の実行中は、そのファイルは排他的に割り振られています。このような操作
(移動、名前変更、権限の認可または取り消し、所有者の変更、削除など) は、同じファイルまたは同じフ
ァイルのメンバーに対する他の操作と同時に実行することはできません。他のファイル操作 (表示、オープ ン、ダンプ、オブジェクト検査など) はファイル定義だけを使用するので、ファイルのロックの排他性は低 くなります。このような操作はお互いに同時に実行したり、または 1 つのメンバーの入出力操作と同時に 実行したりすることができます。
メンバーのロック:
メンバー操作 (追加、削除など) では、他のファイル操作が同時に起こらないように、自動的にファイルが 排他的に割り振られます。
同じメンバーに対する入出力操作 (I/O) は実行できませんが、同じファイルの他のメンバーに対する入出力 操作は同時に実行できます。
レコード様式データのロック:
あるレコード様式に関連するレコードのセット全体 (たとえば、1 つの物理ファイル中のすべてのレコー ド) をロックしたい場合が時にあります。この場合には、「データベース・ファイルによる一時変更 (OVRDBF)」コマンドで RCDFMTLCK パラメーターを使用できます。
データベース・ロックに関する考慮事項:
以下の表は、一部のデータベース機能がデータベース・ファイルにかけるロックのタイプ、有効なロックの 組み合わせ、および制約のロックのタイプを示します。
表37 は、最も一般的に使用されるデータベース機能、およびそれらがデータベース・ファイルにかけるロ ックのタイプをいくつかまとめて示したものです。ロックのタイプは、次のページに説明されています。
表37. データベース機能とロック
機能 コマンド ファイル・ロック メンバー/データ・ロ ック
アクセス・パス・ロッ ク
メンバーの追加 ADDPFM、ADDLFM *EXCLRD *EXCLRD ファイル属性の変更 CHGPF,
CHGLF
*EXCL *EXCLRD *EXCLRD
メンバー属性の変更 CHGPFM, CHGLFM *SHRRD *EXCLRD オブジェクト所有者の
変更
CHGOBJOWN *EXCL
オブジェクトの検査 CHKOBJ *SHRNUPD 物理ファイル・メンバ
ーの消去
CLRPFM *SHRRD *EXCLRD3
重複オブジェクトの作 成
CRTDUPOBJ *EXCL (新規オブジェ
クト) *SHRNUPD (オ ブジェクト)
ファイルの作成 CRTPF, CRTLF, CRTSRCPF
*EXCL
ファイルの削除 DLTF *EXCL *EXCLRD
表37. データベース機能とロック (続き)
機能 コマンド ファイル・ロック メンバー/データ・ロ ック
アクセス・パス・ロッ ク
権限の認可/取り消し GRTOBJAUT、
RVKOBJAUT
*EXCL
物理ファイル・メンバ ーの初期設定
INZPFM *SHRRD *EXCLRD
オブジェクトの移動 MOVOBJ *EXCL ファイルのオープン OPNDBF、
OPNQRYF
*SHRRD *SHRRD *EXCLRD
アクセス・パスの再作 成
EDTRBDAP、 OPNDBF
*SHRRD *SHRRD *EXCLRD
メンバーの除去 RMVM *EXCLRD *EXCL *EXCLRD ファイル名の変更 RNMOBJ *EXCL *EXCL *EXCL メンバー名の変更 RNMM *EXCLRD *EXCL *EXCL 物理ファイル・メンバ
ーの再編成
RGZPFM *SHRRD *EXCL4
ファイルの復元 RSTLIB、RSTOBJ *EXCL ファイルの保管 SAVLIB、SAVOBJ、
SAVCHGOBJ
*SHRNUPD1 *SHRNUPD2
1 活動中保管の場合、ファイル・ロックは最初 *SHRUPD で、それから *SHRRD へ軽減されます。保管 コマンドの活動中保管ロックの説明については、活動中保管機能 (Save-while-active function) を参照してく ださい。
2 活動中保管の場合は、メンバー/データのロックは *SHRRD です。
3 このプロセスまたは他のプロセスでメンバーがオープンされる場合、消去操作は行われません。
4 ALWCANCEL(*YES) が指定されている場合、 LOCK キーワードで代わりに *SHRUPD または
*EXCLRD ロックを指定できます。
以下の表は、有効なロックの組み合わせを示したものです。
ロック *EXCL *EXCLRD *SHRUPD *SHRNUPD *SHRRD
*EXCL1
*EXCLRD2 X
*SHRUPD3 X X
*SHRNUPD4 X X
*SHRRD5 X X X X
1 排他ロック (*EXCL)。オブジェクトは要求するジョブの排他的使用のために割り振られますが、他のジ ョブはそのオブジェクトを使用できません。
2 排他ロック、読み取り可能 (*EXCLRD)。オブジェクトはそれを要求したジョブに割り振られますが、他 のジョブはそのオブジェクトを読み取ることができます。
3 共用ロック、読み取りおよび更新可能 (*SHRUPD)。 オブジェクトは、読み取りまたは変更のいずれかの 場合に他のジョブとの共用が可能です。
4 共用ロック、読み取り専用 (*SHRNUPD)。オブジェクトは、読み取りの場合に他のジョブとの共用が可 能です。
5 共用ロック (*SHRRD)。ジョブがオブジェクトの排他的使用を要求しない場合、オブジェクトは別のジョ ブとの共用が可能です。
表38 は、制約が親ファイル (PAR) または従属ファイル (DEP) のどちらと関連付けられているかに対応す る、データベース・ファイル制約用のデータベース・ロックを示しています。
表38. データベース制約ロック
機能のタイプ ファイル・タイプ ファイル5 メンバー5 他のファイル 他のメンバー
ADDPFM1 DEP *EXCL *EXCL *EXCL *EXCL
ADDPFM1 PAR *EXCL *EXCL *EXCL *EXCL
ADDPFCST7 *REFCST *EXCL *EXCL *EXCL *EXCL
ADDPFCST6 *UNQCST *PRIKEY *EXCL *EXCL *EXCL *EXCL
ADDPFCST *UNIQUE *PRIKEY *EXCL *EXCL
RMVM2 DEP *EXCL *EXCL *EXCL *EXCL
RMVM2 PAR *EXCL *EXCL *EXCL *EXCL
DLTF3 DEP *EXCL *EXCL *EXCL *EXCL
DLTF3 PAR *EXCL *EXCL *EXCL *EXCL
RMVPFCST7 *REFCST *EXCL *EXCL *EXCL4 *EXCL
RMVPFCST6 *UNQCST *PRIKEY *EXCL *EXCL *EXCL *EXCL
RMVPFCST *UNIQUE *PRIKEY *EXCL *EXCL
CHGPFCST *EXCL *EXCL *SHRRD *EXCL
1 物理ファイル・メンバーを追加することで、参照制約が確定する場合。
2 物理ファイル・メンバーを除去することで、確定済み参照制約が定義済みになる場合。
3 そのファイルについて確定済みまたは定義済みの制約を有する従属ファイルまたは親ファイルを削除する 場合。
4 確定済みまたは定義済みの制約を有する親ファイルに対して「物理ファイル制約の除去 (RMVPFCST)」
コマンドを呼び出す場合は、親ファイルおよび、その親ファイルを基にした論理ファイルは、すべて
*EXCL ロックされます。
5 参照制約の場合、この欄は、従属ファイルまたは従属メンバーに関するものです。
6 固有制約または基本キー制約は、他のファイルを従属ファイルとして持つ参照制約内の親キーです。
7 その他のファイルは、親ファイルです。
System i ナビゲーターを使用した、ロックされた行の表示:
System i ナビゲーターを使用して、ロックされた行を表に表示することができます。
ロックされた行を表示するには、以下のステップに従ってください。
1. System i ナビゲーターから、ご使用のシステム > 「データベース」を展開します。
2. 処理したいデータベースを拡張します。
3. 「スキーマ」、およびロックされた行を表示したい表が入っているスキーマを展開します。
4. 「表 (Tables)」をクリックします。