基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,データベース管理システム(DBMS)についてシンプルにまとめています。はじめに,データベースの物理設計について説明し,その後,データベース管理システムについて説明しています。データベース管理システムについては,データベース定義(3層スキーマ),データベース操作,トランザクションの管理(トランザクション,ACID特性,コミット,ロールバック,ロールフォワード,同時実行制御(排他制御),ロック方式(専有ロックと共有ロック,ロックの粒度,デッドロック),障害回復(バックアップ(フルバックアップ,差分バックアップ,増分バックアップ),ログ(更新前ログ,更新後ログ),媒体障害からの回復,システム障害からの回復(チェックポイント,データやログの更新のタイミング,ウォームスタート方式期による回復処理,コールドスタート方式による回復処理),トランザクション障害からの回復))などについて説明しています。今回もたくさんありますが,頑張りましょう。
物理設計
物理設計は,システム開発の内部設計で行われます。使用するデータベース管理システム(DBMS)に合わせて,データ量や,データの使用頻度,パフォーマンス性などを考慮し,物理データモデルとしてモデル化します。物理データモデルは,データベース用の言語を使用して,実際に記憶装置に記憶するときの構造を記述した(実装に依存する)ものになります。
データベース管理システム(DBMS;DataBase Management System)
データベース管理システムの機能には,次のようなものがあります。
データベース定義 | データベースの構造やデータの格納形式を3層スキーマとして定義する |
データベース操作 | データベースへの操作(作成,読出し,更新,削除)を,データベース言語を使用して行う |
同時実行制御 (排他制御) | 複数のトランザクションを同時に実行した場合でも,データの整合性を保つ機能 |
障害回復 | 障害が起こった際に,データベースを回復し元の状態に戻す機能 |
※ 各機能の詳細は後述
3層スキーマ(データベース定義)
3層スキーマとは,データベースのスキーマ(構造やデータの格納形式)を3つの階層に分けて定義する方式をいいます。
※ スキーマ…形式,図式,枠組みなどの意味を持つ
外部スキーマ | 利用者やアプリケーションプログラムから見たデータを定義する。関係データベースのビュー定義に相当する。概念スキーマに変更があった場合でも,ビューを変更するだけでよく,アプリケーションプログラムを変更する必要はない(論理的データ独立性) |
概念スキーマ | データの論理的な構造を定義する。関係データベースの表(テーブル)定義に相当する |
内部スキーマ | 記憶装置上のデータの配置や格納方法について定義する。概念スキーマに変更があった場合でも,データベースファイルを変更する必要はない(物理的データ独立性) |
データベース操作
スキーマの定義やデータベースへの操作(作成,読出し,更新,削除)は,データベース言語を使用して行います。データベース言語には,次のようなものがあります。
※ CRUD(Create:作成,Read:読出し,Update:更新,Delete:削除)
SQL | 関係データベースの管理や操作をするために使用する世界標準のデータベース言語 |
NDL | 網型データベース用のデータベース言語 |
※ SQLについては,「SQL -情報処理シンプルまとめ」を参照
トランザクションの管理
トランザクション
トランザクションとは,データベースにおける処理の最小単位をいいます。
トランザクションについては,データベース管理システムがACID特性を保持しながら処理を実行します。
原子性 (Atomicity) | すべての処理を完全に実行するか,あるいは,まったく実行しない(処理をなかったことにする)かのどちらかで終了すること |
一貫性 (Consistency) | 常に,データに矛盾が生じない(整合性が保たれている)こと |
隔離性 (Isolation) | 複数のトランザクションを同時に実行した場合と,順に実行した場合の結果が一致すること |
耐久性 (Durability) | トランザクションのコミット(正常終了)後は,障害が発生してもデータが消えたり,内容が変わったりしないこと |
コミット(COMMIT)
コミットとは,トランザクションの内容を確定し,データベースに反映させることをいいます。
※ データの更新をコミットする場合,主記憶装置にあるデータを更新するだけで,データベースへの書き込みは行わない(データベースへの書き込みはチェックポイントで行う。チェックポイントについては後述)
ロールバック(ROLLBACK)(後退復帰)
ロールバックとは,トランザクションの途中でエラーなどにより正しく処理されなかった場合に,それまでの処理をすべて取り消し,トランザクション開始前の状態に戻すことをいいます。
ロールフォワード(ROLLFORWARD)(前進復帰)
ロールフォワードとは,媒体障害などが発生した場合に,ある時点(チェックポイント)で複製し退避しておいたバックアップデータを使用して復元し,その後,更新後ログを使用して障害発生直前の状態に戻すことをいいます。
※ チェックポイント,更新後ログについては後述
同時実行制御(排他制御)
同時実行制御とは,複数のトランザクションを同時に実行した場合でも,データの整合性を保つ機能をいいます。同時実行制御が行われない場合は,変更の消失(ロストアップデート)や不整合(整合性が保てなくなる)といった問題が発生します。
同時実行制御方式には,次のようなものがあります。
ロック方式 | 表単位や行単位にロックをかけ,トランザクションが終了するか,または,ロックを解除するまで,他のトランザクションを待たせる方式。デッドロックが発生する可能性がある ※ 詳細は後述 |
時刻印方式 (タイムスタンプ) | トランザクションの発生時刻と,データの最新読込時刻,または,データの最新書込時刻を比較し,読み込むか書き込むかを判断する方式。ロックをかけないので,デッドロックは発生しない |
楽観的方式 | トランザクションが終了しデータを書き込むときに,そのデータが他のトランザクションによって更新されていない場合は書き込み,更新されている場合はデータをロールバックして再実行する方式。ロックをかけないので,デッドロックは発生しない |
ロック方式
表単位や行単位にロックをかけ,トランザクションが終了するか,または,ロックを解除するまで,他のトランザクションを待たせる方式です。
専有ロックと共有ロック
データベース管理システムは,トランザクションの並行実行度を高めるために,次の2つのロックモードを提供しています。
専有ロック | データ更新時に使用されるロック。他のトランザクションからのアクセスは,すべて禁止される |
共有ロック | データ読取時に使用されるロック。他のトランザクションは参照のみ許可される |
2つのロックモードの組み合わせによる並行実行の可否は次のとおりです。
先行トランザクション | 後続トランザクション |
---|---|
専有ロック | 専有ロックも共有ロックもかけることができない |
共有ロック | 共有ロックのみかけることができる |
昔の情報処理技術者試験では,専有ロックの「専有」は,「占有」となっていました。最近は,「専有」で出題されていますので,こちらで覚えてください。
ロックの粒度
ロックの粒度とは,ロックをかける範囲(表単位や行単位など)のことをいいます。ロックの粒度が小さい場合(行単位など)は,ロック解除待ちが短くなり並行実行度を高めることができますが,ロックの回数が多くなりオーバーヘッドは増大します。ロックの粒度が大きい場合(表単位など)は,ロックの解除待ちが長くなりスループットが低下します。
デッドロック
デッドロックとは,複数のトランザクションが互いにロック解除待ち状態となり実行できなくなることをいいます。複数のトランザクションが複数のデータに対してロックを行う場合に発生する可能性があります。デッドロックが発生した場合,1つのトランザクションを強制的に終了(アボート)させることによりデッドロックを解除します。
なお,複数のトランザクションが1つのデータに対してロックをかける場合や,複数のデータに対してロックをかける場合でもデータを専有する順序が同じ場合,デッドロックは発生しません。
障害回復
障害回復とは,データベースに障害が発生した際に,元の正常な状態に戻す機能のことをいいます。
障害の種類
障害の種類には,次のようなものがあります。
媒体障害 | データベースが格納されている記憶媒体の障害 |
システム障害 | OSのバグなどでシステムがダウンしてしまう障害 |
トランザクション障害 | プログラムのバグや,デッドロック発生時のトランザクション強制終了などによる障害 |
このような障害が発生した場合でもトランザクションの「耐久性」を保証するためには,事前にバックアップファイルとログファイルを採取しておく必要があります。
※ トランザクションの「耐久性」については上述
バックアップファイル
バックアップファイルとは,定期的にデータベースやログファイルを別の媒体に複写し退避したものをいいます。
フルバックアップ
フルバックアップの場合,毎回,すべてのデータを複製し退避します。
- バックアップに時間がかかる
- 記憶容量が多く必要
- リストア(復元)の手間が少ない
差分バックアップ
差分バックアップの場合,直前のフルバックアップから追加・変更されたデータを複製し退避します。
- リストア(復元)は,直前のフルバックアップと差分バックアップのデータだけで可能
- バックアップのデータ量を少なくできる
増分バックアップ
増分バックアップの場合,直前のバックアップから追加・変更されたデータを複製し退避します。
- バックアップにかかる時間が短い
- バックアップのデータ量を少なくできる
- リストア(復元)に手間がかかる
ログファイル(ジャーナルファイル)
ログファイルとは,データベースに対する変更を時系列に記録したファイルのことをいいます。次の値を記録します。
更新前ログ | データの更新前の値 |
更新後ログ | データの更新後の値 |
※ ログファイルへの記録(書き込み)は,コミット(または,チェックポイント)のタイミングで行う
※ ログファイルのバックアップは,ログファイルが一杯になって次のログファイルに切り替えるタイミングで行う
媒体障害からの回復
媒体障害が発生した場合,次のような回復処理を行います。
まず,バックアップファイルを別の媒体にリストア(復元)します。次に,バックアップファイル作成後から媒体障害発生時点までの間に作成された更新後ログを用いて回復処理を行います(ロールフォワード(前進復帰))。
システム障害からの回復
システム障害が発生した場合,トランザクションの開始やコミットのタイミングが,チェックポイントの前にあるか後にあるかによって処理が分かれます。
チェックポイント
チェックポイントとは,主記憶装置にある更新データをデータベースに書き出すタイミングのことをいいます。回復処理の起点になります。
※ データの更新をコミットする場合,主記憶装置にあるデータを更新するだけで,データベースへの書き込みは行わない
ちなみに,主記憶装置にある更新ログは,コミットやチェックポイントのタイミングでログファイルに書き出します。
データの更新
コミットのタイミングで主記憶装置のデータを更新し,チェックポイントのタイミングでデータベースに書き出す
※ コミットのタイミングでは,データベースへの書き出しはしない
ログの更新
コミットのタイミングで主記憶装置のログを更新し,ログファイルにも書き出す(チェックポイントのタイミングでも書き出す)
ウォームスタート方式による回復処理
ウォームスタート方式とは,一旦,チェックポイントまで戻り,更新ログを使用してデータベースを回復(ロールバックとロールフォワード)し,再始動する方式です。
T1 | チェックポイントまでにコミットされているため,回復の対象外 |
T2 | システム障害発生前にコミットされているため,チェックポイントから更新後ログを使用してロールフォワードで回復する |
T3 | 障害発生時にはコミットされていないため,チェックポイントから更新前ログを使用してロールバックし,トランザクション開始時点に戻す |
T4 | システム障害発生前にコミットされているため,更新後ログを使用してロールフォワードで回復する |
T5 | 主記憶装置上のデータが消えただけなので,回復の対象外。再処理すればよい |
コールドスタート方式による回復処理
コールドスタート方式とは,コンピューターの電源を切ることにより主記憶装置などをリセットして復旧させ,再始動する方式です。バックアップからの復元を行い,その後トランザクションを再実行します(ログは使用しません)。
トランザクション障害からの回復
トランザクション障害が発生した場合,次のような回復処理を行います。
※ チェックポイントより前にトランザクションを開始した場合は,更新前ログを使用してロールバックし,トランザクション開始時点に戻す
まとめ
今回は,データベース管理システムについて,シンプルにまとめてみました。コミットやチェックポイント,ロールバックやロールフォワードについては,しっかり理解できるまで繰り返し読むようにしましょう。基本情報技術者試験や応用情報技術者試験などの情報処理技術者試験で,実際に出題されています。理解するのが辛いかもしれませんが頑張りましょう。