カテゴリ:5.データベース > 5.3 トランザクション処理

排他制御
複数の人がデータベースを使うと、整合性が保てない場合があります。そこで、排他制御が用意されています。この機能により、データの一貫性が保たれます。

トランザクション管理
 トランザクションとはデータベースの処理における、一連の動作のことです。トランザクションでは処理では、データの整合性を保つためにACIDと言われる4つの特性が求められます。
 なぜ整合性を取る必要があるのでしょうか。たとえば、Webにて株を100株売却した場合を考えてください。保有する株数を減らすと同時に、売却して得た代金を増やす処理が必要です。もし、株数を減らす処理したあとに、システム障害が発生し、売却した代金が増えなかったら困りますよね。また、複数人が同時に異なるデータを書き込んだ場合に、データの不整合が起きる可能性があります。
aa
応用情報技術者試験シラバスでは、「(3)トランザクション管理」として、「データベースは複数の利用者が同時にアクセスするので,トランザクション処理にはACID特性が求められること,四つの特性の意味を理解する。」とあります。

ACIDとは、原子性、一貫性、独立性、耐久性の4つです。
※参考ですが、シラバスにはこれら4つの項目の記載や解説はなく、ACIDという言葉だけの記載です。

 では、ACID特性の4つの内容を確認しましょう。
①A:原子性(atomicity)
トランザクションが終了したときの状態は,処理済みか未処理のどちらかしかないという性質
②C:一貫性(Consistency)
同一データベースに対する同一処理は,何度実行しても結果は同じであるという性質
③I:独立性(Isolation)
一つのトランザクションの処理結果は,他のトランザクション処理の影響を受けないという性質。
④D:耐久性(Durability)
トランザクション完了後にハードウェア障害が発生しても,更新されたデータベースの内容は保証されるという性質

H25春AP午前(H23特別AP午前 問32と同じ)
問30 トランザクションの原子性(atomicity)の説明として,適切なものはどれか。
ア データの物理的格納場所やアプリケーションプログラムの実行場所を意識することなくトランザクション処理が行える。
イ トランザクションが終了したときの状態は,処理済みか未処理のどちらかしかない。
ウ トランザクション処理においてデータベースの一貫性が保てる。
エ 複数のトランザクションを同時に処理した場合でも,個々の処理結果は正しい。
正解は、イです。

インデックス
応用情報技術者試験シラバスでは、「(4)データベースの性能向上」として、「データベースへのアクセス効率向上のために,インデックスを有効に活用する考え方を理解する。」とあります。

過去問(H27春AP)
問29“部品”表のメーカコード列に対し,B゛木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデータ件数は十分に多く,メーカコードの値は均一に分散されているものとする。
  また,“部品”表のごく少数の行には,メーカコード列にNULLが設定されている。
  ここで,実線の下線は主キーを,破線の下線は外部キーを表す。




部品(部品コード,部品名,メーカコード)
メーカ(メーカコード,メーカ名,住所)
メーカコードの値が1001以外の部品を検索する。
メーカコードの値が1001でも4001でもない部品を検索する。
メーカコードの値が4001以上,4003以下の部品を検索する。
メーカコードの値がNULL以外の部品を検索する。
ああ

ACID特性の一貫性や独立性を保つための機能に、排他制御があります。皆さんが日頃、表計算ソフトなどによってファイルを操作するとき、誰かが開いていると、読み取り専用でしか開けないと思います。これは、複数の人で同じデータを更新すると、不整合が起きるからです。そこで、誰がデータを操作しているときに、他の人のデータ操作を制限する仕組みがロックです。ロックには、共有ロックと専有ロックがあります。

専有ロック
文字通り、一人でロックを専有します。ロックされている間は、他の人が書き込むことはもちろん、読むこともできません。複数人による操作でデータの不整合を無くすために、データに書き込みをする場合は、専有ロックがかかります。

共有ロック
データを読むときに使用します。複数人が同時にロックをかけることができます(つまり、ロックを共有できるので、「共有ロック」と言います)。誰かがが共有ロック中に、他の人も読むことはできます(書き込みはできません)。
応用情報技術者試験を勉強する成子 

読むだけなのにロックをかけるのはなぜですか?




他の人にデータを読んでいることを伝えるためです。
こうすることで、専有ロックをかけられてしまう(=つまり、読めなくなる)ことを防ぎます。
ロック
共有ロック中は、他のトランザクションからの共有ロックのみが可能です。専有ロック中は、他のトランザクションからの一切のロックができません。
その関係を表にすると、以下になります。

         他のTRからの共有ロック   他のTRからの専有ロック
共有ロック中       ◎               ×
専有ロック中         ×             ×
※TR=トランザクション

過去問を見てみましょう。
H25春AP午前
問31 トランザクションの同時実行制御に用いられるロックの動作に関する記述のうち,適切なものはどれか。

ア 共有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
イ 共有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。
ウ 専有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
工 専有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。





正解は、アです。

■1.デッドロックとは
2人が紙工作をしていて仕上げるには、糊(のり)とハサミの2つが必要としましょう。A君が糊(のり)を専有していて、B君がハサミを専有している場合、どちらも工作を仕上げることができません。同じことがトランザクションにも言えます。2つのトランザクションが、共通の資源をロックしあうと、それ以上進まない状態に陥る可能性があります。これをデッドロックと言います。

過去問(H24秋IP問67)では、「デッドロックの説明」として,「複数のプロセスが共通の資源を排他的に利用する場合に,お互いに相手のプロセスが占有している資源が解放されるのを待っている状態」とあります。
デッドロック

■2.デッドロックの過去問
平成29年春期 午前 問29
問29 トランザクションAとBが,共通の資源であるテーブルaとbを表に示すように更新するとき,デッドロックとなるのはどの時点か。ここで,表中の①~⑧は処理の実行順序を示す。また,ロックはテーブルの更新直前にテーブル単位で行い,アンロックはトランザクション終了時に行うものとする。
問29





正解は、エです。

データベースサーバの電源故障などにより、データベースに障害が発生することがあります。データベースには、障害が発生した場合、特にメモリ上のデータは消えてしまうことがあります。そんな場合でも、データを障害発生の直前に戻す機能が備わっています。

まずは、データの書き込み処理を理解しましょう。データの追加・変更などの処理によって、データの保存には次の3つのアクションがあります。
①SQL操作(UPDATEやDELETEなど)
 更新前ログと更新後ログをメモリに書き込みます。ログは、操作の都度記載されます。このときの更新前ログが、ロールバックに活用されます。製品の実装にもよりますが、このログはファイルにも書き込むことでしょう(そうしないと、システム障害時にロールバックできません)。ログファイルはジャーナルファイル(Oracleの場合はREDOログ)と言われます。

②コミット(COMMIT)を実行
 変更を確定します。このとき、確定した変更内容をログに書き込みます。この変更後のログファイルがロールフォワードに活用されます。※このとき、先ほどのSQL操作で一時保存していた更新前ログなどは不要になるので破棄されます。

③チェックポイント時
 コミットによって作成された確定のログファイルを、ディスクのデータベースに書き込みます。
db_rollback
このような3つのアクションに分けず、いきなりデータベースに書き込んでもいいという考えもあります。
しかし、ディスクに書き込む処理には時間がかかりますので非効率です。そこで、メモリ上に書き込むのです。そして、データベース上のデータの確定保存するには、コミット(COMMIT)という命令を実行します。これによって、ディスク上のログに書き込みが確定され、データの更新が確定します。
しかし、この時点でも、まだディスクのデータベースには書き込まれません。実際に書き込まれるのはチェックポイントというタイミングです。

このあたりの動作は製品によって異なります。資料としては以下が分かりやすいです。
https://www.atmarkit.co.jp/ait/articles/1107/01/news140_2.html


■ロールバック
トランザクションが途中で終了している場合、データの不整合が起こる可能性があります。(不整合の例は以下に記載しました。
http://sm.seeeko.com/archives/15876944.html )
そこで、ログファイルの更新前情報を使ってトランザクションを元に戻します。
過去問(H28秋SM午前2問13)では、「データベースのロールバック処理の説明」として、「ログの更新前情報を用いて,トランザクション開始直前の状態にデータを復元させる」とあります。

■ロールフォワード
トランザクションはすでに完了しています。チェックポイントが来ていない場合において、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態になります。
ロールフォワードは「ログの更新後情報を用いて,トランザクション開始後の障害直前の状態にデータを復元させる(H28秋SM午前2問13不正解選択肢)」ことです。

次のT1~T3の3つのトランザクションで考えます。
T1の場合、トランザクションが終了し、チェックポイントが過ぎています。データはディスクに反映されていますから、何も処理する必要はありません。
T2ですが、トランザクションが途中で終了しています。データの不整合が起こる可能性がありますから、ログファイルの更新前情報を使ってトランザクションを元に戻します。この処理をロールバックと言います。
最後にT3ですが、トランザクションはすでに完了しています。チェックポイントが来ていないので、ディスクにはデータが反映されていません。そこで、ログファイルの更新後情報を使ってディスクに書き込みをすれば、最新の状態(障害直前の状態)になります。この処理をロールフォワードと言います。

tran

過去問(H16春FE午後問2)にて、データベースの障害回復機能の問題があるので紹介します。
この問題を解いてみるといいでしょう。
問2 データベースの障害回復機能に関する次の記述を読んで,設問1~4に答えよ。
あるデータベースシステムでは,定期的にバックアップをとるとともに,更新前情報及び更新後情報をログファイルに記録している。システム障害が発生した場合は,ロールバック処理,ロールフォワード処理及び再処理を組み合わせたウォームスタートで再始動する運用を行っている。
このデータベースシステムでは,チェックポイントで,更新前ログ及び更新後ログヘの情報書出しとデータベースへの書出しを一致させている。したがって,例えばロールバック処理は,ログファイル上の更新前情報を使って,データベースを直前のチェックポイントの時点まで戻すことによって,整合性を保つ。

H28春AP午前
問28 トランザクションA(処理A1→処理A2 順に実行する)とトランザクションB(処理B1→処理B2 順に実行する)が,データベースの資源SとTに対し,次のように処理A1→処理B1→処理A2→処理B2 順で専有ロックを要求する場合,デッドロックが発生する資源の組合せはどれか。
なお,ロックは処理開始時にかけ,トランザクション終了時に解除する。
20170906_4-1






正解は、イです。

問30 媒体障害の回復において,最新のデータベースのバックアップをリストアした後に,トランザクションログを用いて行う操作はどれか。

ア バックアップ取得後でコミット前に中断した全てのトランザクションをロールバックする。
イ バックアップ取得後でコミット前に中断した全てのトランザクションをロールフォワードする。
ウ バックアップ取得後にコミットした全てのトランザクションをロールバックする。
エ バックアップ取得後にコミットした全てのトランザクションをロールフォワードする。






正解は、エです。

H27秋AP午前
問30 チェックポイントを取得するDBMSにおいて,図のような時間経過でシステム障害が発生した。前進復帰(ロールフォワード)によって障害回復できるトランザクションだけを全て挙げたものはどれか。
20170906_4-2





ロールフォワードなので、コミット後のログの更新後情報を用います。
障害発生前にコミットしているのはT4とT5の2つです。
正解は、ウです。

H26春AP午前
(H21春AP午前 問33と同じ)
問29 分散データベースにおいて図のようなコマンドシーケンスがあった。調停者がシーケンス a で発行したコマンドはどれか。ここで,コマンドシーケンスの記述にUMLのシーケンス図の記法を用いる。
20170906_4-3
ア COMMITの実行要求
イ ROLLBACKの実行要求
ウ 判定レコードの書出し要求
エ ログ書出しの実行要求






正解は、イです。

H28秋AP午前問30
問30 DBMSをシステム障害発生後に再立上げするとき,ロールフォワードすべきトランザクションとロールバックすべきトランザクションの組合せとして,適切なものはどれか。ここで,トランザクションの中で実行される処理内容は次のとおりとする。

トランザクション
データベースに対するRead回数とWrite回数
T1,T2
Read 10,Write 20
T3,T4
Read 100
T5,T6
Read 20,Write 10
28A-AP問30


ロールフォワードロールバック
T2,T5T6
T2,T5T3,T6
T1,T2,T5T6
T1,T2,T5T3,T6






T1は無事にチェックポイントを終えているので、ディスクのDBに反映済みです。何もする必要はありません。
T2とT5はコミットしているので、ロールフォワードしましょう。
T3、T4はReadだけなので、何もする必要はありません。
T6は、書き込みをしているので、整合性を保つためにも更新前情報でロールバックします。
正解は、アです。

↑このページのトップヘ